我想不要为了深度或颜色位调用glClear,因为我希望能够看到所有以前渲染的帧。它确实有效,除了它在x和y轴上重复模型,并且还会导致一些奇怪的灰色块状线。有没有办法实现这个目标?我在android上使用opengl es 3。谢谢你的帮助。
答案 0 :(得分:1)
帧的开始处的默认帧缓冲区的内容未定义,尤其是在大多数移动GPU所基于的基于图块的渲染器上。你的"重复"在X轴和Y轴上可能只是显示了特定GPU上的磁贴有多大(例如它只是倾倒掉GPU本地磁贴RAM中的任何内容,重复N次以完全覆盖屏幕)。
如果要在上一帧的顶部渲染,则需要配置渲染上下文配置以使用EGL_BUFFER_PRESERVED
(默认值为EGL_BUFFER_DESTROYED
)。 E.g:
eglSurfaceAttrib(m_display, m_surface, EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED);
注1:这会产生一些开销(表面被有效地复制回到tile-local内存中),而从表面丢弃或无效开始,或者clear通常是免费的。
注2:这只会保留颜色数据;没有办法为默认帧缓冲区保留帧的深度或模板。