diff --git a/src/GPU3D.cpp b/src/GPU3D.cpp index 4a1426aa..683bc722 100644 --- a/src/GPU3D.cpp +++ b/src/GPU3D.cpp @@ -849,6 +849,8 @@ int ClipAgainstPlane(const GPU3D& gpu, Vertex* vertices, int nverts, int clipsta temp[1] = vertices[1]; } + Vertex holdit; + bool heldit = false; for (int i = clipstart; i < nverts; i++) { prev = i-1; if (prev < 0) prev = nverts-1; @@ -862,8 +864,16 @@ int ClipAgainstPlane(const GPU3D& gpu, Vertex* vertices, int nverts, int clipsta Vertex* vprev = &vertices[prev]; if (vprev->Position[comp] <= vprev->Position[3]) { - ClipSegment(&temp[c], &vtx, vprev); - c++; + if (i == 0) + { + ClipSegment(&holdit, &vtx, vprev); + heldit = true; + } + else + { + ClipSegment(&temp[c], &vtx, vprev); + c++; + } } Vertex* vnext = &vertices[next]; @@ -877,6 +887,12 @@ int ClipAgainstPlane(const GPU3D& gpu, Vertex* vertices, int nverts, int clipsta temp[c++] = vtx; } + if (heldit) + { + temp[c++] = holdit; + } + heldit = false; + nverts = c; c = clipstart; for (int i = clipstart; i < nverts; i++) { @@ -889,8 +905,17 @@ int ClipAgainstPlane(const GPU3D& gpu, Vertex* vertices, int nverts, int clipsta Vertex* vprev = &temp[prev]; if (vprev->Position[comp] >= -vprev->Position[3]) { - ClipSegment(&vertices[c], &vtx, vprev); - c++; + + if (i == 0) + { + ClipSegment(&holdit, &vtx, vprev); + heldit = true; + } + else + { + ClipSegment(&vertices[c], &vtx, vprev); + c++; + } } Vertex* vnext = &temp[next]; @@ -903,6 +928,11 @@ int ClipAgainstPlane(const GPU3D& gpu, Vertex* vertices, int nverts, int clipsta else vertices[c++] = vtx; } + + if (heldit) + { + vertices[c++] = holdit; + } // checkme for (int i = 0; i < c; i++)