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