2009-09-04 24 views
12

对于渲染,我有一个与窗口关联的当前GL上下文。在应用程序渲染多个场景(例如使用累积或不同视口)的情况下,我认为可以重用相同的上下文。为什么要使用多个OpenGL上下文

我的问题是,为什么我应该使用多个GL上下文?我在ARB_framebuffer_object扩展规范中读到了对MakeCurrent的调用可能很昂贵,并且在存在ARB_framebuffer_object扩展的情况下,我可以在不使用MakeCurrent的情况下在通用缓冲区上进行渲染。

显然,使用多个GL上下文的唯一原因是为了避免设置上下文状态(像素存储,传输,点大小,多边形点刻...)或具有可用的多个渲染缓冲区配置(一个具有累积的上下文,另一个无)。我应该如何决定何时使用替代上下文而不是设置上下文状态?

回答

11

我通常倾向于在绝对必须使用额外的上下文时,比如渲染到多个GUI窗口。对于其他一切,我使用帧缓冲区对象或状态更改。

但是,像这样的性能建议并不适用于所有情况。如果有疑问,您应该在自己的硬件上测量自己的应用程序。 gDEBugger可能会有所帮助,还有可用的试用版。

2

在GUI程序中,您可以拥有多个opengl视图,其中一些视图运行在与GUI相同的线程中,其他运行在它们自己的线程中。进一步你可以在屏幕外模式下运行opengl。每个线程至少有一个上下文。

不确定每个线程是否有更多上下文。

4

如果您想要解决多个GPU问题,您需要使用多个上下文,因为每个GPU至少有一个可绘制对象,并且具有特定于GPU的上下文。

6

IIRC,可以在上下文之间共享像纹理和缓冲区对象之类的对象,因此从技术上讲,您可以在第二个线程中创建第二个上下文,并在那里异步加载纹理,而不用担心第一个线程是否正在执行渲染。

相关问题