我已经编写了一个使用三个以上函数的小型OpenGL引擎。我目前正在尝试将我的引擎集成到QGLWidget中,但遇到了问题。在没有Qt框架的情况下渲染obj模型时,我得到了预期的结果,但是在使用Qt时,我的OpenGL缓冲区以某种方式被破坏,导致我看到错误的结果甚至什么都看不到。
没有Qt时: 在QGLWidget中: 我想问一下Qt是否会在QGLWidget::paintGL()调用之间更改任何OpenGL状态。我的对象按以下顺序初始化和渲染:
初始化:
没有Qt时: 在QGLWidget中: 我想问一下Qt是否会在QGLWidget::paintGL()调用之间更改任何OpenGL状态。我的对象按以下顺序初始化和渲染:
初始化:
Create and bind vertex array
Create and bind vertex buffer
Fill vertex buffer (works fine - obj loader tested many times)
Calls to glVertexAttribPointer() and glEnableVertexAttribArray()
渲染:
Bind vertex array
Shaders, uniforms, etc.
glDraw*()
glGetError()
,并确保它没有抱怨任何事情?而且您只在已创建并处于当前状态的上下文中进行GL调用的方法中进行调用?您的代码中可能已经存在错误,并且您之前只是幸运地使其工作。特别是,我会仔细查看所有对象ID的管理。确保它们都正确生成,不会意外删除(在将它们包装在C ++对象中时非常常见),并且在所有地方使用正确的ID。 - Reto Koradi