【发布时间】:2015-08-03 18:55:53
【问题描述】:
目前我正在编写一个渲染器,它使用许多纹理并将填满我的显卡的视频内存(我的 nVidia GTX 780 Ti 为 3 Gb)。因此,我使用Mali's texture compression tool 预压缩了所有必要的图像,并将我的渲染器与libktx 集成以加载压缩纹理(*.ktx)。
压缩效果非常好。对于 RGB 图像(使用 GL_COMPRESSED_RGB8_ETC2 压缩),它始终达到 4 bpp,对于 RGBA 图像(GL_COMPRESSED_RGBA8_ETC2_EAC)达到 8 bpp,如规范中所述。但每当这些压缩图像上传到 GPU 上时,它们就会显示为原始尺寸(压缩前)
我正在使用以下方式加载压缩纹理:
ktxLoadTextureN(...);
我可以看到,在该函数内部,libktx 将调用:
glCompressedTexImage2D( GLenum target, GLint level,
GLenum internalformat,
GLsizei width, GLsizei height,
GLint border,
GLsizei imageSize,
const GLvoid * data);
glCompressedTexImage2D()中的imageSize参数;与我的压缩数据大小相匹配,但是执行此函数后,显存会增加解压缩后的图像大小。
所以我的问题是:压缩纹理是否总是在上传到 GPU 之前解压缩?如果是这样,是否有任何标准化的纹理压缩格式允许在 gpu 上动态解码压缩纹理?
【问题讨论】:
标签: c++ opengl opengl-es textures glsl