对于渲染,我有一个与窗口关联的当前GL上下文。在应用程序呈现多个场景(例如使用累积或不同视口)的情况下,我相信可以重用相同的上下文。
我的问题是,我为什么要使用多个GL上下文?我在ARB_framebuffer_object扩展规范中读到调用MakeCurrent的代价很高,如果存在ARB_framebuffer_object扩展,我可以在不使用MakeCurrent的情况下在通用缓冲区上呈现。
显然,使用多个GL上下文的唯一原因是避免设置上下文状态(像素存储,传输,点大小,多边形点画......)或具有可用的多个渲染缓冲区配置(一个上下文有累积,另一个没有)。我应该如何决定何时使用替代上下文而不是设置上下文状态?
答案 0 :(得分:11)
我通常只在必须使用时才使用其他上下文,例如渲染到多个GUI窗口。对于其他一切,我使用帧缓冲对象或状态更改。
但是,这样的性能建议并不适用于所有情况。如果有疑问,您应该在自己的硬件上测量自己的应用程序。 gDEBugger可能有所帮助,可以使用试用版。
答案 1 :(得分:7)
答案 2 :(得分:4)
如果您想要处理多个GPU,则需要使用多个上下文,因为每个GPU至少有一个可绘制的,具有特定于GPU的上下文。
答案 3 :(得分:2)
在GUI程序中,您可以拥有多个opengl视图,其中一些视图与GUI在同一个线程中运行,而其他视图在自己的线程中运行。您还可以在屏幕外模式下运行opengl。每个线程至少有一个上下文。
不确定每个线程是否有更多上下文是有意义的。