aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/GPU3D_Soft.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/GPU3D_Soft.cpp b/src/GPU3D_Soft.cpp
index 07222f2..e78524d 100644
--- a/src/GPU3D_Soft.cpp
+++ b/src/GPU3D_Soft.cpp
@@ -1027,10 +1027,14 @@ void RenderPolygonScanline(RendererPolygon* rp, s32 y)
continue;
}
+ u32 dstattr = AttrBuffer[pixeladdr];
+
// if depth test against the topmost pixel fails, test
// against the pixel underneath
if (!fnDepthTest(DepthBuffer[pixeladdr], z))
{
+ if (!(dstattr & 0x3)) continue;
+
pixeladdr += 258;
if (!fnDepthTest(DepthBuffer[pixeladdr], z))
continue;
@@ -1096,7 +1100,6 @@ void RenderPolygonScanline(RendererPolygon* rp, s32 y)
}
else
{
- u32 dstattr = AttrBuffer[pixeladdr];
attr |= (1<<30);
if (polygon->IsShadow) dstattr |= (1<<30);
@@ -1148,10 +1151,14 @@ void RenderPolygonScanline(RendererPolygon* rp, s32 y)
continue;
}
+ u32 dstattr = AttrBuffer[pixeladdr];
+
// if depth test against the topmost pixel fails, test
// against the pixel underneath
if (!fnDepthTest(DepthBuffer[pixeladdr], z))
{
+ if (!(dstattr & 0x3)) continue;
+
pixeladdr += 258;
if (!fnDepthTest(DepthBuffer[pixeladdr], z))
continue;
@@ -1244,10 +1251,14 @@ void RenderPolygonScanline(RendererPolygon* rp, s32 y)
continue;
}
+ u32 dstattr = AttrBuffer[pixeladdr];
+
// if depth test against the topmost pixel fails, test
// against the pixel underneath
if (!fnDepthTest(DepthBuffer[pixeladdr], z))
{
+ if (!(dstattr & 0x3)) continue;
+
pixeladdr += 258;
if (!fnDepthTest(DepthBuffer[pixeladdr], z))
continue;
@@ -1313,7 +1324,6 @@ void RenderPolygonScanline(RendererPolygon* rp, s32 y)
}
else
{
- u32 dstattr = AttrBuffer[pixeladdr];
attr |= (1<<30);
if (polygon->IsShadow) dstattr |= (1<<30);