Browse Source

Added sRGB variants of BC1/BC2/BC3 compression formats.

pull/370/head
Vladimír Vondruš 7 years ago
parent
commit
02538d566f
  1. 12
      doc/changelog.dox
  2. 4
      doc/opengl-support.dox
  3. 8
      src/Magnum/GL/AbstractTexture.cpp
  4. 4
      src/Magnum/GL/Implementation/compressedPixelFormatMapping.hpp
  5. 4
      src/Magnum/GL/PixelFormat.cpp
  6. 36
      src/Magnum/GL/PixelFormat.h
  7. 36
      src/Magnum/GL/TextureFormat.h
  8. 4
      src/Magnum/PixelFormat.cpp
  9. 40
      src/Magnum/PixelFormat.h
  10. 4
      src/Magnum/Vk/Implementation/compressedFormatMapping.hpp

12
doc/changelog.dox

@ -50,9 +50,10 @@ See also:
- New @ref BasicMutableImageView "MutableImageView*D" and
@ref BasicMutableCompressedImageView "MutableCompressedImageView*D" types
for mutable views onto image data
- Added ETC2 and EAC formats to @ref CompressedPixelFormat as well as their
conversion to corresponding GL/Vulkan in @ref GL::compressedPixelFormat()
and @ref Vk::vkFormat(Magnum::CompressedPixelFormat)
- Added sRGB BCn, ETC2 and EAC formats to @ref CompressedPixelFormat as well
as their conversion to corresponding GL/Vulkan in
@ref GL::compressedPixelFormat() and
@ref Vk::vkFormat(Magnum::CompressedPixelFormat)
@subsubsection changelog-latest-new-audio Audio library
@ -157,6 +158,11 @@ See also:
texture classes now can read the pixels into
@ref BasicMutableImageView "MutableImageView*D" and
@ref BasicMutableCompressedImageView "MutableCompressedImageView*D" as well
- Added sRGB S3TC formats as defined by the
@gl_extension{EXT,texture_sRGB} desktop,
@gl_extension{EXT,texture_compression_s3tc_srgb} ES and
@webgl_extension{WEBGL,compressed_texture_s3tc_srgb} WebGL extension to
@ref GL::CompressedPixelFormat and @ref GL::TextureFormat
@subsubsection changelog-latest-new-math Math library

4
doc/opengl-support.dox

@ -455,7 +455,7 @@ Extension | Status
@gl_extension{EXT,texture_compression_s3tc} | done
@gl_extension{EXT,shader_integer_mix} | done (shading language only)
@gl_extension{EXT,polygon_offset_clamp} | |
@gl_extension{EXT,texture_compression_s3tc_srgb} | |
@gl_extension{EXT,texture_compression_s3tc_srgb} | done
@gl_extension2{KHR,texture_compression_astc_hdr,KHR_texture_compression_astc_hdr} | done
@gl_extension2{KHR,blend_equation_advanced_coherent,KHR_blend_equation_advanced} | done
@gl_extension{KHR,context_flush_control} | |
@ -525,7 +525,7 @@ Extension | Status
@webgl_extension{EXT,color_buffer_float} | |
@webgl_extension{OES,texture_float_linear} | done
@webgl_extension{WEBGL,compressed_texture_s3tc} | done
@webgl_extension{WEBGL,compressed_texture_s3tc_srgb} |
@webgl_extension{WEBGL,compressed_texture_s3tc_srgb} | done
@section opengl-unsupported Unsupported OpenGL features

8
src/Magnum/GL/AbstractTexture.cpp

