From 2a81637f99da10f8341a9947667c683f735987df Mon Sep 17 00:00:00 2001 From: Sandy Date: Sun, 21 Aug 2022 19:16:13 -0400 Subject: [PATCH] pixelformat: Add pack and unpack for B5G6R5 (#281) * pixelformat: Add pack and unpack for B5G6R5 Invert R5G6B5 and B5G6R5 * pixelformat: Fix typo in BGRA4 --- include/bx/inline/pixelformat.inl | 27 +++++++++++++++++++++++---- include/bx/pixelformat.h | 6 +++++- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/include/bx/inline/pixelformat.inl b/include/bx/inline/pixelformat.inl index 856a2a8..ac35ecc 100644 --- a/include/bx/inline/pixelformat.inl +++ b/include/bx/inline/pixelformat.inl @@ -823,8 +823,8 @@ namespace bx memCopy(_dst, _src, 16); } - // R5G6B5 - inline void packR5G6B5(void* _dst, const float* _src) + // B5G6R5 + inline void packB5G6R5(void* _dst, const float* _src) { *( (uint16_t*)_dst) = 0 | uint16_t(toUnorm(_src[0], 31.0f)<<11) @@ -833,7 +833,7 @@ namespace bx ; } - inline void unpackR5G6B5(float* _dst, const void* _src) + inline void unpackB5G6R5(float* _dst, const void* _src) { uint16_t packed = *( (const uint16_t*)_src); _dst[0] = float( ( (packed>>11) & 0x1f) ) / 31.0f; @@ -842,6 +842,25 @@ namespace bx _dst[3] = 1.0f; } + // R5G6B5 + inline void packR5G6B5(void* _dst, const float* _src) + { + *( (uint16_t*)_dst) = 0 + | uint16_t(toUnorm(_src[0], 31.0f) ) + | uint16_t(toUnorm(_src[1], 63.0f)<< 5) + | uint16_t(toUnorm(_src[2], 31.0f)<<11) + ; + } + + inline void unpackR5G6B5(float* _dst, const void* _src) + { + uint16_t packed = *( (const uint16_t*)_src); + _dst[0] = float( ( (packed ) & 0x1f) ) / 31.0f; + _dst[1] = float( ( (packed>> 5) & 0x3f) ) / 63.0f; + _dst[2] = float( ( (packed>>11) & 0x1f) ) / 31.0f; + _dst[3] = 1.0f; + } + // RGBA4 inline void packRgba4(void* _dst, const float* _src) { @@ -862,7 +881,7 @@ namespace bx _dst[3] = float( ( (packed>>12) & 0xf) ) / 15.0f; } - // RGBA4 + // BGRA4 inline void packBgra4(void* _dst, const float* _src) { *( (uint16_t*)_dst) = 0 diff --git a/include/bx/pixelformat.h b/include/bx/pixelformat.h index ac08cf3..c556b01 100644 --- a/include/bx/pixelformat.h +++ b/include/bx/pixelformat.h @@ -209,6 +209,10 @@ namespace bx void packRgba32F(void* _dst, const float* _src); void unpackRgba32F(float* _dst, const void* _src); + // B5G6R5 + void packB5G6R5(void* _dst, const float* _src); + void unpackB5G6R5(float* _dst, const void* _src); + // R5G6B5 void packR5G6B5(void* _dst, const float* _src); void unpackR5G6B5(float* _dst, const void* _src); @@ -217,7 +221,7 @@ namespace bx void packRgba4(void* _dst, const float* _src); void unpackRgba4(float* _dst, const void* _src); - // RGBA4 + // BGRA4 void packBgra4(void* _dst, const float* _src); void unpackBgra4(float* _dst, const void* _src);