当我已经 glDisable(GL_BLEND) 时,还需要 glClear(GL_COLOR_BUFFER_BIT) 吗?
Is glClear(GL_COLOR_BUFFER_BIT) necessary when I already glDisable(GL_BLEND)?
据我了解,如果我禁用 GL_BLEND
,则根本不会发生混合。
所以我不需要 glClear(GL_COLOR_BUFFER_BIT)
.
我正在为 Android 编程开发 GLES20。我在下面添加了这一行。
GLES20.glDisable(GLES20.GL_BLEND);
如果我不添加 glClear(GL_COLOR_BUFFER_BIT)
,除 Nexus 4 外,所有其他设备都可以正常工作。
在 Nexus 4 上,在一个过程中(其他过程正常工作),只有部分区域被渲染。
如果我添加 glClear(GL_COLOR_BUFFER_BIT)
,那么现在 Nexus 4 运行良好。
如果 GL_BLEND
被禁用,那么绘制缓冲区的一个片段将被覆盖,如果它被绘制到。
如果禁用混合并且在每一帧绘制缓冲区的每个片段上都写入,那么清除绘制缓冲区是没有用的,因为每个片段将在绘制过程中设置。
glClear(GL_COLOR_BUFFER_BIT)
does nothing else than to write to every fragment with a constant color set by glClearColor
.
注意,你必须确保每个片段都写在每一帧中。例如,如果 GL_DEPTH_TEST
已启用,您无论如何都必须 glClear(GL_DEPTH_BUFFER_BIT
。
据我了解,如果我禁用 GL_BLEND
,则根本不会发生混合。
所以我不需要 glClear(GL_COLOR_BUFFER_BIT)
.
我正在为 Android 编程开发 GLES20。我在下面添加了这一行。
GLES20.glDisable(GLES20.GL_BLEND);
如果我不添加 glClear(GL_COLOR_BUFFER_BIT)
,除 Nexus 4 外,所有其他设备都可以正常工作。
在 Nexus 4 上,在一个过程中(其他过程正常工作),只有部分区域被渲染。
如果我添加 glClear(GL_COLOR_BUFFER_BIT)
,那么现在 Nexus 4 运行良好。
如果 GL_BLEND
被禁用,那么绘制缓冲区的一个片段将被覆盖,如果它被绘制到。
如果禁用混合并且在每一帧绘制缓冲区的每个片段上都写入,那么清除绘制缓冲区是没有用的,因为每个片段将在绘制过程中设置。
glClear(GL_COLOR_BUFFER_BIT)
does nothing else than to write to every fragment with a constant color set by glClearColor
.
注意,你必须确保每个片段都写在每一帧中。例如,如果 GL_DEPTH_TEST
已启用,您无论如何都必须 glClear(GL_DEPTH_BUFFER_BIT
。