我正在开发一个由多个“框架”组成的 OpenGL ES 2.0 应用程序(使用 Windows 上的angleproject 进行开发)。
每个框架都是一个独立的应用程序,不应干扰周围的框架。帧是使用 OpenGL ES 2.0 绘制的,由在该帧内运行的代码。
我的第一次尝试是为每个帧分配一个帧缓冲区。但是有一个问题 - OpenGL 的内部状态在绘制一帧时发生了变化,如果下一帧没有全面重置每个已知的 OpenGL 状态,则可能存在副作用。这违背了我的要求,即每一帧都应该被隔离并且不会相互影响。
我的下一个尝试是每帧使用一个上下文。我为每一帧创建了一个独特的上下文。我正在使用共享资源,以便我可以 eglMakeCurrent 到每个帧,将每个渲染到自己的帧缓冲区/纹理,然后 eglMakeCurrent 回到全局,将每个纹理组合到最终屏幕。
这在隔离实例方面做得很好,但是.. eglMakeCurrent非常慢。只需 4 个就可以使渲染屏幕需要一秒钟或更长时间。
我可以采取什么方法?有没有一种方法可以加快上下文切换,或者通过以某种方式保存每帧的 OpenGL 状态来避免上下文切换?