OpenGL压缩纹理和扩展

时间:2012-09-10 20:23:12

标签: opengl graphics textures

我有一张 nVidia Quadro NVS 295 / PCIe / SSE2 卡,当我执行glGetString(GL_EXTENSIONS)时,打印出值和grep for“compress”,我得到这个列表< / p>

  • 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

但是再次glCompressedTexImage2DglGet GL_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个扩展名?

2 个答案:

答案 0 :(得分:9)

  

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

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

简而言之,不要依赖于特定的glGet。依靠扩展。如果你有GL 3.0+,那么你有the RGTC formats; GL 3.0+需要 。如果您有EXT_texture_compression_s3tc,那么您将拥有“DXT”格式。如果您有EXT_texture_sRGB as well,则您拥有“DXT”格式的sRGB版本。等等。

  

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

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

这些只是S3TC的不同形式。

答案 1 :(得分:1)

  

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

你是。他们被GL_EXT_texture_compression_s3tc覆盖。