glBindTexture(GL_TEXTURE_2D, 0) glBindFramebuffer(GL_FRAMEBUFFER, 0) glBindTexture(GL_TEXTURE_2D, 0) 含义详解
void glBindTexture(GLenum target, GLuint texture);
官方解释:https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glBindTexture.xml
The value zero is reserved to represent the default texture for each texture target.
texture 指明一张纹理的名字
在每个纹理目标中,0被保留用以代表默认纹理。
当一张纹理被第一次绑定时,它假定成为指定的目标类型。例如,一张纹理若第一次被绑定到GL_TEXTURE_1D上,就变成了一张一维纹理;若第一次被绑定到GL_TEXTURE_2D上,就变成了一张二维纹理。
由于OpenGL是状态机,当使用glBindTexture绑定一张纹理后,如果不再绑定新的纹理,则OpenGL之后的操作都会对应此纹理,当一个纹理与目标绑定时,该目标之前的绑定关系将自动被打破。
纹理名称与相应的纹理内容位于当前GL rendering上下文的共享对象空间中。
glBindVertexArray
https://www.khronos.org/opengl/wiki/GLAPI/glBindVertexArray
https://www.khronos.org/registry/OpenGL-Refpages/es3.0/
void glBindVertexArray(GLuint array);
zero to break the existing vertex array object binding.
zero to bind the default vertex array object binding
glBindFramebuffer
https://www.khronos.org/opengl/wiki/GLAPI/glBindFramebuffer
https://www.khronos.org/registry/OpenGL-Refpages/es3.0/
void glBindFramebuffer(GLenum target, GLuint framebuffer);
In order that access to the default framebuffer is not lost, it is treated as a framebuffer object with the name of zero. The default framebuffer is therefore rendered to and read from while zero is bound to the corresponding targets.
zero to break the existing binding of a framebuffer object to target .
glBindRenderbuffer
https://www.khronos.org/opengl/wiki/GLAPI/glBindRenderbuffer
zero to break the existing binding of a renderbuffer object to target .
glBindBuffer
void glBindBuffer(GLenum target, GLuint buffer);
https://www.khronos.org/opengl/wiki/GLAPI/glBindBuffer
值零保留,但每个缓冲区对象目标没有默认缓冲区对象。 相反,缓冲区设置为零有效地解除绑定先前绑定的任何缓冲区对象,并恢复该缓冲区对象目标的客户端内存使用(如果该目标支持的话)。
常用的恢复OpenGL默认状态的代码:
glBindVertexArray(0);//将VAO绑定到默认的VAO处,一般用于打破之前的VAO绑定关系,使OpenGL的VAO绑定状态恢复到默认状态
glBindFramebuffer(GL_FRAMEBUFFER, 0);//将framebuffer绑定到默认的FBO处,一般用于打破之前的FBO绑定关系,使OpenGL的FBO绑定状态恢复到默认状态。
glBindTexture(GL_TEXTURE_2D, 0); //将2D纹理绑定到默认的纹理,一般用于打破之前的纹理绑定关系,使OpenGL的纹理绑定状态恢复到默认状态。
glBindRenderbuffer(GL_RENDERBUFFER, 0); //将渲染buffer绑定到默认的渲染buffer,一般用于打破之前的渲染buffer绑定关系,使OpenGL的渲染buffer绑定状态恢复到默认状态。
glBindBuffer(GL_ARRAY_BUFFER, 0);//将顶点数据buffer和之前的绑定关系进行解绑 用于打破之前的顶点数据buffer的绑定关系,使OpenGL的顶点数据buffer绑定状态恢复到默认状态。
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);//将顶点索引数据buffer和之前的绑定关系进行解绑 用于打破之前的顶点索引数据buffer的绑定关系,使OpenGL的顶点索引数据buffer绑定状态恢复到默认状态。