@ -665,6 +665,7 @@ PixelFormat pixelFormatForInternalFormat(const TextureFormat internalFormat) {
#ifndef MAGNUM_TARGET_GLES2
case TextureFormat::SRGB8:
#endif
case TextureFormat::CompressedSRGBS3tcDxt1:
#ifndef MAGNUM_TARGET_GLES2
return PixelFormat::RGB;
#else
@ -759,6 +760,9 @@ PixelFormat pixelFormatForInternalFormat(const TextureFormat internalFormat) {
#if !(defined(MAGNUM_TARGET_WEBGL) && defined(MAGNUM_TARGET_GLES2))
case TextureFormat::SRGB8Alpha8:
#endif
case TextureFormat::CompressedSRGBAlphaS3tcDxt1:
case TextureFormat::CompressedSRGBAlphaS3tcDxt3:
case TextureFormat::CompressedSRGBAlphaS3tcDxt5:
#ifndef MAGNUM_TARGET_GLES2
return PixelFormat::RGBA;
#else
@ -879,9 +883,13 @@ PixelType pixelTypeForInternalFormat(const TextureFormat internalFormat) {
case TextureFormat::CompressedSignedRG11Eac:
#endif
case TextureFormat::CompressedRGBS3tcDxt1:
case TextureFormat::CompressedSRGBS3tcDxt1:
case TextureFormat::CompressedRGBAS3tcDxt1:
case TextureFormat::CompressedSRGBAlphaS3tcDxt1:
case TextureFormat::CompressedRGBAS3tcDxt3:
case TextureFormat::CompressedSRGBAlphaS3tcDxt3:
case TextureFormat::CompressedRGBAS3tcDxt5:
case TextureFormat::CompressedSRGBAlphaS3tcDxt5:
#ifndef MAGNUM_TARGET_WEBGL
case TextureFormat::CompressedRGBAAstc4x4:
case TextureFormat::CompressedSRGB8Alpha8Astc4x4:

4
src/Magnum/GL/Implementation/compressedPixelFormatMapping.hpp

@ -26,9 +26,13 @@
/* See Magnum/GL/PixelFormat.cpp and Magnum/GL/Test/PixelFormatTest.cpp */
#ifdef _c
_c(Bc1RGBUnorm, RGBS3tcDxt1)
_c(Bc1RGBSrgb, SRGBS3tcDxt1)
_c(Bc1RGBAUnorm, RGBAS3tcDxt1)
_c(Bc1RGBASrgb, SRGBAlphaS3tcDxt1)
_c(Bc2RGBAUnorm, RGBAS3tcDxt3)
_c(Bc2RGBASrgb, SRGBAlphaS3tcDxt3)
_c(Bc3RGBAUnorm, RGBAS3tcDxt5)
_c(Bc3RGBASrgb, SRGBAlphaS3tcDxt5)
#ifndef MAGNUM_TARGET_GLES2
_c(EacR11Unorm, R11Eac)
_c(EacR11Snorm, SignedR11Eac)

4
src/Magnum/GL/PixelFormat.cpp

@ -425,9 +425,13 @@ Debug& operator<<(Debug& debug, const CompressedPixelFormat value) {
_c(SignedRG11Eac)
#endif
_c(RGBS3tcDxt1)
_c(SRGBS3tcDxt1)
_c(RGBAS3tcDxt1)
_c(SRGBAlphaS3tcDxt1)
_c(RGBAS3tcDxt3)
_c(SRGBAlphaS3tcDxt3)
_c(RGBAS3tcDxt5)
_c(SRGBAlphaS3tcDxt5)
#ifndef MAGNUM_TARGET_WEBGL
_c(RGBAAstc4x4)
_c(SRGB8Alpha8Astc4x4)

36
src/Magnum/GL/PixelFormat.h

@ -899,6 +899,15 @@ enum class CompressedPixelFormat: GLenum {
*/
RGBS3tcDxt1 = GL_COMPRESSED_RGB_S3TC_DXT1_EXT,
/**
* S3TC DXT1 compressed sRGB. **Available only for 2D, 2D array, cube map
* and cube map array textures.**
* @requires_extension Extension @gl_extension{EXT,texture_compression_s3tc}
* @requires_es_extension Extension @gl_extension{EXT,texture_compression_s3tc_srgb}
* @requires_webgl_extension Extension @webgl_extension{WEBGL,compressed_texture_s3tc_srgb}
*/
SRGBS3tcDxt1 = GL_COMPRESSED_SRGB_S3TC_DXT1_EXT,
/**
* S3TC DXT1 compressed RGBA. **Available only for 2D, 2D array, cube map
* and cube map array textures.**
@ -908,6 +917,15 @@ enum class CompressedPixelFormat: GLenum {
*/
RGBAS3tcDxt1 = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,
/**
* S3TC DXT1 compressed sRGB + linear alpha. **Available only for 2D, 2D
* array, cube map and cube map array textures.**
* @requires_extension Extension @gl_extension{EXT,texture_compression_s3tc}
* @requires_es_extension Extension @gl_extension{EXT,texture_compression_s3tc_srgb}
* @requires_webgl_extension Extension @webgl_extension{WEBGL,compressed_texture_s3tc_srgb}
*/
SRGBAlphaS3tcDxt1 = GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,
/**
* S3TC DXT3 compressed RGBA. **Available only for 2D, 2D array, cube map
* and cube map array textures.**
@ -917,6 +935,15 @@ enum class CompressedPixelFormat: GLenum {
*/
RGBAS3tcDxt3 = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT,
/**
* S3TC DXT3 compressed sRGB + linear alpha. **Available only for 2D, 2D
* array, cube map and cube map array textures.**
* @requires_extension Extension @gl_extension{EXT,texture_compression_s3tc}
* @requires_es_extension Extension @gl_extension{EXT,texture_compression_s3tc_srgb}
* @requires_webgl_extension Extension @webgl_extension{WEBGL,compressed_texture_s3tc_srgb}
*/
SRGBAlphaS3tcDxt3 = GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,
/**
* S3TC DXT5 compressed RGBA. **Available only for 2D, 2D array, cube map
* and cube map array textures.**
@ -926,6 +953,15 @@ enum class CompressedPixelFormat: GLenum {
*/
RGBAS3tcDxt5 = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,
/**
* S3TC DXT5 compressed sRGB + linear alpha. **Available only for 2D, 2D
* array, cube map and cube map array textures.**
* @requires_extension Extension @gl_extension{EXT,texture_compression_s3tc}
* @requires_es_extension Extension @gl_extension{EXT,texture_compression_s3tc_srgb}
* @requires_webgl_extension Extension @webgl_extension{WEBGL,compressed_texture_s3tc_srgb}
*/
SRGBAlphaS3tcDxt5 = GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,
#ifndef MAGNUM_TARGET_WEBGL
/**
* ASTC compressed RGBA with 4x4 blocks. **Available only on 2D, 3D, 2D

36
src/Magnum/GL/TextureFormat.h

@ -1201,6 +1201,15 @@ enum class TextureFormat: GLenum {
*/
CompressedRGBS3tcDxt1 = GL_COMPRESSED_RGB_S3TC_DXT1_EXT,
/**
* S3TC DXT1 compressed sRGB. **Available only for 2D, 2D array, cube map
* and cube map array textures.**
* @requires_extension Extension @gl_extension{EXT,texture_compression_s3tc}
* @requires_es_extension Extension @gl_extension{EXT,texture_compression_s3tc_srgb}
* @requires_webgl_extension Extension @webgl_extension{WEBGL,compressed_texture_s3tc_srgb}
*/
CompressedSRGBS3tcDxt1 = GL_COMPRESSED_SRGB_S3TC_DXT1_EXT,
/**
* S3TC DXT1 compressed RGBA. **Available only on 2D, 2D array, cube map
* and cube map array textures.**
@ -1210,6 +1219,15 @@ enum class TextureFormat: GLenum {
*/
CompressedRGBAS3tcDxt1 = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,
/**
* S3TC DXT1 compressed sRGB + linear alpha. **Available only for 2D, 2D
* array, cube map and cube map array textures.**
* @requires_extension Extension @gl_extension{EXT,texture_compression_s3tc}
* @requires_es_extension Extension @gl_extension{EXT,texture_compression_s3tc_srgb}
* @requires_webgl_extension Extension @webgl_extension{WEBGL,compressed_texture_s3tc_srgb}
*/
CompressedSRGBAlphaS3tcDxt1 = GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,
/**
* S3TC DXT3 compressed RGBA. **Available only on 2D, 2D array, cube map
* and cube map array textures.**
@ -1219,6 +1237,15 @@ enum class TextureFormat: GLenum {
*/
CompressedRGBAS3tcDxt3 = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT,
/**
* S3TC DXT3 compressed sRGB + linear alpha. **Available only for 2D, 2D
* array, cube map and cube map array textures.**
* @requires_extension Extension @gl_extension{EXT,texture_compression_s3tc}
* @requires_es_extension Extension @gl_extension{EXT,texture_compression_s3tc_srgb}
* @requires_webgl_extension Extension @webgl_extension{WEBGL,compressed_texture_s3tc_srgb}
*/
CompressedSRGBAlphaS3tcDxt3 = GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,
/**
* S3TC DXT5 compressed RGBA. **Available only on 2D, 2D array, cube map
* and cube map array textures.**
@ -1228,6 +1255,15 @@ enum class TextureFormat: GLenum {
*/
CompressedRGBAS3tcDxt5 = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,
/**
* S3TC DXT5 compressed sRGB + linear alpha. **Available only for 2D, 2D
* array, cube map and cube map array textures.**
* @requires_extension Extension @gl_extension{EXT,texture_compression_s3tc}
* @requires_es_extension Extension @gl_extension{EXT,texture_compression_s3tc_srgb}
* @requires_webgl_extension Extension @webgl_extension{WEBGL,compressed_texture_s3tc_srgb}
*/
CompressedSRGBAlphaS3tcDxt5 = GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,
#ifndef MAGNUM_TARGET_WEBGL
/**
* ASTC compressed RGBA with 4x4 blocks. **Available only on 2D, 3D, 2D

4
src/Magnum/PixelFormat.cpp

@ -189,9 +189,13 @@ Debug& operator<<(Debug& debug, const CompressedPixelFormat value) {
/* LCOV_EXCL_START */
#define _c(value) case CompressedPixelFormat::value: return debug << "CompressedPixelFormat::" #value;
_c(Bc1RGBUnorm)
_c(Bc1RGBSrgb)
_c(Bc1RGBAUnorm)
_c(Bc1RGBASrgb)
_c(Bc2RGBAUnorm)
_c(Bc2RGBASrgb)
_c(Bc3RGBAUnorm)
_c(Bc3RGBASrgb)
_c(EacR11Unorm)
_c(EacR11Snorm)
_c(EacRG11Unorm)

40
src/Magnum/PixelFormat.h

@ -580,6 +580,16 @@ enum class CompressedPixelFormat: UnsignedInt {
*/
Bc1RGBUnorm,
/**
* [S3TC](https://en.wikipedia.org/wiki/S3_Texture_Compression) BC1
* compressed sRGB, normalized unsigned byte (DXT1).
*
* Corresponds to @ref GL::CompressedPixelFormat::SRGBS3tcDxt1,
* @ref GL::TextureFormat::CompressedSRGBS3tcDxt1 /
* @def_vk_keyword{FORMAT_BC1_RGB_SRGB_BLOCK,Format}.
*/
Bc1RGBSrgb,
/**
* [S3TC](https://en.wikipedia.org/wiki/S3_Texture_Compression) BC1
* compressed RGBA, normalized unsigned byte (DXT1).
@ -590,6 +600,16 @@ enum class CompressedPixelFormat: UnsignedInt {
*/
Bc1RGBAUnorm,
/**
* [S3TC](https://en.wikipedia.org/wiki/S3_Texture_Compression) BC1
* compressed sRGB + linear alpha, normalized unsigned byte (DXT1).
*
* Corresponds to @ref GL::CompressedPixelFormat::SRGBAlphaS3tcDxt1,
* @ref GL::TextureFormat::CompressedSRGBAlphaS3tcDxt1 /
* @def_vk_keyword{FORMAT_BC1_RGBA_SRGB_BLOCK,Format}.
*/
Bc1RGBASrgb,
/**
* [S3TC](https://en.wikipedia.org/wiki/S3_Texture_Compression) BC2
* compressed RGBA, normalized unsigned byte (DXT3).
@ -600,6 +620,16 @@ enum class CompressedPixelFormat: UnsignedInt {
*/
Bc2RGBAUnorm,
/**
* [S3TC](https://en.wikipedia.org/wiki/S3_Texture_Compression) BC2
* compressed sRGB + linear alpha, normalized unsigned byte (DXT3).
*
* Corresponds to @ref GL::CompressedPixelFormat::SRGBAlphaS3tcDxt3,
* @ref GL::TextureFormat::CompressedSRGBAlphaS3tcDxt3 /
* @def_vk_keyword{FORMAT_BC2_SRGB_BLOCK,Format}.
*/
Bc2RGBASrgb,
/**
* [S3TC](https://en.wikipedia.org/wiki/S3_Texture_Compression) BC3
* compressed RGBA, normalized unsigned byte (DXT5).
@ -610,6 +640,16 @@ enum class CompressedPixelFormat: UnsignedInt {
*/
Bc3RGBAUnorm,
/**
* [S3TC](https://en.wikipedia.org/wiki/S3_Texture_Compression) BC3
* compressed sRGB + linear alpha, normalized unsigned byte (DXT5).
*
* Corresponds to @ref GL::CompressedPixelFormat::SRGBAlphaS3tcDxt5,
* @ref GL::TextureFormat::CompressedSRGBAlphaS3tcDxt5 /
* @def_vk_keyword{FORMAT_BC3_SRGB_BLOCK,Format}.
*/
Bc3RGBASrgb,
/**
* [EAC](https://en.wikipedia.org/wiki/Ericsson_Texture_Compression#ETC2_and_EAC)
* compressed red component, normalized unsigned 11-bit.

4
src/Magnum/Vk/Implementation/compressedFormatMapping.hpp

@ -26,9 +26,13 @@
/* See Magnum/Vk/Enums.cpp and Magnum/Vk/Test/EnumsTest.cpp */
#ifdef _c
_c(Bc1RGBUnorm, BC1_RGB_UNORM_BLOCK)
_c(Bc1RGBSrgb, BC1_RGB_SRGB_BLOCK)
_c(Bc1RGBAUnorm, BC1_RGBA_UNORM_BLOCK)
_c(Bc1RGBASrgb, BC1_RGBA_SRGB_BLOCK)
_c(Bc2RGBAUnorm, BC2_UNORM_BLOCK)
_c(Bc2RGBASrgb, BC2_SRGB_BLOCK)
_c(Bc3RGBAUnorm, BC3_UNORM_BLOCK)
_c(Bc3RGBASrgb, BC3_SRGB_BLOCK)
_c(EacR11Unorm, EAC_R11_UNORM_BLOCK)
_c(EacR11Snorm, EAC_R11_SNORM_BLOCK)
_c(EacRG11Unorm, EAC_R11G11_UNORM_BLOCK)

Loading…
Cancel
Save