Browse Source

Pica: Fix A4, IA4 and IA8 texture formats.

Both IA4 and IA8 had their component order mixed up. Additionally, IA4 used the wrong number of nibbles per texel. A4 skipped every second texel.
pull/15/merge
Tony Wasserka 11 years ago
parent
commit
632655e292
  1. 20
      src/video_core/debug_utils/debug_utils.cpp

20
src/video_core/debug_utils/debug_utils.cpp

@ -389,13 +389,11 @@ const Math::Vec4<u8> LookupTexture(const u8* source, int x, int y, const Texture
{
const u8* source_ptr = source + offset * 2;
// TODO: component order not verified
if (disable_alpha) {
// Show intensity as red, alpha as green
return { source_ptr[0], source_ptr[1], 0, 255 };
return { source_ptr[1], source_ptr[0], 0, 255 };
} else {
return { source_ptr[0], source_ptr[0], source_ptr[0], source_ptr[1]};
return { source_ptr[1], source_ptr[1], source_ptr[1], source_ptr[0]};
}
}
@ -418,12 +416,10 @@ const Math::Vec4<u8> LookupTexture(const u8* source, int x, int y, const Texture
case Regs::TextureFormat::IA4:
{
const u8* source_ptr = source + offset / 2;
// TODO: component order not verified
const u8* source_ptr = source + offset;
u8 i = (*source_ptr) & 0xF;
u8 a = ((*source_ptr) & 0xF0) >> 4;
u8 i = ((*source_ptr) & 0xF0) >> 4;
u8 a = (*source_ptr) & 0xF;
a |= a << 4;
i |= i << 4;
@ -439,15 +435,13 @@ const Math::Vec4<u8> LookupTexture(const u8* source, int x, int y, const Texture
{
const u8* source_ptr = source + offset / 2;
// TODO: component order not verified
u8 a = (coarse_x % 2) ? ((*source_ptr)&0xF) : (((*source_ptr) & 0xF0) >> 4);
a |= a << 4;
if (disable_alpha) {
return { *source_ptr, *source_ptr, *source_ptr, 255 };
return { a, a, a, 255 };
} else {
return { 0, 0, 0, *source_ptr };
return { 0, 0, 0, a };
}
}

Loading…
Cancel
Save