不调用 glclear 会导致奇怪的工件

Not calling glclear results in weird artifacts

我不想为深度或颜色位调用 glClear,因为我希望能够看到所有先前渲染的帧。它确实有效,除了它在整个 x 轴和 y 轴上重复模型,并且还会导致一些奇怪的灰色块状线条。有没有办法做到这一点?我在 android 上使用 opengl es 3。感谢您的帮助。

帧开始时默认帧缓冲区的内容未定义,尤其是在大多数移动 GPU 都是基于图块的渲染器上。您在 X 和 Y 轴上的 "repeats" 可能只是显示您的特定 GPU 上的图块有多大(例如,它只是转储 GPU 本地图块 RAM 中的任何内容,重复 N 次以完全覆盖屏幕)。

如果要在前一帧的顶部进行渲染,则需要将渲染上下文配置配置为使用 EGL_BUFFER_PRESERVED(默认值为 EGL_BUFFER_DESTROYED)。例如:

eglSurfaceAttrib(m_display, m_surface, EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED);

注 1:这会产生一些开销(表面被有效地复制回 tile-local 内存),而从表面丢弃或无效开始,或者清除通常是免费的。

注2:这只会保留颜色数据;对于默认帧缓冲区,无法跨帧保留深度或模板。