Render3D:
- Fix some coloring issues on big-endian systems brought about by the recent changes to the colorspace conversion code. (Regression from r5455.)
This commit is contained in:
parent
68825ec961
commit
b129392683
|
@ -719,28 +719,28 @@ void RomIconToRGBA8888(uint32_t *bitmapData)
|
||||||
// Set the RGBA8888 bitmap pixels using our CLUT from earlier.
|
// Set the RGBA8888 bitmap pixels using our CLUT from earlier.
|
||||||
|
|
||||||
#ifdef __BIG_ENDIAN__
|
#ifdef __BIG_ENDIAN__
|
||||||
*bitmapPixPtr = clut[(pixRowColors & 0x0F000000) >> 24];
|
*bitmapPixPtr = LOCAL_TO_LE_32(clut[(pixRowColors & 0x0F000000) >> 24]);
|
||||||
|
|
||||||
bitmapPixPtr++;
|
bitmapPixPtr++;
|
||||||
*bitmapPixPtr = clut[(pixRowColors & 0xF0000000) >> 28];
|
*bitmapPixPtr = LOCAL_TO_LE_32(clut[(pixRowColors & 0xF0000000) >> 28]);
|
||||||
|
|
||||||
bitmapPixPtr++;
|
bitmapPixPtr++;
|
||||||
*bitmapPixPtr = clut[(pixRowColors & 0x000F0000) >> 16];
|
*bitmapPixPtr = LOCAL_TO_LE_32(clut[(pixRowColors & 0x000F0000) >> 16]);
|
||||||
|
|
||||||
bitmapPixPtr++;
|
bitmapPixPtr++;
|
||||||
*bitmapPixPtr = clut[(pixRowColors & 0x00F00000) >> 20];
|
*bitmapPixPtr = LOCAL_TO_LE_32(clut[(pixRowColors & 0x00F00000) >> 20]);
|
||||||
|
|
||||||
bitmapPixPtr++;
|
bitmapPixPtr++;
|
||||||
*bitmapPixPtr = clut[(pixRowColors & 0x00000F00) >> 8];
|
*bitmapPixPtr = LOCAL_TO_LE_32(clut[(pixRowColors & 0x00000F00) >> 8]);
|
||||||
|
|
||||||
bitmapPixPtr++;
|
bitmapPixPtr++;
|
||||||
*bitmapPixPtr = clut[(pixRowColors & 0x0000F000) >> 12];
|
*bitmapPixPtr = LOCAL_TO_LE_32(clut[(pixRowColors & 0x0000F000) >> 12]);
|
||||||
|
|
||||||
bitmapPixPtr++;
|
bitmapPixPtr++;
|
||||||
*bitmapPixPtr = clut[(pixRowColors & 0x0000000F)];
|
*bitmapPixPtr = LOCAL_TO_LE_32(clut[(pixRowColors & 0x0000000F)]);
|
||||||
|
|
||||||
bitmapPixPtr++;
|
bitmapPixPtr++;
|
||||||
*bitmapPixPtr = clut[(pixRowColors & 0x000000F0) >> 4];
|
*bitmapPixPtr = LOCAL_TO_LE_32(clut[(pixRowColors & 0x000000F0) >> 4]);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
|
|
@ -1839,8 +1839,7 @@ Render3DError SoftRasterizerRenderer::UpdateToonTable(const u16 *toonTableBuffer
|
||||||
//convert the toon colors
|
//convert the toon colors
|
||||||
for (size_t i = 0; i < 32; i++)
|
for (size_t i = 0; i < 32; i++)
|
||||||
{
|
{
|
||||||
this->toonColor32LUT[i].color = ( COLOR555TO888(toonTableBuffer[i] & 0x7FFF) >> 2 ) & 0x003F3F3F;
|
this->toonColor32LUT[i].color = COLOR555TO666(toonTableBuffer[i] & 0x7FFF);
|
||||||
//printf("%d %d %d %d\n", this->toonColor32LUT[i].r, this->toonColor32LUT[i].g, this->toonColor32LUT[i].b, this->toonColor32LUT[i].a);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return RENDER3DERROR_NOERR;
|
return RENDER3DERROR_NOERR;
|
||||||
|
|
|
@ -635,11 +635,12 @@ Render3DError Render3D::ClearFramebuffer(const GFX3D_State &renderState)
|
||||||
{
|
{
|
||||||
Render3DError error = RENDER3DERROR_NOERR;
|
Render3DError error = RENDER3DERROR_NOERR;
|
||||||
|
|
||||||
|
const u32 clearColorSwapped = LE_TO_LOCAL_32(renderState.clearColor);
|
||||||
FragmentColor clearColor6665;
|
FragmentColor clearColor6665;
|
||||||
clearColor6665.color = COLOR555TO6665(renderState.clearColor & 0x7FFF, (renderState.clearColor >> 16) & 0x1F);
|
clearColor6665.color = COLOR555TO6665(clearColorSwapped & 0x7FFF, (clearColorSwapped >> 16) & 0x1F);
|
||||||
|
|
||||||
FragmentAttributes clearFragment;
|
FragmentAttributes clearFragment;
|
||||||
clearFragment.opaquePolyID = (renderState.clearColor >> 24) & 0x3F;
|
clearFragment.opaquePolyID = (clearColorSwapped >> 24) & 0x3F;
|
||||||
//special value for uninitialized translucent polyid. without this, fires in spiderman2 dont display
|
//special value for uninitialized translucent polyid. without this, fires in spiderman2 dont display
|
||||||
//I am not sure whether it is right, though. previously this was cleared to 0, as a guess,
|
//I am not sure whether it is right, though. previously this was cleared to 0, as a guess,
|
||||||
//but in spiderman2 some fires with polyid 0 try to render on top of the background
|
//but in spiderman2 some fires with polyid 0 try to render on top of the background
|
||||||
|
@ -647,7 +648,7 @@ Render3DError Render3D::ClearFramebuffer(const GFX3D_State &renderState)
|
||||||
clearFragment.depth = renderState.clearDepth;
|
clearFragment.depth = renderState.clearDepth;
|
||||||
clearFragment.stencil = 0;
|
clearFragment.stencil = 0;
|
||||||
clearFragment.isTranslucentPoly = 0;
|
clearFragment.isTranslucentPoly = 0;
|
||||||
clearFragment.isFogged = BIT15(renderState.clearColor);
|
clearFragment.isFogged = BIT15(clearColorSwapped);
|
||||||
|
|
||||||
if (renderState.enableClearImage)
|
if (renderState.enableClearImage)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue