我正在开发一个OpenGL ES 2.0应用程序(在Windows上使用angleproject进行开发),它由多个"框架"组成.
每个帧都是一个独立的应用程序,不应干扰周围的帧.框架是使用OpenGL ES 2.0绘制的,由该框架内部运行的代码绘制.
我的第一次尝试是为每个帧分配一个帧缓冲区.但是存在一个问题 - 当一帧正在绘制时,OpenGL的内部状态会发生变化,如果下一帧没有全面重置每个已知的OpenGL状态,则可能存在副作用.这违背了我的要求,即每个框架应该是隔离的,而不是相互影响.
我的下一次尝试是每帧使用一个上下文.我为每个帧创建了一个独特的上下文.我正在使用共享资源,因此我可以对每个帧进行eglMakeCurrent,将每个帧渲染到自己的帧缓冲区/纹理,然后将eglMakeCurrent返回到全局,将每个纹理组合到最终屏幕.
这在隔离实例方面做得很好,但是.. eglMakeCurrent 非常慢.其中只有4个可以花费一秒钟或更长时间来渲染屏幕.
我可以采取什么方法?有没有办法可以加速上下文切换,或通过某种方式保存每帧的OpenGL状态来避免上下文切换?
Cla*_*ery -1
这里的问题是尝试以通用平台和操作系统独立的方式来做到这一点。如果您选择特定的平台,有很好的解决方案。在 Windows 上,wgl 和 glut 库将为您提供多个窗口,并同时运行完全独立的 OpenGL 上下文。它们被称为“Windows”,而不是“框架”。您还可以使用 DirectX 代替 OpenGL。Angle 使用 DirectX。在 Linux 上,解决方案是 X11 for OpenGL。无论哪种情况,拥有高质量的 OpenGL 驱动程序都至关重要。没有 Intel Extreme 芯片组驱动程序。如果您想在 Android 或 iOS 上执行此操作,则需要不同的解决方案。Khronos.org OpenGL ES 论坛上最近有一个关于 Android 案例的帖子。
| 归档时间: |
|
| 查看次数: |
1588 次 |
| 最近记录: |