diff --git a/doc/changelog.dox b/doc/changelog.dox index df94662e3..028eccfa3 100644 --- a/doc/changelog.dox +++ b/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 diff --git a/doc/opengl-support.dox b/doc/opengl-support.dox index b14d9dd51..cb2fd409e 100644 --- a/doc/opengl-support.dox +++ b/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 diff --git a/src/Magnum/GL/AbstractTexture.cpp b/src/Magnum/GL/AbstractTexture.cpp index 3c70c0bdb..a6275c8a5 100644 --- a/src/Magnum/GL/AbstractTexture.cpp +++ b/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: diff --git a/src/Magnum/GL/Implementation/compressedPixelFormatMapping.hpp b/src/Magnum/GL/Implementation/compressedPixelFormatMapping.hpp index ffe08532a..56c3de6c5 100644 --- a/src/Magnum/GL/Implementation/compressedPixelFormatMapping.hpp +++ b/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) diff --git a/src/Magnum/GL/PixelFormat.cpp b/src/Magnum/GL/PixelFormat.cpp index ecd32933e..2d3e1a815 100644 --- a/src/Magnum/GL/PixelFormat.cpp +++ b/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) diff --git a/src/Magnum/GL/PixelFormat.h b/src/Magnum/GL/PixelFormat.h index de446cbe3..1dfceb087 100644 --- a/src/Magnum/GL/PixelFormat.h +++ b/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 diff --git a/src/Magnum/GL/TextureFormat.h b/src/Magnum/GL/TextureFormat.h index 2e17d2792..f3d5cf8ba 100644 --- a/src/Magnum/GL/TextureFormat.h +++ b/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 diff --git a/src/Magnum/PixelFormat.cpp b/src/Magnum/PixelFormat.cpp index f117f4f11..372e1e2f9 100644 --- a/src/Magnum/PixelFormat.cpp +++ b/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) diff --git a/src/Magnum/PixelFormat.h b/src/Magnum/PixelFormat.h index c1c32d104..8db894d7e 100644 --- a/src/Magnum/PixelFormat.h +++ b/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. diff --git a/src/Magnum/Vk/Implementation/compressedFormatMapping.hpp b/src/Magnum/Vk/Implementation/compressedFormatMapping.hpp index 517a9fd72..b155a3332 100644 --- a/src/Magnum/Vk/Implementation/compressedFormatMapping.hpp +++ b/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)