我可以使用第二个OpenGL上下文在3D场景的顶部渲染UI



是否可以使用多个OpenGL上下文来绘制相同的OpenGL视口,以使每个上下文都有自己的,完全独立的渲染状态?

我的用例将是我想渲染UI的3D场景。UI使用的课程设置与3D场景大不相同 - 没有对开始的投影,然后3D场景使用旧版OpenGL,而UI具有自定义的着色器程序。

因此,我的想法是让每个渲染任务(3D场景和UI(使用其自己的OpenGL上下文,每个上下文都可以根据自己的需求在窗口初始化时间内根据自己的需求进行配置。在渲染时间,每个任务将简单地选择自己的渲染上下文,避免浪费时间重新配置单个上下文。

我现在尝试过,但是有一个空白屏幕 - 当然,这可能是由于我的代码中的错误,但是在投入更多时间之前,我想知道这是否是一个主意值得追求,或者是与OpenGl的谷物相反的。

(我使用glew在Windows 10下使用SDL2,并使用Visual Studio 2015编译32位(。

这不是值得追求的想法。由于以下原因:

一个原因是在状态之间更快地切换

这不会更快地切换状态。至少在现实世界的表现方面。切换渲染上下文是一个非常重量级操作。更改上下文状态的每个部分仍然比执行完整的上下文开关要快。

哦,我确定您写的速度更快。但这不会使您的实际程序更快。

另一个使状态保持分开且彼此独立

您可以通过简单确保使这些独特的渲染操作设置他们在运营开始时依赖的状态来足够轻松地做到这一点。这也具有确保您知道您的操作依赖于哪种状态的效果。

每个操作都可以拥有自己的独立对象:VAO,缓冲区,纹理,程序,甚至框架缓冲器。这是在需要时确保在需要时更改重要的全球状态,就是将这两个操作分开所需的全部。

在一个上下文中,每帧,在渲染3D场景后,禁用GL_DEPTH_TEST,渲染2D部分,然后再次启用。

在1个以上的上下文中,您可能应该渲染到FBO,然后在此上渲染UI。

最新更新