gpt4 book ai didi

opengl-es - EGL/OpenGL ES/切换上下文很慢

转载 作者:行者123 更新时间:2023-12-03 18:04:04 30 4
gpt4 key购买 nike

我正在开发一个由多个“框架”组成的 OpenGL ES 2.0 应用程序(在 Windows 上使用angleproject 进行开发)。

每个框架都是一个独立的应用程序,不应干扰周围的框架。这些帧是使用 OpenGL ES 2.0 绘制的,由该帧内运行的代码绘制。

我的第一次尝试是为每个帧分配一个帧缓冲区。但是有一个问题 - OpenGL 的内部状态在绘制一帧时发生了变化,如果下一帧没有全面重置每个已知的 OpenGL 状态,则可能会产生副作用。这违背了我的要求,即每一帧都应该是孤立的,互不影响。

我的下一个尝试是每帧使用一个上下文。我为每一帧创建了一个独特的上下文。我正在使用共享资源,以便我可以将 eglMakeCurrent 渲染到每个帧,将每个渲染到自己的帧缓冲区/纹理,然后 eglMakeCurrent 返回到全局,将每个纹理组合到最终屏幕。

这在隔离实例方面做得很好,但是…… eglMakeCurrent 非常慢。只需 4 个就可以使渲染屏幕需要一秒钟或更长时间。

我可以采取什么方法?有没有办法可以加速上下文切换,或者通过以某种方式保存每帧 OpenGL 状态来避免上下文切换?

最佳答案

我有一个建议可以消除 eglMakeCurrent 的开销,同时允许您使用当前的方法。

当前 EGLContext 的概念是线程本地的。我建议在进程的主线程中创建所有上下文,然后为每个上下文创建一个线程,将一个上下文传递给每个线程。在每个线程的初始化过程中,它将在其拥有的上下文上调用 eglMakeCurrent,并且永远不会再次调用 eglMakeCurrent。希望在 ANGLE 的实现中,上下文的线程本地存储得到有效实现,并且没有不必要的同步开销。

关于opengl-es - EGL/OpenGL ES/切换上下文很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18108957/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com