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