c++ - glGenTexture 只在主线程中起作用吗?

标签 c++ model-view-controller opengl

我之前已经将纹理加载到 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/

相关文章:

c++ - 每次迭代在 for 循环中计算 vector 大小是否昂贵?

c++ - Qt - 什么是 QDockWidget::toggleViewAction 的常规小部件等价物

c++ - 如何像类一样为 std::function 实现类型橡皮擦?

php - CakePHP:将 'Services' 逻辑放在哪里

c++ - 无法在 Visual C++ 2010 中链接 glew32

c++ - glBufferData 之后需要glFlush 吗?

c++ - Eclipse (C/C++) 错误 : Job found still running after platform shutdown

model-view-controller - 如何将域对象绑定(bind)到 JavaFX TreeView?

PHP - MVC - 防止在 Controller 中调用不需要的方法的更好方法?

c++ - 绘制带有飞行路径的地球