mirror of https://github.com/mgba-emu/mgba.git
DS GX: Fix degenerate spans
This commit is contained in:
parent
eabcb59514
commit
432f079f3a
|
@ -264,11 +264,12 @@ static void DSGXSoftwareRendererDrawScanline(struct DSGXRenderer* renderer, int
|
||||||
|
|
||||||
unsigned poly = edge->polyId;
|
unsigned poly = edge->polyId;
|
||||||
struct DSGXSoftwareSpan* span = softwareRenderer->bucket[poly];
|
struct DSGXSoftwareSpan* span = softwareRenderer->bucket[poly];
|
||||||
if (span) {
|
if (span && !span->ep[1].w) {
|
||||||
_edgeToSpan(span, edge, 1, y);
|
_edgeToSpan(span, edge, 1, y);
|
||||||
softwareRenderer->bucket[poly] = NULL;
|
softwareRenderer->bucket[poly] = NULL;
|
||||||
} else {
|
} else if (!span) {
|
||||||
span = DSGXSoftwareSpanListAppend(&softwareRenderer->activeSpans);
|
span = DSGXSoftwareSpanListAppend(&softwareRenderer->activeSpans);
|
||||||
|
memset(span, 0, sizeof(*span));
|
||||||
if (!_edgeToSpan(span, edge, 0, y)) {
|
if (!_edgeToSpan(span, edge, 0, y)) {
|
||||||
// Horizontal line
|
// Horizontal line
|
||||||
DSGXSoftwareSpanListShift(&softwareRenderer->activeSpans, DSGXSoftwareSpanListSize(&softwareRenderer->activeSpans) - 1, 1);
|
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);
|
span = DSGXSoftwareSpanListGetPointer(&softwareRenderer->activeSpans, nextSpanId - 1);
|
||||||
nextSpanX = span->ep[0].x >> 12;
|
nextSpanX = span->ep[0].x >> 12;
|
||||||
}
|
}
|
||||||
|
if (i < nextSpanX) {
|
||||||
|
span = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (span) {
|
if (span) {
|
||||||
scanline[i] = _lerpColor(span, i);
|
scanline[i] = _lerpColor(span, i);
|
||||||
|
|
Loading…
Reference in New Issue