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,
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绑定状态恢复到默认状态。