设定一个场景,要读取一个opengl渲染线程中一帧的画面到内存,可以使用glReadPixel函数,但是这个函数存在很糟糕的性能问题,为了解决这个问题可以使用如下步骤:
1. 两个opengl渲染线程: A线程负责前台窗口的渲染,B线程在pbuffer上渲染,并且把A线程的渲染环境context设为共享,B线程的渲染环境使用A线程的context。
2. A渲染线程和B渲染线程共用一个纹理ID,两个线程做正常的渲染流程。
3. B渲染线程使用glReadPixel函数读取画面信息,读取出来数据还不能直接使用,需要做一次转换。
如上只是大致的流程,具体代码在我的github:https://github.com/ZhangGuangXin/AndroidOpengl 里面有一个包egl,专门通过配置egl实现contex共享,进而实现纹理共享。