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