我正在 Android 和原生 C++ 中使用egl 1.1
. 当前使用android的glSurfaceView
-它允许我绘制到显示在“onDrawFrame”末尾的后缓冲区-当后缓冲区和前缓冲区被交换时。
我的问题是 - 我需要能够显示后台缓冲区并继续写入,就好像我没有交换一样。这种需求背后的原因是场景非常大,不可能每帧都构建它,也不可能等待绘图结束——因为用户将不得不等待太长时间。
换句话说 - 我需要逐步构建场景。在渲染过程中的某个时刻,我决定是时候了,我调用eglSwapBuffers
它来显示来自后台缓冲区的绘制内容,但是当我继续写入时,显然我正在写入不同步的“前前缓冲区”。 .(不包含我到目前为止画的东西)。
据我所知,我唯一的选择是在交换之前复制后台缓冲区。伪:
- 绘制到后台缓冲区
- 将缓冲区复制到临时缓冲区
- 交换
- 将临时缓冲区复制到(新的)后台缓冲区
- 绘制更多的东西到后台缓冲区
- 等等...
我的问题 - 有没有办法执行步骤 2,4?
glCopyPixels
在这种情况下有用吗?例子?- 是
glBlitFramebuffer
吗?
还是我接近这一切都错了?
我已经做过的事情:
- 我尝试设置
EGL_SWAP_BEHAVIOR
为,EGL_BUFFER_PRESERVED
但它似乎只适用于某些设备(如khronos 注释中所述):
某些表面允许应用程序控制是否保留颜色缓冲区内容
- 在每一帧中重新渲染场景 - 不可能。我读过很多次,这是推荐的。