Move simple conversion functions out of the ColorConv header.

This commit is contained in:
Henrik Rydgard 2015-04-08 22:50:36 +02:00
parent a19ea78b4b
commit 4621586342
3 changed files with 29 additions and 49 deletions

View file

@ -19,6 +19,30 @@
#include "ColorConv.h"
#include "CommonTypes.h"
inline u16 RGBA8888toRGB565(u32 px) {
return ((px >> 3) & 0x001F) | ((px >> 5) & 0x07E0) | ((px >> 8) & 0xF800);
}
inline u16 RGBA8888toRGBA4444(u32 px) {
return ((px >> 4) & 0x000F) | ((px >> 8) & 0x00F0) | ((px >> 12) & 0x0F00) | ((px >> 16) & 0xF000);
}
inline u16 BGRA8888toRGB565(u32 px) {
return ((px >> 19) & 0x001F) | ((px >> 5) & 0x07E0) | ((px << 8) & 0xF800);
}
inline u16 BGRA8888toRGBA4444(u32 px) {
return ((px >> 20) & 0x000F) | ((px >> 8) & 0x00F0) | ((px << 4) & 0x0F00) | ((px >> 16) & 0xF000);
}
inline u16 BGRA8888toRGBA5551(u32 px) {
return ((px >> 19) & 0x001F) | ((px >> 6) & 0x03E0) | ((px << 7) & 0x7C00) | ((px >> 16) & 0x8000);
}
inline u16 RGBA8888toRGBA5551(u32 px) {
return ((px >> 3) & 0x001F) | ((px >> 6) & 0x03E0) | ((px >> 9) & 0x7C00) | ((px >> 16) & 0x8000);
}
// convert 4444 image to 8888, parallelizable
void convert4444_gl(u16* data, u32* out, int width, int l, int u) {
for (int y = l; y < u; ++y) {

View file

@ -35,37 +35,6 @@ inline u8 Convert6To8(u8 v) {
return (v << 2) | (v >> 4);
}
inline u16 RGBA8888toRGB565(u32 px) {
return ((px >> 3) & 0x001F) | ((px >> 5) & 0x07E0) | ((px >> 8) & 0xF800);
}
inline u16 RGBA8888toRGBA4444(u32 px) {
return ((px >> 4) & 0x000F) | ((px >> 8) & 0x00F0) | ((px >> 12) & 0x0F00) | ((px >> 16) & 0xF000);
}
inline u16 BGRA8888toRGB565(u32 px) {
return ((px >> 19) & 0x001F) | ((px >> 5) & 0x07E0) | ((px << 8) & 0xF800);
}
inline u16 BGRA8888toRGBA4444(u32 px) {
return ((px >> 20) & 0x000F) | ((px >> 8) & 0x00F0) | ((px << 4) & 0x0F00) | ((px >> 16) & 0xF000);
}
inline u16 BGRA8888toRGBA5551(u32 px) {
return ((px >> 19) & 0x001F) | ((px >> 6) & 0x03E0) | ((px << 7) & 0x7C00) | ((px >> 16) & 0x8000);
}
inline u16 RGBA8888toRGBA5551(u32 px) {
return ((px >> 3) & 0x001F) | ((px >> 6) & 0x03E0) | ((px >> 9) & 0x7C00) | ((px >> 16) & 0x8000);
}
inline u32 RGBA2BGRA(u32 src) {
const u32 r = (src & 0x000000FF) << 16;
const u32 ga = src & 0xFF00FF00;
const u32 b = (src & 0x00FF0000) >> 16;
return r | ga | b;
}
inline u32 DecodeRGBA4444(u16 src) {
const u32 r = (src & 0x000F) << 0;
const u32 g = (src & 0x00F0) << 4;
@ -93,19 +62,6 @@ inline u32 DecodeRGB565(u16 src) {
return (a << 24) | (b << 16) | (g << 8) | r;
}
inline u32 DecodeRGBA8888(u32 src) {
#if 1
return src;
#else
// This is the order of the bits.
u8 r = src & 0xFF;
u8 g = (src >> 8) & 0xFF;
u8 b = (src >> 16) & 0xFF;
u8 a = (src >> 24) & 0xFF;
return (a << 24) | (b << 16) | (g << 8) | r;
#endif
}
inline u16 RGBA8888To565(u32 value) {
u8 r = value & 0xFF;
u8 g = (value >> 8) & 0xFF;

View file

@ -94,7 +94,7 @@ static inline u32 LookupColor(unsigned int index, unsigned int level)
return DecodeRGBA4444(reinterpret_cast<u16*>(clut)[index + clutSharingOffset]);
case GE_CMODE_32BIT_ABGR8888:
return DecodeRGBA8888(clut[index + clutSharingOffset]);
return clut[index + clutSharingOffset];
default:
ERROR_LOG_REPORT(G3D, "Software: Unsupported palette format: %x", gstate.getClutPaletteFormat());
@ -282,7 +282,7 @@ inline static Nearest4 SampleNearest(int level, int u[N], int v[N], const u8 *sr
case GE_TFMT_8888:
for (int i = 0; i < N; ++i) {
const u8 *src = srcptr + GetPixelDataOffset<32>(texbufwidthbits, u[i], v[i]);
res.v[i] = DecodeRGBA8888(*(const u32 *)src);
res.v[i] = *(const u32 *)src;
}
return res;
@ -323,7 +323,7 @@ inline static Nearest4 SampleNearest(int level, int u[N], int v[N], const u8 *sr
const DXT1Block *block = (const DXT1Block *)srcptr + (v[i] / 4) * (texbufwidthbits / 8 / 4) + (u[i] / 4);
u32 data[4 * 4];
DecodeDXT1Block(data, block, 4);
res.v[i] = DecodeRGBA8888(data[4 * (v[i] % 4) + (u[i] % 4)]);
res.v[i] = data[4 * (v[i] % 4) + (u[i] % 4)];
}
return res;
@ -332,7 +332,7 @@ inline static Nearest4 SampleNearest(int level, int u[N], int v[N], const u8 *sr
const DXT3Block *block = (const DXT3Block *)srcptr + (v[i] / 4) * (texbufwidthbits / 8 / 4) + (u[i] / 4);
u32 data[4 * 4];
DecodeDXT3Block(data, block, 4);
res.v[i] = DecodeRGBA8888(data[4 * (v[i] % 4) + (u[i] % 4)]);
res.v[i] = data[4 * (v[i] % 4) + (u[i] % 4)];
}
return res;
@ -341,7 +341,7 @@ inline static Nearest4 SampleNearest(int level, int u[N], int v[N], const u8 *sr
const DXT5Block *block = (const DXT5Block *)srcptr + (v[i] / 4) * (texbufwidthbits / 8 / 4) + (u[i] / 4);
u32 data[4 * 4];
DecodeDXT5Block(data, block, 4);
res.v[i] = DecodeRGBA8888(data[4 * (v[i] % 4) + (u[i] % 4)]);
res.v[i] = data[4 * (v[i] % 4) + (u[i] % 4)];
}
return res;