2017-05-02 162 views
0

即时通讯想要不调用glClear的深度或颜色位,因为我想能够看到所有以前渲染的帧。它的确行得通,除了它在整个x轴和y轴上重复模型,还会产生一些奇怪的灰色块状线条。有没有办法做到这一点?我在android上使用opengl es 3。感谢您的任何帮助。不调用glclear导致奇怪的文物

uh

+0

所以你不想清除前一帧,但你抱怨看到前一帧?你应该决定是否要一个或另一个 – JustSid

+0

我希望它能够工作,因为我期望不会发疯。我从一个线的一个端点旋转画一个圆,我想保持帧看到整个圆画 –

+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:这会招致一些开销(表面被有效复制回瓷砖本地内存),而与表面丢弃开始或废止,或明确通常是免费的。

注2:这只会保存颜色数据;没有办法在默认帧缓冲区的帧之间保存深度或模板。

+0

这是一个可以在执行过程中打开和关闭的设置吗? –

+1

是的,虽然在上下文创建时通常会执行此操作(通常您会更改用于利用保留或已销毁状态的呈现算法,因此它并不总是您可以平滑地打开或关闭的设置)。 – solidpixel

+0

你知道我如何得到一个eglcontext?它的第一行崩溃它 –