我之前已经将纹理加载到 openGL 中,工作得很好。但这次我想在渲染类的构造函数中加载纹理。 (我使用带有抽象基类作为接口(interface)的 MVC)。我最初尝试加载一个 png 文件而不是像之前那样加载 bmp,所以我认为这与此有关,但是当我返回到我的 bmp 代码时它仍然不起作用。因此,我有预感将 bmp 纹理代码移至 main(同一 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,因为没有纹理被映射到它)
这是为什么呢?可以修复吗?
最佳答案
什么时候调用构造函数?您需要有效的 OpenGL 上下文才能进行任何 GL 调用。一个常见的错误是在全局范围内创建对象,这意味着该对象是在程序启动时、调用 main() 之前构造的,此时尚未创建 OpenGL 上下文。
关于c++ - glGenTexture 只在主线程中起作用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5784914/