From: kgv Date: Tue, 9 Dec 2014 14:54:49 +0000 (+0400) Subject: 0025580: Visualization, TKOpenGl - create GLushort index buffer in OpenGl_Quadric... X-Git-Tag: V6_9_0_beta~224 X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=032c140ff158f4daf60214a5046e658cf7930533;p=occt.git 0025580: Visualization, TKOpenGl - create GLushort index buffer in OpenGl_Quadric::createArrays() when sufficient --- diff --git a/src/OpenGl/OpenGl_Quadric.cxx b/src/OpenGl/OpenGl_Quadric.cxx index 114e4af47d..edcf3d397b 100644 --- a/src/OpenGl/OpenGl_Quadric.cxx +++ b/src/OpenGl/OpenGl_Quadric.cxx @@ -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 (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 (aNbIndices)) + { + return Standard_False; + } + } + else if (!myIndices->Init (aNbIndices)) { return Standard_False; } @@ -93,12 +105,12 @@ Standard_Boolean OpenGl_Quadric::createArrays() const { for (Standard_Integer aV = 0; aV < myNbStacks; ++aV) { - myIndices->ChangeValue (++aLastIndex) = aU * (myNbStacks + 1) + aV; - myIndices->ChangeValue (++aLastIndex) = (aU + 1) * (myNbStacks + 1) + aV; - myIndices->ChangeValue (++aLastIndex) = (aU + 1) * (myNbStacks + 1) + (aV + 1); - myIndices->ChangeValue (++aLastIndex) = (aU + 1) * (myNbStacks + 1) + (aV + 1); - myIndices->ChangeValue (++aLastIndex) = aU * (myNbStacks + 1) + (aV + 1); - myIndices->ChangeValue (++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;