pixelformat: Add pack and unpack for B5G6R5 (#281)

* pixelformat: Add pack and unpack for B5G6R5

Invert R5G6B5 and B5G6R5

* pixelformat: Fix typo in BGRA4
This commit is contained in:
Sandy
2022-08-21 19:16:13 -04:00
committed by GitHub
parent 54ad45ae40
commit 2a81637f99
2 changed files with 28 additions and 5 deletions

View File

@@ -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

View File

@@ -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);