纹理知识点: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 也无效了。