@qidiandasheng
2020-07-13T06:58:47.000000Z
字数 1243
阅读 1995
音视频
// 声明一个纹理对象GLuint textureID;// 创建纹理对象glGenTextures(1, &textureID);
该纹理对象是缓存在 GPU 的内存中的,可以同时有很多个纹理对象缓存在 GPU 中;由以上方法得到纹理对象的 id 号。
glActiveTexture(GL_TEXTURE0)
这一句的意思是激活纹理单元0,没有写的话就是默认用纹理单元0;OpenGL有32个纹理单元。
GL_TEXTURE0GL_TEXTURE1GL_TEXTURE2···········GL_TEXTURE32
我们上面激活的纹理单元中存在多个纹理目标(texture target),例如GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP。
glBindTexture的作用就是将一个命名的纹理对象绑定到一个纹理目标上:
void glBindTexture(GLenum target, GLuint texture);
target:
指明了纹理要绑定到的目标。必须是下面中的一个:
GL_TEXTURE_1D,GL_TEXTURE_2DGL_TEXTURE_3DGL_TEXTURE_1D_ARRAYGL_TEXTURE_2D_ARRAYGL_TEXTURE_RECTANGLEGL_TEXTURE_CUBE_MAPGL_TEXTURE_CUBE_MAP_ARRAYGL_TEXTURE_BUFFERGL_TEXTURE_2D_MULTISAMPLEGL_TEXTURE_2D_MULTISAMPLE_ARRAY
texture:
指明一张纹理的名字
glBindTexture允许我们向target 绑定一张纹理。当把一张纹理绑定到一个目标上时,之前对这个目标的绑定就会失效。
纹理名字是一个无符号整数。值0是被保留的,它代表了每一个纹理目标的默认纹理。对于当前的GL渲染上下文中的共享对象空间,纹理名称以及它们对应的纹理内容是局部的;只有在显式开启上下文之间的共享,两个渲染上下文才可以共享纹理名称。
当一张纹理被第一次绑定时,它假定成为指定的目标类型。例如,一张纹理若第一次被绑定到GL_TEXTURE_1D上,就变成了一张一维纹理;若第一次被绑定到GL_TEXTURE_2D上,就变成了一张二维纹理。
当一张纹理被绑定后,GL对于这个目标的操作都会影响到这个被绑定的纹理。也就是说,这个纹理目标成为了被绑定到它上面的纹理的别名,而纹理名称为0则会引用到它的默认纹理。
当使用glBindTexture绑定一张纹理后,它会一直保持活跃状态直到另一张纹理被绑定到同一个目标上,或者这个被绑定的纹理被删除了(使用glDeleteTextures)。
我们可以这样理解,GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D等就是很多变量,当使用glBindTexture函数,我们就会使用一张纹理对这些变量进行赋值。
