常见的OpenGL清理操作,不会破坏上下文

时间:2014-09-15 03:49:17

标签: c++ opengl

最近,我一直在为实时计划进行屏幕外GPU加速。

我想创建一个上下文并重复使用它几次(100+)。我正在使用OpenGL 2.1 and GLSL version 1.20

每次我重复使用上下文时,我都会做以下事情:

  • 编译shaders,链接program然后glUsePrograme(问题1:我应该重新链接program还是每次重新创建program?)< / LI>
  • 生成FBOTexture,然后将它们绑定,以便我可以进行屏幕外渲染。 (问题2:我应该销毁那些FBOTexture
  • 生成GL_Array_BUFFER并在其中放置一些顶点数据。 (问题3:我甚至需要清理它吗?)
  • glDrawArray bluh bluh ...
  • 调用glFinish(),然后通过调用glReadPixels将数据从GPU复制到CPU。

还有其他必要的清理操作我应该考虑吗?

1 个答案:

答案 0 :(得分:0)

如果你可以以某种方式缓存或以其他方式保留OpenGL对象ID,那么你不应该删除它们,而只是在下次运行时重用它们。除非您获得新的ID,否则重用旧的ID将替换现有对象(正确释放其分配)或仅更改其数据。

glFinish之前调用glReadPixels是多余的,因为glReadPixels会导致隐式同步并完成。