纹理知识点:Texture - MartinRGB/GLES30_ProgrammingGuide_NDK GitHub Wiki

纹理

第九章主要讲解了 2D纹理 3D纹理 立方图纹理 纹理的加载 纹理的过滤 纹理的包装 纹理细节 纹理压缩 采样器对象 不可变纹理 等

纹理使用的流程一般为:

1.textureGenFunc(): 生成纹理对象(glGenTextures) -> 绑定纹理对象(glBindTexture)-> 加载纹理素材(glTexImage2D/glTexImage3D) -> 设置纹理过滤模式和包装模式(glTexParameteri)

2.应用程序启动式初始化,将 textureGenFunc() 指向 texId

3.在glUseProgram()后:

启用材质(glActiveTexture)-> 绑定纹理对象(glBindTexture) -> Uniform 传入(glUniform...)

几个优化细节:

1.mipmap贴图并盒式过滤

2.lod设置细节纹理级别

3.使用纹理压缩(过滤CompressedTexImage2D)

4.glTexParameter 会造成大量 API 开销,应用程序在大量纹理上使用相同的设置,所以将 采样和纹理状态分离,参考 glGenSamplers

5.使用不可变纹理,在绘图之前确定纹理,可以提升性能。创建不可变纹理,使用 glBindTexture 绑定,然后用 glTexStorage2D 分配不可变存储,上述的加载、压缩 API 也无效了。