fix crapoed shadows
This commit is contained in:
parent
911888f1e0
commit
a63ab24447
|
@ -751,11 +751,6 @@ void SubmitPolygon()
|
||||||
poly->Translucent = ((texfmt == 1 || texfmt == 6) && !(CurPolygonAttr & 0x10)) || (polyalpha > 0 && polyalpha < 31);
|
poly->Translucent = ((texfmt == 1 || texfmt == 6) && !(CurPolygonAttr & 0x10)) || (polyalpha > 0 && polyalpha < 31);
|
||||||
|
|
||||||
poly->IsShadowMask = ((CurPolygonAttr & 0x3F000030) == 0x00000030);
|
poly->IsShadowMask = ((CurPolygonAttr & 0x3F000030) == 0x00000030);
|
||||||
if ((NumPolygons == 1) || (!CurPolygonRAM[NumPolygons-2].IsShadowMask))
|
|
||||||
poly->ClearStencil = poly->IsShadowMask;
|
|
||||||
else
|
|
||||||
poly->ClearStencil = false;
|
|
||||||
|
|
||||||
poly->IsShadow = ((CurPolygonAttr & 0x30) == 0x30) && !poly->IsShadowMask;
|
poly->IsShadow = ((CurPolygonAttr & 0x30) == 0x30) && !poly->IsShadowMask;
|
||||||
|
|
||||||
if (LastStripPolygon && clipstart > 0)
|
if (LastStripPolygon && clipstart > 0)
|
||||||
|
|
|
@ -62,7 +62,6 @@ typedef struct
|
||||||
|
|
||||||
bool IsShadowMask;
|
bool IsShadowMask;
|
||||||
bool IsShadow;
|
bool IsShadow;
|
||||||
bool ClearStencil;
|
|
||||||
|
|
||||||
// data below rather specific to the software renderer
|
// data below rather specific to the software renderer
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,7 @@ u32 AttrBuffer[256*192];
|
||||||
// bit30: translucent flag
|
// bit30: translucent flag
|
||||||
|
|
||||||
u8 StencilBuffer[256*2];
|
u8 StencilBuffer[256*2];
|
||||||
|
bool PrevIsShadowMask;
|
||||||
|
|
||||||
// threading
|
// threading
|
||||||
|
|
||||||
|
@ -84,6 +85,8 @@ void Reset()
|
||||||
memset(DepthBuffer, 0, 256*192 * 4);
|
memset(DepthBuffer, 0, 256*192 * 4);
|
||||||
memset(AttrBuffer, 0, 256*192 * 4);
|
memset(AttrBuffer, 0, 256*192 * 4);
|
||||||
|
|
||||||
|
PrevIsShadowMask = false;
|
||||||
|
|
||||||
// TODO: make it configurable
|
// TODO: make it configurable
|
||||||
if (!RenderThreadRunning)
|
if (!RenderThreadRunning)
|
||||||
{
|
{
|
||||||
|
@ -803,9 +806,11 @@ void RenderPolygonScanline(RendererPolygon* rp, s32 y)
|
||||||
else
|
else
|
||||||
fnDepthTest = DepthTest<false>;
|
fnDepthTest = DepthTest<false>;
|
||||||
|
|
||||||
if (polygon->ClearStencil)
|
if (polygon->IsShadowMask && !PrevIsShadowMask)
|
||||||
memset(&StencilBuffer[256 * (y&0x1)], 0, 256);
|
memset(&StencilBuffer[256 * (y&0x1)], 0, 256);
|
||||||
|
|
||||||
|
PrevIsShadowMask = polygon->IsShadowMask;
|
||||||
|
|
||||||
if (polygon->YTop != polygon->YBottom)
|
if (polygon->YTop != polygon->YBottom)
|
||||||
{
|
{
|
||||||
if (y >= polygon->Vertices[rp->NextVL]->FinalPosition[1] && rp->CurVL != polygon->VBottom)
|
if (y >= polygon->Vertices[rp->NextVL]->FinalPosition[1] && rp->CurVL != polygon->VBottom)
|
||||||
|
|
Loading…
Reference in New Issue