OpenGL压缩纹理和扩展

leg*_*s2k 5 opengl graphics textures

我有一张nVidia Quadro NVS 295/PCIe/SSE2卡,当我这样做时glGetString(GL_EXTENSIONS),打印出值和grep for"compress",我得到这个列表

  • GL_ARB_compressed_texture_pixel_storage
  • GL_ARB_texture_compression
  • GL_ARB_texture_compression_rgtc
  • GL_EXT_texture_compression_dxt1
  • GL_EXT_texture_compression_latc
  • GL_EXT_texture_compression_rgtc
  • GL_EXT_texture_compression_s3tc
  • GL_NV_texture_compression_vtc

不过话又说回来glCompressedTexImage2D说,glGetGL_COMPRESSED_TEXTURE_FORMATS回报支持压缩,只给出了

  • 0x83f0 = GL_COMPRESSED_RGB_S3TC_DXT1_EXT
  • 0x83f2 = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
  • 0x83f3 = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT

这三个价值观.

现在为什么不glGet公开我的卡可以处理的其他压缩格式?说LATC,RGTC还是VTC?

另外,为什么我没有在第一个列表中看到相应的DXT3或5扩展名?

Nic*_*las 10

现在为什么glGet不会暴露我的卡可以处理的其他压缩格式?

因为NVIDIA不想这样做.真的,没有意义.ARB甚至决定弃用(但不删除)GL 4.3中的COMPRESSED_TEXTURE_FORMATS内容.

简而言之,不要依赖那个特殊的glGet.依靠扩展.如果你有GL 3.0+,那么你有RGTC格式 ; 这是GL 3.0+所要求的.如果你有EXT_texture_compression_s3tc,那么你有"DXT"格式.如果你也有EXT_texture_sRGB,那么你有sRGB版本的"DXT"格式.等等.

另外,为什么我没有在第一个列表中看到相应的DXT3或5扩展名?

咳咳:

  • 0x83f2 = GL_COMPRESSED_RGBA_S3TC_ DXT3 _EXT
  • 0x83f3 = GL_COMPRESSED_RGBA_S3TC_ DXT5 _EXT

这些只是S3TC的不同形式.