mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-02-03 12:12:06 +00:00
Brightness fix for scaled RGB565 and RGB5551 textures. Fix broken color conversion in DecodeTexture (which is not normally used).
This commit is contained in:
parent
a125da7af6
commit
42a4a1e4ba
@ -1222,6 +1222,7 @@ void TextureCache::LoadTextureLevel(TexCacheEntry &entry, int level) {
|
||||
glTexImage2D(GL_TEXTURE_2D, level, components, w, h, 0, components, dstFmt, pixelData);
|
||||
}
|
||||
|
||||
// Only used by Qt UI?
|
||||
bool TextureCache::DecodeTexture(u8* output, GPUgstate state)
|
||||
{
|
||||
GPUgstate oldState = gstate;
|
||||
@ -1258,10 +1259,10 @@ bool TextureCache::DecodeTexture(u8* output, GPUgstate state)
|
||||
for(int y = 0; y < bufw; y++)
|
||||
{
|
||||
u32 val = ((u16*)finalBuf)[x*bufw + y];
|
||||
u32 a = (val & 0xF) * 255 / 15;
|
||||
u32 r = ((val & 0xF) >> 24) * 255 / 15;
|
||||
u32 g = ((val & 0xF) >> 16) * 255 / 15;
|
||||
u32 b = ((val & 0xF) >> 8) * 255 / 15;
|
||||
u32 r = ((val>>12) & 0xF) * 17;
|
||||
u32 g = ((val>> 8) & 0xF) * 17;
|
||||
u32 b = ((val>> 4) & 0xF) * 17;
|
||||
u32 a = ((val>> 0) & 0xF) * 17;
|
||||
((u32*)output)[x*w + y] = (a << 24) | (r << 16) | (g << 8) | b;
|
||||
}
|
||||
break;
|
||||
@ -1271,10 +1272,10 @@ bool TextureCache::DecodeTexture(u8* output, GPUgstate state)
|
||||
for(int y = 0; y < bufw; y++)
|
||||
{
|
||||
u32 val = ((u16*)finalBuf)[x*bufw + y];
|
||||
u32 r = Convert5To8((val>>11) & 0x1F);
|
||||
u32 g = Convert5To8((val>> 6) & 0x1F);
|
||||
u32 b = Convert5To8((val>> 1) & 0x1F);
|
||||
u32 a = (val & 0x1) * 255;
|
||||
u32 r = ((val & 0x1F) >> 11) * 255 / 31;
|
||||
u32 g = ((val & 0x1F) >> 6) * 255 / 31;
|
||||
u32 b = ((val & 0x1F) >> 1) * 255 / 31;
|
||||
((u32*)output)[x*w + y] = (a << 24) | (r << 16) | (g << 8) | b;
|
||||
}
|
||||
break;
|
||||
@ -1285,9 +1286,9 @@ bool TextureCache::DecodeTexture(u8* output, GPUgstate state)
|
||||
{
|
||||
u32 val = ((u16*)finalBuf)[x*bufw + y];
|
||||
u32 a = 0xFF;
|
||||
u32 r = ((val & 0x1F) >> 11) * 255 / 31;
|
||||
u32 g = ((val & 0x3F) >> 6) * 255 / 63;
|
||||
u32 b = ((val & 0x1F)) * 255 / 31;
|
||||
u32 r = Convert5To8((val>>11) & 0x1F);
|
||||
u32 g = Convert6To8((val>> 5) & 0x3F);
|
||||
u32 b = Convert5To8((val ) & 0x1F);
|
||||
((u32*)output)[x*w + y] = (a << 24) | (r << 16) | (g << 8) | b;
|
||||
}
|
||||
break;
|
||||
|
@ -47,6 +47,7 @@ public:
|
||||
return cache.size();
|
||||
}
|
||||
|
||||
// Only used by Qt UI?
|
||||
bool DecodeTexture(u8 *output, GPUgstate state);
|
||||
|
||||
private:
|
||||
|
@ -63,9 +63,9 @@ namespace {
|
||||
for(int y = l; y < u; ++y) {
|
||||
for(int x = 0; x < width; ++x) {
|
||||
u32 val = ((u16*)data)[y*width + x];
|
||||
u32 r = ((val>>11) & 0x1F) * 8;
|
||||
u32 g = ((val>> 5) & 0x3F) * 4;
|
||||
u32 b = ((val ) & 0x1F) * 8;
|
||||
u32 r = Convert5To8((val>>11) & 0x1F);
|
||||
u32 g = Convert6To8((val>> 5) & 0x3F);
|
||||
u32 b = Convert5To8((val ) & 0x1F);
|
||||
out[y*width + x] = (0xFF << 24) | (b << 16) | (g << 8) | r;
|
||||
}
|
||||
}
|
||||
@ -75,9 +75,9 @@ namespace {
|
||||
for(int y = l; y < u; ++y) {
|
||||
for(int x = 0; x < width; ++x) {
|
||||
u32 val = ((u16*)data)[y*width + x];
|
||||
u32 r = ((val>>11) & 0x1F) * 8;
|
||||
u32 g = ((val>> 6) & 0x1F) * 8;
|
||||
u32 b = ((val>> 1) & 0x1F) * 8;
|
||||
u32 r = Convert5To8((val>>11) & 0x1F);
|
||||
u32 g = Convert5To8((val>> 6) & 0x1F);
|
||||
u32 b = Convert5To8((val>> 1) & 0x1F);
|
||||
u32 a = (val & 0x1) * 255;
|
||||
out[y*width + x] = (a << 24) | (b << 16) | (g << 8) | r;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user