The OpenGL docs for glUseProgram
声称使用零参数对其进行调用将导致着色器执行的结果为undefined
。
但是,经过一些搜索,我看到了一些使用glUseProgram
卸载当前着色器程序的人的例子。
这种行为可靠吗?如果不是,那么glUseProgram(0)
到底能做什么?
最佳答案
glUseProgram
表示给定的程序对象是将用于使用程序(glUniform
,渲染命令等)的对象的当前程序。 0与OpenGL对象的NULL
很像。它代表not an object
(对于大多数对象)。因此,glUseProgram
表示当前没有程序,因此不会将任何程序用于使用程序的事物。
如果在当前没有程序的情况下尝试调用glUniform
函数,则它们将失败并显示错误。如果在没有程序的情况下尝试渲染,则会发生以下两种情况之一。
在OpenGL 3.1+的核心配置文件中,您将得到一个GL_INVALID_OPERATION
错误,因为核心OpenGL必须使用程序进行渲染。
在兼容性配置文件或3.0或更低版本中,您将获得固定功能的渲染。
关于api - glUseProgram(0)有什么作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13546461/