texture_codec: Use namespace Color
* Makes the code somewhat cleaner
This commit is contained in:
@ -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));
|
||||||
|
Reference in New Issue
Block a user