]> git.mxchange.org Git - simgear.git/commitdiff
Ignore winding order since it is ignored later anyway.
authorfrohlich <frohlich>
Sat, 7 Mar 2009 21:45:14 +0000 (21:45 +0000)
committerTim Moore <timoore@redhat.com>
Wed, 11 Mar 2009 19:06:56 +0000 (20:06 +0100)
Only emit fully defined primitives.

Modified Files:
simgear/scene/model/BoundingVolumeBuildVisitor.hxx

simgear/scene/model/BoundingVolumeBuildVisitor.hxx

index fd2fb8e7e6785aead8c8aa646ac304f0b9bd3753..ef4439218ce0a3f64034df574d909b3bfd3a9fc7 100644 (file)
@@ -98,70 +98,65 @@ public:
 
         virtual void drawArrays(GLenum mode, GLint first, GLsizei count)
         {
-            if (_vertices.empty() || count==0)
+            if (_vertices.empty() || count <= 0)
                 return;
 
+            GLsizei end = first + count;
             switch(mode) {
             case (GL_TRIANGLES):
-                for (GLsizei i = first; i < first + count; i += 3) {
+                for (GLsizei i = first; i < end - 2; i += 3) {
                     addTriangle(i, i + 1, i + 2);
                 }
                 break;
 
             case (GL_TRIANGLE_STRIP):
-                for (GLsizei i = 0; i < count; i += 3) {
-                    if (i%2)
-                        addTriangle(first + i, first + i + 2, first + i + 1);
-                    else
-                        addTriangle(first + i, first + i + 1, first + i + 2);
+                for (GLsizei i = first; i < end - 2; ++i) {
+                    addTriangle(i, i + 1, i + 2);
                 }
                 break;
 
             case (GL_QUADS):
-                for (GLsizei i = first; i < first + count; i += 4) {
+                for (GLsizei i = first; i < end - 3; i += 4) {
                     addQuad(i, i + 1, i + 2, i + 3);
                 }
                 break;
 
             case (GL_QUAD_STRIP):
-                for (GLsizei i = 0; i < count - 2; i += 2) {
-                    if (i%4)
-                        addQuad(first + i + 1, first + i, i + 3, first + i + 2);
-                    else
-                        addQuad(first + i, first + i + 1, first + i + 2, first + i + 3);
+                for (GLsizei i = first; i < end - 3; i += 2) {
+                    addQuad(i, i + 1, i + 2, i + 3);
                 }
                 break;
 
             case (GL_POLYGON): // treat polygons as GL_TRIANGLE_FAN
             case (GL_TRIANGLE_FAN):
-                for (GLsizei i = first + 2; i < first + count; ++i) {
-                    addTriangle(first, i - 1, i);
+                for (GLsizei i = first; i < end - 2; ++i) {
+                    addTriangle(first, i + 1, i + 2);
                 }
                 break;
 
             case (GL_POINTS):
-                for (GLsizei i = 0; i < count; ++i) {
-                    addPoint(first + i);
+                for (GLsizei i = first; i < end; ++i) {
+                    addPoint(i);
                 }
                 break;
 
             case (GL_LINES):
-                for (GLsizei i = first; i < first + count; i += 2) {
+                for (GLsizei i = first; i < end - 1; i += 2) {
                     addLine(i, i + 1);
                 }
                 break;
 
             case (GL_LINE_STRIP):
-                for (GLsizei i = first; i < first + count; ++i) {
+                for (GLsizei i = first; i < end - 1; ++i) {
                     addLine(i, i + 1);
                 }
                 break;
 
             case (GL_LINE_LOOP):
-                for (GLsizei i = first; i < first + count; ++i) {
+                for (GLsizei i = first; i < end - 1; ++i) {
                     addLine(i, i + 1);
                 }
-                addLine(first + count - 1, first);
+                addLine(end - 1, first);
                 break;
 
             default:
@@ -226,44 +221,38 @@ public:
         void drawElementsTemplate(GLenum mode, GLsizei count,
                                   const index_type* indices)
         {
-            if (_vertices.empty() || indices == 0 || count == 0)
+            if (_vertices.empty() || indices == 0 || count <= 0)
                 return;
     
             switch(mode) {
             case (GL_TRIANGLES):
-                for (GLsizei i = 0; i < count; i += 3) {
+                for (GLsizei i = 0; i < count - 2; i += 3) {
                     addTriangle(indices[i], indices[i + 1], indices[i + 2]);
                 }
                 break;
 
             case (GL_TRIANGLE_STRIP):
-                for (GLsizei i = 2; i < count; ++i) {
-                    if (i%2)
-                        addTriangle(indices[i - 2], indices[i], indices[i - 1]);
-                    else
-                        addTriangle(indices[i - 2], indices[i - 1], indices[i]);
+                for (GLsizei i = 0; i < count - 2; ++i) {
+                    addTriangle(indices[i], indices[i + 1], indices[i + 2]);
                 }
                 break;
 
             case (GL_QUADS):
-                for (GLsizei i = 0; i < count; i += 4) {
+                for (GLsizei i = 0; i < count - 3; i += 4) {
                     addQuad(indices[i], indices[i + 1], indices[i + 2], indices[i + 3]);
                 }
                 break;
 
             case (GL_QUAD_STRIP):
-                for (GLsizei i = 3; i < count; i += 2) {
-                    if (i%4)
-                        addQuad(indices[i - 2], indices[i - 3], indices[i], indices[i - 1]);
-                    else
-                        addQuad(indices[i - 3], indices[i - 2], indices[i - 1], indices[i]);
+                for (GLsizei i = 0; i < count - 3; i += 2) {
+                    addQuad(indices[i], indices[i + 1], indices[i + 2], indices[i + 3]);
                 }
                 break;
 
             case (GL_POLYGON):
             case (GL_TRIANGLE_FAN):
-                for (GLsizei i = 2; i < count; ++i) {
-                    addTriangle(indices[0], indices[i - 1], indices[i]);
+                for (GLsizei i = 0; i < count - 2; ++i) {
+                    addTriangle(indices[0], indices[i + 1], indices[i + 2]);
                 }
                 break;
 
@@ -274,19 +263,19 @@ public:
                 break;
 
             case (GL_LINES):
-                for (GLsizei i = 0; i < count; i += 2) {
+                for (GLsizei i = 0; i < count - 1; i += 2) {
                     addLine(indices[i], indices[i + 1]);
                 }
                 break;
 
             case (GL_LINE_STRIP):
-                for (GLsizei i = 0; i < count; ++i) {
+                for (GLsizei i = 0; i < count - 1; ++i) {
                     addLine(indices[i], indices[i + 1]);
                 }
                 break;
 
             case (GL_LINE_LOOP):
-                for (GLsizei i = 0; i < count; ++i) {
+                for (GLsizei i = 0; i < count - 1; ++i) {
                     addLine(indices[i], indices[i + 1]);
                 }
                 addLine(indices[count - 1], indices[0]);