From 5ba449d1ffacd4831ed2dea874d15f6442ff5fc9 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Sat, 29 Oct 2016 23:42:40 -0300 Subject: [PATCH] Add support for BC4-7 compressed texture formats in KTX files. Updated the changelog. --- changes.txt | 2 + src/modules/image/magpie/KTXHandler.cpp | 61 +++++++++++++++++++++++-- 2 files changed, 58 insertions(+), 5 deletions(-) diff --git a/changes.txt b/changes.txt index fc9d3c825..66a501d4f 100644 --- a/changes.txt +++ b/changes.txt @@ -9,6 +9,8 @@ Released: N/A * Added love.window.isMaximized. * Added 'shaderswitches' field to the table returned by love.graphics.getStats. * Added Quad:getTextureDimensions. + * Added 'ellipse' area distribution to ParticleSystems. + * Added support for BC4-7 compressed texture formats in KTX files. * Added PrismaticJoint:getAxis and WheelJoint:getAxis. * Added 2-point version of love.physics.newRevoluteJoint. * Added table variants of Fixture:setCategory and Fixture:setMask. diff --git a/src/modules/image/magpie/KTXHandler.cpp b/src/modules/image/magpie/KTXHandler.cpp index 70de4b0ee..9207895f2 100644 --- a/src/modules/image/magpie/KTXHandler.cpp +++ b/src/modules/image/magpie/KTXHandler.cpp @@ -67,6 +67,7 @@ enum KTXGLInternalFormat { KTX_GL_ETC1_RGB8_OES = 0x8D64, + // ETC2 and EAC. KTX_GL_COMPRESSED_R11_EAC = 0x9270, KTX_GL_COMPRESSED_SIGNED_R11_EAC = 0x9271, KTX_GL_COMPRESSED_RG11_EAC = 0x9272, @@ -78,17 +79,33 @@ enum KTXGLInternalFormat KTX_GL_COMPRESSED_RGBA8_ETC2_EAC = 0x9278, KTX_GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x9279, - // I don't know if any KTX file contains PVR data, but why not support it. + // PVRTC1. KTX_GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8C00, KTX_GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 0x8C01, KTX_GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8C02, KTX_GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 0x8C03, - // Same with DXT1/3/5. - KTX_GL_COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0, - KTX_GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = 0x83F2, - KTX_GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83F3, + // DXT1, DXT3, and DXT5. + KTX_GL_COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0, + KTX_GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = 0x83F2, + KTX_GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83F3, + KTX_GL_COMPRESSED_SRGB_S3TC_DXT1_EXT = 0x8C4C, + KTX_GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT = 0x8C4E, + KTX_GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT = 0x8C4F, + // BC4 and BC5. + KTX_GL_COMPRESSED_RED_RGTC1 = 0x8DBB, + KTX_GL_COMPRESSED_SIGNED_RED_RGTC1 = 0x8DBC, + KTX_GL_COMPRESSED_RG_RGTC2 = 0x8DBD, + KTX_GL_COMPRESSED_SIGNED_RG_RGTC2 = 0x8DBE, + + // BC6 and BC7. + KTX_GL_COMPRESSED_RGBA_BPTC_UNORM = 0x8E8C, + KTX_GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM = 0x8E8D, + KTX_GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT = 0x8E8E, + KTX_GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT = 0x8E8F, + + // ASTC. KTX_GL_COMPRESSED_RGBA_ASTC_4x4_KHR = 0x93B0, KTX_GL_COMPRESSED_RGBA_ASTC_5x4_KHR = 0x93B1, KTX_GL_COMPRESSED_RGBA_ASTC_5x5_KHR = 0x93B2, @@ -129,6 +146,8 @@ CompressedImageData::Format convertFormat(uint32 glformat, bool &sRGB) { case KTX_GL_ETC1_RGB8_OES: return CompressedImageData::FORMAT_ETC1; + + // EAC and ETC2. case KTX_GL_COMPRESSED_R11_EAC: return CompressedImageData::FORMAT_EAC_R; case KTX_GL_COMPRESSED_SIGNED_R11_EAC: @@ -152,6 +171,8 @@ CompressedImageData::Format convertFormat(uint32 glformat, bool &sRGB) case KTX_GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: sRGB = true; return CompressedImageData::FORMAT_ETC2_RGBA; + + // PVRTC. case KTX_GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG: return CompressedImageData::FORMAT_PVR1_RGB4; case KTX_GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG: @@ -160,12 +181,42 @@ CompressedImageData::Format convertFormat(uint32 glformat, bool &sRGB) return CompressedImageData::FORMAT_PVR1_RGBA4; case KTX_GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: return CompressedImageData::FORMAT_PVR1_RGBA2; + + // DXT. + case KTX_GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: + sRGB = true; case KTX_GL_COMPRESSED_RGB_S3TC_DXT1_EXT: return CompressedImageData::FORMAT_DXT1; + case KTX_GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: + sRGB = true; case KTX_GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: return CompressedImageData::FORMAT_DXT3; + case KTX_GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: + sRGB = true; case KTX_GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: return CompressedImageData::FORMAT_DXT5; + + // BC4 and BC5. + case KTX_GL_COMPRESSED_RED_RGTC1: + return CompressedImageData::FORMAT_BC4; + case KTX_GL_COMPRESSED_SIGNED_RED_RGTC1: + return CompressedImageData::FORMAT_BC4s; + case KTX_GL_COMPRESSED_RG_RGTC2: + return CompressedImageData::FORMAT_BC5; + case KTX_GL_COMPRESSED_SIGNED_RG_RGTC2: + return CompressedImageData::FORMAT_BC5s; + + // BC6 and BC7. + case KTX_GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM: + sRGB = true; + case KTX_GL_COMPRESSED_RGBA_BPTC_UNORM: + return CompressedImageData::FORMAT_BC7; + case KTX_GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT: + return CompressedImageData::FORMAT_BC6Hs; + case KTX_GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT: + return CompressedImageData::FORMAT_BC6H; + + // ASTC. case KTX_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR: sRGB = true; case KTX_GL_COMPRESSED_RGBA_ASTC_4x4_KHR: