【问题标题】:Why use multiple OpenGL context为什么要使用多个 OpenGL 上下文
【发布时间】:2012-02-17 01:29:08
【问题描述】:

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

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

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

【问题讨论】:

    标签: opengl


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        如果要处理多个 GPU,则需要使用多个上下文,因为每个 GPU 至少有一个可绘制对象,并且具有 GPU 特定的上下文。

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 2013-02-04
            • 1970-01-01
            • 2016-02-11
            • 2019-04-06
            • 2018-05-07
            • 2017-10-17
            • 2014-06-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多