当我已经 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