glGenTexture只能在主要工作吗?

时间:2011-04-26 01:11:09

标签: c++ model-view-controller opengl

之前我已将纹理加载到openGL中,工作正常。但是这次我想在渲染类的构造函数中加载纹理。 (我使用MVC和抽象基类作为接口)。我原本试图加载一个png文件,而不是像之前那样加载bmp所以我认为这与它有关,但是当我回到我的bmp代码时它仍然无效。因此,我将bmp纹理代码移动到主(同一个MVC项目)并且它可以工作。没有工作的实际部分是:

GLuint textureId;
    glGenTextures(1, &textureId); 
    glBindTexture(GL_TEXTURE_2D, textureId);
    //Map the image to the texture
    glTexImage2D(GL_TEXTURE_2D,//This bit!!               
                 0,                           
                 GL_RGB,                      
                 image->width, image->height,  
                 0,                            
                 GL_RGB, 
                 GL_UNSIGNED_BYTE,                                 
                 image->pixels);

如果我介入程序,我注意到textureID保持不变(没有变为1,因为没有纹理映射到它)

这是为什么?它可以修复吗?

2 个答案:

答案 0 :(得分:3)

何时调用构造函数?您需要一个有效的OpenGL上下文来进行任何GL调用。通常的错误是在全局范围内创建对象,这意味着在调用main()之前,在程序启动时构造对象,此时尚未创建OpenGL上下文。

答案 1 :(得分:1)

看起来你将textureId变成了一个局部变量,当当前函数(构造函数)完成时它会消失。如果希望它更长寿,请尝试使用类成员变量。