DS GX: Fix degenerate spans

This commit is contained in:
Vicki Pfau 2017-02-28 19:28:05 -08:00
parent eabcb59514
commit 432f079f3a
1 changed files with 6 additions and 2 deletions

View File

@ -264,11 +264,12 @@ static void DSGXSoftwareRendererDrawScanline(struct DSGXRenderer* renderer, int
unsigned poly = edge->polyId;
struct DSGXSoftwareSpan* span = softwareRenderer->bucket[poly];
if (span) {
if (span && !span->ep[1].w) {
_edgeToSpan(span, edge, 1, y);
softwareRenderer->bucket[poly] = NULL;
} else {
} else if (!span) {
span = DSGXSoftwareSpanListAppend(&softwareRenderer->activeSpans);
memset(span, 0, sizeof(*span));
if (!_edgeToSpan(span, edge, 0, y)) {
// Horizontal line
DSGXSoftwareSpanListShift(&softwareRenderer->activeSpans, DSGXSoftwareSpanListSize(&softwareRenderer->activeSpans) - 1, 1);
@ -303,6 +304,9 @@ static void DSGXSoftwareRendererDrawScanline(struct DSGXRenderer* renderer, int
span = DSGXSoftwareSpanListGetPointer(&softwareRenderer->activeSpans, nextSpanId - 1);
nextSpanX = span->ep[0].x >> 12;
}
if (i < nextSpanX) {
span = NULL;
}
}
if (span) {
scanline[i] = _lerpColor(span, i);