texture_codec: Use namespace Color

* Makes the code somewhat cleaner
This commit is contained in:
GPUCode
2023-02-09 17:04:22 +02:00
parent d461778296
commit c855d84492

View File

@ -24,43 +24,44 @@ inline T MakeInt(const u8* bytes) {
template <PixelFormat format, bool converted> template <PixelFormat format, bool converted>
constexpr void DecodePixel(const u8* source, u8* dest) { constexpr void DecodePixel(const u8* source, u8* dest) {
using namespace Common::Color;
constexpr u32 bytes_per_pixel = GetFormatBpp(format) / 8; constexpr u32 bytes_per_pixel = GetFormatBpp(format) / 8;
if constexpr (format == PixelFormat::RGBA8 && converted) { if constexpr (format == PixelFormat::RGBA8 && converted) {
const auto abgr = Common::Color::DecodeRGBA8(source); const auto abgr = DecodeRGBA8(source);
std::memcpy(dest, abgr.AsArray(), 4); std::memcpy(dest, abgr.AsArray(), 4);
} else if constexpr (format == PixelFormat::RGB8 && converted) { } else if constexpr (format == PixelFormat::RGB8 && converted) {
const auto abgr = Common::Color::DecodeRGB8(source); const auto abgr = DecodeRGB8(source);
std::memcpy(dest, abgr.AsArray(), 4); std::memcpy(dest, abgr.AsArray(), 4);
} else if constexpr (format == PixelFormat::RGB565 && converted) { } else if constexpr (format == PixelFormat::RGB565 && converted) {
const auto abgr = Common::Color::DecodeRGB565(source); const auto abgr = DecodeRGB565(source);
std::memcpy(dest, abgr.AsArray(), 4); std::memcpy(dest, abgr.AsArray(), 4);
} else if constexpr (format == PixelFormat::RGB5A1 && converted) { } else if constexpr (format == PixelFormat::RGB5A1 && converted) {
const auto abgr = Common::Color::DecodeRGB5A1(source); const auto abgr = DecodeRGB5A1(source);
std::memcpy(dest, abgr.AsArray(), 4); std::memcpy(dest, abgr.AsArray(), 4);
} else if constexpr (format == PixelFormat::RGBA4 && converted) { } else if constexpr (format == PixelFormat::RGBA4 && converted) {
const auto abgr = Common::Color::DecodeRGBA4(source); const auto abgr = DecodeRGBA4(source);
std::memcpy(dest, abgr.AsArray(), 4); std::memcpy(dest, abgr.AsArray(), 4);
} else if constexpr (format == PixelFormat::IA8) { } else if constexpr (format == PixelFormat::IA8) {
const auto abgr = Common::Color::DecodeIA8(source); const auto abgr = DecodeIA8(source);
std::memcpy(dest, abgr.AsArray(), 4); std::memcpy(dest, abgr.AsArray(), 4);
} else if constexpr (format == PixelFormat::RG8) { } else if constexpr (format == PixelFormat::RG8) {
const auto abgr = Common::Color::DecodeRG8(source); const auto abgr = DecodeRG8(source);
std::memcpy(dest, abgr.AsArray(), 4); std::memcpy(dest, abgr.AsArray(), 4);
} else if constexpr (format == PixelFormat::I8) { } else if constexpr (format == PixelFormat::I8) {
const auto abgr = Common::Color::DecodeI8(source); const auto abgr = DecodeI8(source);
std::memcpy(dest, abgr.AsArray(), 4); std::memcpy(dest, abgr.AsArray(), 4);
} else if constexpr (format == PixelFormat::A8) { } else if constexpr (format == PixelFormat::A8) {
const auto abgr = Common::Color::DecodeA8(source); const auto abgr = DecodeA8(source);
std::memcpy(dest, abgr.AsArray(), 4); std::memcpy(dest, abgr.AsArray(), 4);
} else if constexpr (format == PixelFormat::IA4) { } else if constexpr (format == PixelFormat::IA4) {
const auto abgr = Common::Color::DecodeIA4(source); const auto abgr = DecodeIA4(source);
std::memcpy(dest, abgr.AsArray(), 4); std::memcpy(dest, abgr.AsArray(), 4);
} else if constexpr (format == PixelFormat::D16 && converted) { } else if constexpr (format == PixelFormat::D16 && converted) {
const auto d32 = Common::Color::DecodeD16(source) / 65535.f; const auto d32 = DecodeD16(source) / 65535.f;
std::memcpy(dest, &d32, sizeof(d32)); std::memcpy(dest, &d32, sizeof(d32));
} else if constexpr (format == PixelFormat::D24 && converted) { } else if constexpr (format == PixelFormat::D24 && converted) {
const auto d32 = Common::Color::DecodeD24(source) / 16777215.f; const auto d32 = DecodeD24(source) / 16777215.f;
std::memcpy(dest, &d32, sizeof(d32)); std::memcpy(dest, &d32, sizeof(d32));
} else if constexpr (format == PixelFormat::D24S8) { } else if constexpr (format == PixelFormat::D24S8) {
const u32 d24s8 = std::rotl(MakeInt<u32>(source), 8); const u32 d24s8 = std::rotl(MakeInt<u32>(source), 8);
@ -117,56 +118,57 @@ constexpr void DecodePixelETC1(u32 x, u32 y, const u8* source_tile, u8* dest_pix
template <PixelFormat format, bool converted> template <PixelFormat format, bool converted>
constexpr void EncodePixel(const u8* source, u8* dest) { constexpr void EncodePixel(const u8* source, u8* dest) {
using namespace Common::Color;
constexpr u32 bytes_per_pixel = GetFormatBpp(format) / 8; constexpr u32 bytes_per_pixel = GetFormatBpp(format) / 8;
if constexpr (format == PixelFormat::RGBA8 && converted) { if constexpr (format == PixelFormat::RGBA8 && converted) {
Common::Vec4<u8> rgba; Common::Vec4<u8> rgba;
std::memcpy(rgba.AsArray(), source, 4); std::memcpy(rgba.AsArray(), source, 4);
Common::Color::EncodeRGBA8(rgba, dest); EncodeRGBA8(rgba, dest);
} else if constexpr (format == PixelFormat::RGB8 && converted) { } else if constexpr (format == PixelFormat::RGB8 && converted) {
Common::Vec4<u8> rgba; Common::Vec4<u8> rgba;
std::memcpy(rgba.AsArray(), source, 4); std::memcpy(rgba.AsArray(), source, 4);
Common::Color::EncodeRGB8(rgba, dest); EncodeRGB8(rgba, dest);
} else if constexpr (format == PixelFormat::RGB565 && converted) { } else if constexpr (format == PixelFormat::RGB565 && converted) {
Common::Vec4<u8> rgba; Common::Vec4<u8> rgba;
std::memcpy(rgba.AsArray(), source, 4); std::memcpy(rgba.AsArray(), source, 4);
Common::Color::EncodeRGB565(rgba, dest); EncodeRGB565(rgba, dest);
} else if constexpr (format == PixelFormat::RGB5A1 && converted) { } else if constexpr (format == PixelFormat::RGB5A1 && converted) {
Common::Vec4<u8> rgba; Common::Vec4<u8> rgba;
std::memcpy(rgba.AsArray(), source, 4); std::memcpy(rgba.AsArray(), source, 4);
Common::Color::EncodeRGB5A1(rgba, dest); EncodeRGB5A1(rgba, dest);
} else if constexpr (format == PixelFormat::RGBA4 && converted) { } else if constexpr (format == PixelFormat::RGBA4 && converted) {
Common::Vec4<u8> rgba; Common::Vec4<u8> rgba;
std::memcpy(rgba.AsArray(), source, 4); std::memcpy(rgba.AsArray(), source, 4);
Common::Color::EncodeRGBA4(rgba, dest); EncodeRGBA4(rgba, dest);
} else if constexpr (format == PixelFormat::IA8) { } else if constexpr (format == PixelFormat::IA8) {
Common::Vec4<u8> rgba; Common::Vec4<u8> rgba;
std::memcpy(rgba.AsArray(), source, 4); std::memcpy(rgba.AsArray(), source, 4);
Common::Color::EncodeIA8(rgba, dest); EncodeIA8(rgba, dest);
} else if constexpr (format == PixelFormat::RG8) { } else if constexpr (format == PixelFormat::RG8) {
Common::Vec4<u8> rgba; Common::Vec4<u8> rgba;
std::memcpy(rgba.AsArray(), source, 4); std::memcpy(rgba.AsArray(), source, 4);
Common::Color::EncodeRG8(rgba, dest); EncodeRG8(rgba, dest);
} else if constexpr (format == PixelFormat::I8) { } else if constexpr (format == PixelFormat::I8) {
Common::Vec4<u8> rgba; Common::Vec4<u8> rgba;
std::memcpy(rgba.AsArray(), source, 4); std::memcpy(rgba.AsArray(), source, 4);
Common::Color::EncodeI8(rgba, dest); EncodeI8(rgba, dest);
} else if constexpr (format == PixelFormat::A8) { } else if constexpr (format == PixelFormat::A8) {
Common::Vec4<u8> rgba; Common::Vec4<u8> rgba;
std::memcpy(rgba.AsArray(), source, 4); std::memcpy(rgba.AsArray(), source, 4);
Common::Color::EncodeA8(rgba, dest); EncodeA8(rgba, dest);
} else if constexpr (format == PixelFormat::IA4) { } else if constexpr (format == PixelFormat::IA4) {
Common::Vec4<u8> rgba; Common::Vec4<u8> rgba;
std::memcpy(rgba.AsArray(), source, 4); std::memcpy(rgba.AsArray(), source, 4);
Common::Color::EncodeIA4(rgba, dest); EncodeIA4(rgba, dest);
} else if constexpr (format == PixelFormat::D16 && converted) { } else if constexpr (format == PixelFormat::D16 && converted) {
float d32; float d32;
std::memcpy(&d32, source, sizeof(d32)); std::memcpy(&d32, source, sizeof(d32));
Common::Color::EncodeD16(d32 * 0xFFFF, dest); EncodeD16(d32 * 0xFFFF, dest);
} else if constexpr (format == PixelFormat::D24 && converted) { } else if constexpr (format == PixelFormat::D24 && converted) {
float d32; float d32;
std::memcpy(&d32, source, sizeof(d32)); std::memcpy(&d32, source, sizeof(d32));
Common::Color::EncodeD24(d32 * 0xFFFFFF, dest); EncodeD24(d32 * 0xFFFFFF, dest);
} else if constexpr (format == PixelFormat::D24S8) { } else if constexpr (format == PixelFormat::D24S8) {
const u32 s8d24 = std::rotr(MakeInt<u32>(source), 8); const u32 s8d24 = std::rotr(MakeInt<u32>(source), 8);
std::memcpy(dest, &s8d24, sizeof(u32)); std::memcpy(dest, &s8d24, sizeof(u32));