diff options
Diffstat (limited to 'src/GPU3D_Soft.cpp')
-rw-r--r-- | src/GPU3D_Soft.cpp | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/src/GPU3D_Soft.cpp b/src/GPU3D_Soft.cpp index d306a53..d022e8a 100644 --- a/src/GPU3D_Soft.cpp +++ b/src/GPU3D_Soft.cpp @@ -1025,25 +1025,29 @@ void RenderPolygonScanline(RendererPolygon* rp, s32 y) u32 dstcolor = ColorBuffer[pixeladdr]; u32 dstalpha = dstcolor >> 24; - if ((dstalpha > 0) && (RenderDispCnt & (1<<3))) + if (dstalpha > 0) { u32 srcR = color & 0x3F; u32 srcG = (color >> 8) & 0x3F; u32 srcB = (color >> 16) & 0x3F; - u32 dstR = dstcolor & 0x3F; - u32 dstG = (dstcolor >> 8) & 0x3F; - u32 dstB = (dstcolor >> 16) & 0x3F; - - alpha++; - dstR = ((srcR * alpha) + (dstR * (32-alpha))) >> 5; - dstG = ((srcG * alpha) + (dstG * (32-alpha))) >> 5; - dstB = ((srcB * alpha) + (dstB * (32-alpha))) >> 5; + if (RenderDispCnt & (1<<3)) + { + u32 dstR = dstcolor & 0x3F; + u32 dstG = (dstcolor >> 8) & 0x3F; + u32 dstB = (dstcolor >> 16) & 0x3F; + + alpha++; + srcR = ((srcR * alpha) + (dstR * (32-alpha))) >> 5; + srcG = ((srcG * alpha) + (dstG * (32-alpha))) >> 5; + srcB = ((srcB * alpha) + (dstB * (32-alpha))) >> 5; + alpha--; + } - alpha--; - if (alpha > dstalpha) dstalpha = alpha; + if (alpha > dstalpha) + dstalpha = alpha; - color = dstR | (dstG << 8) | (dstB << 16) | (dstalpha << 24); + color = srcR | (srcG << 8) | (srcB << 16) | (dstalpha << 24); } if (polygon->Attr & (1<<11)) |