0

SDL_Surface から OpenGL テクスチャをロードするために、このチュートリアルに従っています。コードをコピーして貼り付けて調整しましたが、バッファの間違った古い部分しか表示されず、少し面倒です...何が悪いのかわかりません。また、Mac Os XでQt5を使用しています。これが私のコードです

GLuint texture;         // This is a handle to our texture object
SDL_Surface *surface;   // This surface will tell us the details of the image
GLenum texture_format;
GLint  nOfColors;
surface = IMG_Load("/brique.png");

if ( surface ) {

    // get the number of channels in the SDL surface
    nOfColors = surface->format->BytesPerPixel;
    if (nOfColors == 4)     // contains an alpha channel
    {
        if (surface->format->Rmask == 0x000000ff)
            texture_format = GL_RGBA;
        else
            texture_format = GL_BGRA;
    } else if (nOfColors == 3)     // no alpha channel
    {
        if (surface->format->Rmask == 0x000000ff)
            texture_format = GL_RGB;
        else
            texture_format = GL_BGR;
    } else {
        printf("warning: the image is not truecolor..  this will probably break\n");
        // this error should not go unhandled
    }

    glEnable( GL_TEXTURE_2D );
    // Have OpenGL generate a texture object handle for us
    glGenTextures( 1, &texture );

    // Bind the texture object
    glBindTexture( GL_TEXTURE_2D, texture );

    // Set the texture's stretching properties
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );

    // Edit the texture object's image data using the information SDL_Surface gives us
    glTexImage2D( GL_TEXTURE_2D, 0, nOfColors, surface->w, surface->h, 0, texture_format, GL_UNSIGNED_BYTE, surface->pixels );
}
else {
    printf("SDL could not load image.bmp: %s\n", SDL_GetError());
    SDL_Quit();
    exit (1);
}

// Free the SDL_Surface only if it was successfully created
if ( surface ) {
    SDL_FreeSurface( surface );
}

結果は次のとおりです。悪い表示

そして、これが関数 glTexImage2D からのデバッグですデバッグ セッション

4

1 に答える 1

1

おそらく宣言していないか、宣言していません(これにより、画面バッファーが反転します)

SDL_GL_SwapBuffers();

そうすることで、ループの最後の部分に配置します。

qglClearColor(qtPurple.dark());

/****************************************
... some ogl initialization code here ...
****************************************/

while (!done)
{
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

   /***********************************
   ... some ogl rendering code here ...
   ***********************************/

   SDL_GL_SwapBuffers();
}

QT5 OGL に関するこのチュートリアルを確認してください。

于 2013-05-13T11:28:36.653 に答える