]> OCCT Git - occt.git/commitdiff
0025580: Visualization, TKOpenGl - create GLushort index buffer in OpenGl_Quadric...
authorkgv <kgv@opencascade.com>
Tue, 9 Dec 2014 14:54:49 +0000 (18:54 +0400)
committerbugmaster <bugmaster@opencascade.com>
Thu, 25 Dec 2014 13:29:46 +0000 (16:29 +0300)
src/OpenGl/OpenGl_Quadric.cxx

index 114e4af47d0f39beb139a620c88a0735adbf2979..edcf3d397b6a695f7ff6a7f6fe4e402c2b65f893 100644 (file)
@@ -67,8 +67,20 @@ Standard_Boolean OpenGl_Quadric::createArrays() const
   Handle(NCollection_AlignedAllocator) anAlloc = new NCollection_AlignedAllocator (16);
   myAttribs = new Graphic3d_Buffer      (anAlloc);
   myIndices = new Graphic3d_IndexBuffer (anAlloc);
-  if (!myAttribs->Init (NbVertices(), anAttribsInfo, 2)
-   || !myIndices->Init<GLuint> (NbTriangles() * 3))
+  if (!myAttribs->Init (NbVertices(), anAttribsInfo, 2))
+  {
+    return Standard_False;
+  }
+
+  const Standard_Integer aNbIndices = NbTriangles() * 3;
+  if (aNbIndices < Standard_Integer(USHRT_MAX))
+  {
+    if (!myIndices->Init<GLushort> (aNbIndices))
+    {
+      return Standard_False;
+    }
+  }
+  else if (!myIndices->Init<GLuint> (aNbIndices))
   {
     return Standard_False;
   }
@@ -93,12 +105,12 @@ Standard_Boolean OpenGl_Quadric::createArrays() const
   {
     for (Standard_Integer aV = 0; aV < myNbStacks; ++aV)
     {
-      myIndices->ChangeValue<GLuint> (++aLastIndex) = aU       * (myNbStacks + 1) + aV;
-      myIndices->ChangeValue<GLuint> (++aLastIndex) = (aU + 1) * (myNbStacks + 1) + aV;
-      myIndices->ChangeValue<GLuint> (++aLastIndex) = (aU + 1) * (myNbStacks + 1) + (aV + 1);
-      myIndices->ChangeValue<GLuint> (++aLastIndex) = (aU + 1) * (myNbStacks + 1) + (aV + 1);
-      myIndices->ChangeValue<GLuint> (++aLastIndex) = aU       * (myNbStacks + 1) + (aV + 1);
-      myIndices->ChangeValue<GLuint> (++aLastIndex) = aU       * (myNbStacks + 1) + aV;
+      myIndices->SetIndex (++aLastIndex, aU       * (myNbStacks + 1) + aV);
+      myIndices->SetIndex (++aLastIndex, (aU + 1) * (myNbStacks + 1) + aV);
+      myIndices->SetIndex (++aLastIndex, (aU + 1) * (myNbStacks + 1) + (aV + 1));
+      myIndices->SetIndex (++aLastIndex, (aU + 1) * (myNbStacks + 1) + (aV + 1));
+      myIndices->SetIndex (++aLastIndex, aU       * (myNbStacks + 1) + (aV + 1));
+      myIndices->SetIndex (++aLastIndex, aU       * (myNbStacks + 1) + aV);
     }
   }
   return Standard_True;