mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-07 03:13:49 +00:00
Fix issues in renderAndDrawTriangles.
Fixed regression with Paper Mario Lantern Ghost Boss Fight #2468
This commit is contained in:
parent
92c9bd8408
commit
e31b7b7045
|
@ -369,12 +369,6 @@ f32 renderAndDrawTriangles(const SPVertex *_pVertices,
|
||||||
Rasterize(vdraw, 3, dzdx);
|
Rasterize(vdraw, 3, dzdx);
|
||||||
};
|
};
|
||||||
|
|
||||||
auto calcMaxY = [&maxY](const vertexclip* pVtxClip)
|
|
||||||
{
|
|
||||||
for (u32 k = 0; k < 3; ++k)
|
|
||||||
maxY = std::max(maxY, pVtxClip[k].y);
|
|
||||||
};
|
|
||||||
|
|
||||||
for (u32 i = 0; i < _numElements; i += 3) {
|
for (u32 i = 0; i < _numElements; i += 3) {
|
||||||
u32 orbits = 0;
|
u32 orbits = 0;
|
||||||
u32 modify = 0;
|
u32 modify = 0;
|
||||||
|
@ -406,8 +400,10 @@ f32 renderAndDrawTriangles(const SPVertex *_pVertices,
|
||||||
|
|
||||||
if (needResterise)
|
if (needResterise)
|
||||||
rasterise(vclip, clockwise);
|
rasterise(vclip, clockwise);
|
||||||
else
|
else {
|
||||||
calcMaxY(vclip);
|
for (u32 k = 0; k < 3; ++k)
|
||||||
|
maxY = std::max(maxY, vclip[k].y);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
assert(modify == 0);
|
assert(modify == 0);
|
||||||
// No screen space coordinates, so use clipping in homogeneous space.
|
// No screen space coordinates, so use clipping in homogeneous space.
|
||||||
|
@ -421,8 +417,6 @@ f32 renderAndDrawTriangles(const SPVertex *_pVertices,
|
||||||
auto prevNumVtx = vResult.size();
|
auto prevNumVtx = vResult.size();
|
||||||
clipInHomogeneousSpace(vCopy, vResult);
|
clipInHomogeneousSpace(vCopy, vResult);
|
||||||
const size_t numVertex = vResult.size() - prevNumVtx;
|
const size_t numVertex = vResult.size() - prevNumVtx;
|
||||||
if (!needResterise)
|
|
||||||
continue;
|
|
||||||
if (numVertex == 0) {
|
if (numVertex == 0) {
|
||||||
_statistics.drawnTris--;
|
_statistics.drawnTris--;
|
||||||
_statistics.clippedTris++;
|
_statistics.clippedTris++;
|
||||||
|
@ -439,8 +433,13 @@ f32 renderAndDrawTriangles(const SPVertex *_pVertices,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t l = 0; l < numVertex; l += 3)
|
if (needResterise) {
|
||||||
rasterise(vclip.data() + l, clockwise);
|
for (size_t l = 0; l < numVertex; l += 3)
|
||||||
|
rasterise(vclip.data() + l, clockwise);
|
||||||
|
} else {
|
||||||
|
for (const vertexclip& v : vclip)
|
||||||
|
maxY = std::max(maxY, v.y);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user