mirror of
https://github.com/RetroDECK/Supermodel.git
synced 2024-11-29 17:15:40 +00:00
The real3d has a flag that allows the hw to skip polygons so that they aren't rendered. Sega rally2 uses this for the dust effects. Triangles or quads that have this flag are junk, and look like random corruption if you try to draw them. We assumed polys that shared vertices with these bad polygons were also bad. It turns out the last few shared vertices in these polys were in fact valid, and thus the entire quad/triangle strip should be drawn and not discarded.
This commit is contained in:
parent
a2fcbf8a3a
commit
21836c088c
|
@ -1022,7 +1022,6 @@ void CNew3D::CacheModel(Model *m, const UINT32 *data)
|
||||||
UINT16 texCoords[4][2];
|
UINT16 texCoords[4][2];
|
||||||
UINT16 prevTexCoords[4][2];
|
UINT16 prevTexCoords[4][2];
|
||||||
PolyHeader ph;
|
PolyHeader ph;
|
||||||
int numPolys = 0;
|
|
||||||
UINT64 lastHash = -1;
|
UINT64 lastHash = -1;
|
||||||
SortingMesh* currentMesh = nullptr;
|
SortingMesh* currentMesh = nullptr;
|
||||||
|
|
||||||
|
@ -1045,10 +1044,6 @@ void CNew3D::CacheModel(Model *m, const UINT32 *data)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ph.Disabled() || !numPolys && (ph.NumSharedVerts() != 0)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// create a hash value based on poly attributes -todo add more attributes
|
// create a hash value based on poly attributes -todo add more attributes
|
||||||
auto hash = ph.Hash();
|
auto hash = ph.Hash();
|
||||||
|
|
||||||
|
@ -1205,7 +1200,7 @@ void CNew3D::CacheModel(Model *m, const UINT32 *data)
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if we need double up vertices for two sided lighting
|
// check if we need double up vertices for two sided lighting
|
||||||
if (ph.DoubleSided()) {
|
if (ph.DoubleSided() && !ph.Disabled()) {
|
||||||
|
|
||||||
R3DPoly tempP = p;
|
R3DPoly tempP = p;
|
||||||
|
|
||||||
|
@ -1220,8 +1215,9 @@ void CNew3D::CacheModel(Model *m, const UINT32 *data)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy this polygon into the model buffer
|
// Copy this polygon into the model buffer
|
||||||
|
if (!ph.Disabled()) {
|
||||||
CopyVertexData(p, currentMesh->polys);
|
CopyVertexData(p, currentMesh->polys);
|
||||||
numPolys++;
|
}
|
||||||
|
|
||||||
// Copy current vertices into previous vertex array
|
// Copy current vertices into previous vertex array
|
||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
|
|
Loading…
Reference in a new issue