0

我有一个我正在使用以下内容显示的纹理:

    glEnable (GL_BLEND);
glEnable(GL_TEXTURE_2D);
        glBlendFunc (GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);
        glGenTextures(1, tex);
    glBindTexture (GL_TEXTURE_2D, *tex);
        glBegin (GL_QUADS);
        glTexCoord2f (tx, ty);
        glVertex2f (sx, sy);
        glTexCoord2f (tw, ty);
        glVertex2f (sx + sxmax, sy);
        glTexCoord2f (tw, th);
         glVertex2f (sx + sxmax, sy + symax);
        glTexCoord2f (tx, th);
       glVertex2f (sx, sy + symax);
        glEnd();
        glDisable (GL_TEXTURE_2D);
        glDisable (GL_BLEND);

我正在使用以下内容加载纹理:

    GLuint GetTexture(string Filename)
    {
        GLuint tex_ID;

        tex_ID = SOIL_load_OGL_texture(
                     Filename.c_str(),
                     SOIL_LOAD_AUTO,
                     SOIL_CREATE_NEW_ID,
                     SOIL_FLAG_POWER_OF_TWO
                     | SOIL_FLAG_MIPMAPS
                     | SOIL_FLAG_MULTIPLY_ALPHA
                     | SOIL_FLAG_COMPRESS_TO_DXT
                     | SOIL_FLAG_DDS_LOAD_DIRECT
                     | SOIL_FLAG_INVERT_Y
                 );

        if( tex_ID > 0 )
        {

            glEnable( GL_TEXTURE_2D );

            glBindTexture( GL_TEXTURE_2D, tex_ID );

            return tex_ID;
        }
        else
        {
            cout<<"Texture failed to load"<<SOIL_last_result()<<Filename<<endl;
            return 0;
        }
    }

并通过引用一个类来传递它

当我运行检查以查看纹理是否正确加载时:

if(tex==0)

这是。此外,每当我glColor3f();使用某些值运行时,屏幕上都不会显示任何内容。我做错了什么?

我正在使用 glfw 和 SOIL 来加载/显示纹理。

4

1 回答 1

3
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);
glGenTextures(1, tex);
^^^^^^^^^^^^^^^^^^^^^ I hope tex didn't have anything important in it...
glBindTexture (GL_TEXTURE_2D, *tex);
glBegin (GL_QUADS);
....

每帧都会生成一个全新的纹理。这也恰好是不完整的。

生成一次纹理使用它。

于 2013-08-28T19:34:07.537 回答