【OpenGL】关于OpenGL中Bind函数的理解
2013-05-25 23:22
351 查看
在OpenGL中,总是会遇到类似下面的绑定语句:
一直都不是很明白这是什么意思,它们到底是绑定什么到什么上呢?绑定了又怎么样呢?今天看了点东西,于是把自己的理解写下来,如果有不对的还请赐教。
下面,就以glBindTexture函数为例,其他的应该和它类似。
C定义
纹理名字是一个无符号整数。值0是被保留的,它代表了每一个纹理目标的默认纹理。对于当前的GL渲染上下文中的共享对象空间,纹理名称以及它们对应的纹理内容是局部的;只有在显式开启上下文之间的共享,两个渲染上下文才可以共享纹理名称。
当一张纹理被第一次绑定时,它假定成为指定的目标类型。例如,一张纹理若第一次被绑定到GL_TEXTURE_1D上,就变成了一张一维纹理;若第一次被绑定到GL_TEXTURE_2D上,就变成了一张二维纹理。
当一张纹理被绑定后,GL对于这个目标的操作都会影响到这个被绑定的纹理。也就是说,这个纹理目标成为了被绑定到它上面的纹理的别名,而纹理名称为0则会引用到它的默认纹理。
当使用glBindTexture绑定一张纹理后,它会一直保持活跃状态知道另一张纹理被绑定到同一个目标上,或者这个被绑定的纹理被删除了(使用glDeleteTextures)。
我们可以这样理解,GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D等就是很多变量,当使用glBindTexture函数,我们就会使用一张纹理对这些变量进行赋值,而之后我们非常可能还会调用下面类似的函数:
这些函数里面的GL_TEXTURE_2D就等价与我们之前绑定的纹理,所以我们对GL_TEXTURE_2D的操作就会影响到之前的纹理,这和C++中的引用有点类似。
glBindTexture(GL_TEXTURE_2D, renderTex); glBindFramebuffer(GL_FRAMEBUFFER, fboHandle); glBindRenderbuffer(GL_RENDERBUFFER, depthBuf); ……
一直都不是很明白这是什么意思,它们到底是绑定什么到什么上呢?绑定了又怎么样呢?今天看了点东西,于是把自己的理解写下来,如果有不对的还请赐教。
下面,就以glBindTexture函数为例,其他的应该和它类似。
glBindTexture函数
名称
glBindTexture — 将一个命名的纹理绑定到一个纹理目标上C定义
void glBindTexture(GLenum target, GLuint texture
);
参数
target
指明了纹理要绑定到的目标。必须是下面中的一个:GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D, GL_TEXTURE_1D_ARRAY, GL_TEXTURE_2D_ARRAY, GL_TEXTURE_RECTANGLE, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_BUFFER, GL_TEXTURE_2D_MULTISAMPLE 或者 GL_TEXTURE_2D_MULTISAMPLE_ARRAY。texture
指明一张纹理的名字描述
glBindTexture允许我们向GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D, GL_TEXTURE_1D_ARRAY, GL_TEXTURE_2D_ARRAY, GL_TEXTURE_RECTANGLE, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_BUFFER, GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY 绑定一张纹理。当把一张纹理绑定到一个目标上时,之前对这个目标的绑定就会失效。纹理名字是一个无符号整数。值0是被保留的,它代表了每一个纹理目标的默认纹理。对于当前的GL渲染上下文中的共享对象空间,纹理名称以及它们对应的纹理内容是局部的;只有在显式开启上下文之间的共享,两个渲染上下文才可以共享纹理名称。
当一张纹理被第一次绑定时,它假定成为指定的目标类型。例如,一张纹理若第一次被绑定到GL_TEXTURE_1D上,就变成了一张一维纹理;若第一次被绑定到GL_TEXTURE_2D上,就变成了一张二维纹理。
当一张纹理被绑定后,GL对于这个目标的操作都会影响到这个被绑定的纹理。也就是说,这个纹理目标成为了被绑定到它上面的纹理的别名,而纹理名称为0则会引用到它的默认纹理。
当使用glBindTexture绑定一张纹理后,它会一直保持活跃状态知道另一张纹理被绑定到同一个目标上,或者这个被绑定的纹理被删除了(使用glDeleteTextures)。
我们可以这样理解,GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D等就是很多变量,当使用glBindTexture函数,我们就会使用一张纹理对这些变量进行赋值,而之后我们非常可能还会调用下面类似的函数:
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,512,512,0,GL_RGBA, GL_UNSIGNED_BYTE,NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
这些函数里面的GL_TEXTURE_2D就等价与我们之前绑定的纹理,所以我们对GL_TEXTURE_2D的操作就会影响到之前的纹理,这和C++中的引用有点类似。
相关文章推荐
- 【OpenGL】关于OpenGL中Bind函数的理解
- 绑定函数【OpenGL】关于OpenGL中Bind函数的理解
- 关于call(),apply(),bind()函数的理解
- 理解 backbone.js 中的 bind 和 bindAll 方法,关于如何在方法中指定其中的 this,包含apply方法的说明[转载]
- 关于参考帧中的x264_reference_update函数的补充及h->frames.unused[]的理解
- Vc中关于DC(设备环境函数(Device Context))的理解
- OpenGl的glMatrixMode()函数理解
- 关于VB中Print函数在数组中换行的理解
- opengl的关于坐标系和成像的几个函数
- 深入理解函数内部原理(六)——函数的内部方法call、apply、bind
- 关于js深入理解:json作为函数参数 类似于jQuery的post函数,具有url,data ,和回调函数
- OpenGl的glMatrixMode()函数理解
- 关于使用函数feof的理解
- 关于ECMAScript中没有重载、函数签名、解析器的理解
- 关于opengl的相关函数库
- 写协议解析程序的过程(关于通信解析函数的理解)
- 关于js 函数传递引用参数理解
- OpenGL关于glBegin的参数的理解
- 关于C++默认打开函数的理解
- C++中关于虚函数与虚函数表的理解