[关闭]
@qidiandasheng 2020-07-13T06:58:47.000000Z 字数 1243 阅读 1272

OpenGL ES函数介绍

音视频


生成纹理对象

  1. // 声明一个纹理对象
  2. GLuint textureID;
  3. // 创建纹理对象
  4. glGenTextures(1, &textureID);

该纹理对象是缓存在 GPU 的内存中的,可以同时有很多个纹理对象缓存在 GPU 中;由以上方法得到纹理对象的 id 号。

激活纹理单元

  1. glActiveTexture(GL_TEXTURE0)

这一句的意思是激活纹理单元0,没有写的话就是默认用纹理单元0;OpenGL有32个纹理单元。

  1. GL_TEXTURE0
  2. GL_TEXTURE1
  3. GL_TEXTURE2
  4. ···········
  5. GL_TEXTURE32

绑定纹理对象

我们上面激活的纹理单元中存在多个纹理目标(texture target),例如GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP

glBindTexture的作用就是将一个命名的纹理对象绑定到一个纹理目标上:

  1. void glBindTexture(GLenum target, GLuint texture);

参数

target:

指明了纹理要绑定到的目标。必须是下面中的一个:

  1. GL_TEXTURE_1D,
  2. GL_TEXTURE_2D
  3. GL_TEXTURE_3D
  4. GL_TEXTURE_1D_ARRAY
  5. GL_TEXTURE_2D_ARRAY
  6. GL_TEXTURE_RECTANGLE
  7. GL_TEXTURE_CUBE_MAP
  8. GL_TEXTURE_CUBE_MAP_ARRAY
  9. GL_TEXTURE_BUFFER
  10. GL_TEXTURE_2D_MULTISAMPLE
  11. 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函数,我们就会使用一张纹理对这些变量进行赋值。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注