当我已经glDisable(GL_BLEND)时,是否需要glClear(GL_COLOR_BUFFER_BIT)?

时间:2017-08-22 22:30:34

标签: android opengl-es-2.0

根据我的理解,如果我禁用GL_BLEND,则根本不会发生混合。 所以我不需要做glClear(GL_COLOR_BUFFER_BIT)

我正在使用GLES20进行Android编程。我在下面添加了这一行。

GLES20.glDisable(GLES20.GL_BLEND);

如果我不添加glClear(GL_COLOR_BUFFER_BIT),除了Nexus 4之外,所有其他设备都能正常运行。 在Nexus 4上,一次通过(其他通行证正常工作),只渲染部分区域。 如果我添加glClear(GL_COLOR_BUFFER_BIT),那么现在Nexus 4运行良好。

1 个答案:

答案 0 :(得分:1)

如果禁用GL_BLEND,则绘制缓冲区的片段将被覆盖(如果被绘制)。
如果禁用混合并在每个帧中写入绘制缓冲区的每个片段,则清除绘制缓冲区是没用的,因为每个片段都将在绘制过程中设置。
glClear(GL_COLOR_BUFFER_BIT)除了用glClearColor设置的常量颜色写入每个片段外,别无其他。

注意,您必须确保每个片段都写入每个帧。例如,如果启用GL_DEPTH_TEST,则无论如何都必须glClear(GL_DEPTH_BUFFER_BIT