调用glClearColor和glClear而不附加任何着色器和程序

时间:2014-10-23 14:05:22

标签: opengl-es-2.0

在OpenGL ES 2.0中,如果我只想清除颜色缓冲区,是否必须附加和使用任何着色器和程序?

如果我拨打glCLearColorglCLear,然后eglSwapBuffers,会发生什么?我在规范中没有找到这些信息。我的代码序列是:

glClearColor(0.0, 1.0, 0.0, 1.0);
glClear ( GL_COLOR_BUFFER_BIT );
eglDisp = eglGetCurrentDisplay();
eglSurface = eglGetCurrentSurface(EGL_DRAW);
eglSwapBuffers ( eglDisp, eglSurface );

或者这在规范中没有描述,它取决于OpenGL驱动程序和GPU本身?

1 个答案:

答案 0 :(得分:0)

您不需要glClear()的着色器程序。我在ES 2.0规范中可以找到的最清晰的陈述是这一点,来自第31页的" 2.10顶点着色器"部分:

  

如果在程序设置为零的情况下调用UseProgram,则当前渲染状态引用无效的程序对象,并且由于任何DrawArrays或DrawElements命令而导致的顶点和片段着色器执行的结果未定义。但是,这不是错误。

由于glClear()不使用顶点或片段着色器,并且0作为活动程序显式错误,因此在没有活动程序的情况下调用glClear()是完全的有效的。