之前我已将纹理加载到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,因为没有纹理映射到它)
这是为什么?它可以修复吗?
答案 0 :(得分:3)
何时调用构造函数?您需要一个有效的OpenGL上下文来进行任何GL调用。通常的错误是在全局范围内创建对象,这意味着在调用main()之前,在程序启动时构造对象,此时尚未创建OpenGL上下文。
答案 1 :(得分:1)
看起来你将textureId
变成了一个局部变量,当当前函数(构造函数)完成时它会消失。如果希望它更长寿,请尝试使用类成员变量。