From 6661deeb24568ea24965bf04899b9a64cf91a38a Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 14 Nov 2014 17:44:20 +0000 Subject: [PATCH] Added use of GL_TRIANGLE_STRIP to cut down the size of the primitive indices required. git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/trunk@14476 16af8721-9629-0410-8352-f15c8da7e697 --- examples/osgterrain/ShaderTerrain.cpp | 54 ++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/examples/osgterrain/ShaderTerrain.cpp b/examples/osgterrain/ShaderTerrain.cpp index 704beb68c..cef871c93 100644 --- a/examples/osgterrain/ShaderTerrain.cpp +++ b/examples/osgterrain/ShaderTerrain.cpp @@ -241,6 +241,58 @@ osg::ref_ptr GeometryPool::getOrCreateGeometry(osgTerrain::Terrai } } +#if 1 + + bool smallTile = numVertices <= 16384; + osg::ref_ptr elements = smallTile ? + static_cast(new osg::DrawElementsUShort(GL_TRIANGLE_STRIP)) : + static_cast(new osg::DrawElementsUInt(GL_TRIANGLE_STRIP)); + + elements->reserveElements( (nx-1) * (ny-1) * 2 + (nx-1)*2*2 + (ny-1)*2*2 +(ny)*2); + geometry->addPrimitiveSet(elements.get()); + + + // first row containing the skirt + int il = 0; + int iu = 0; + for(int c=0; caddElement(iu); + elements->addElement(il); + } + elements->addElement(il); + + // center section + for(int r=0; raddElement(iu); + for(int c=0; caddElement(iu); + elements->addElement(il); + } + elements->addElement(il); + } + + // top row containing skirt + il = nx+(ny-1)*(nx+2)+1; + iu = il+nx+1; + elements->addElement(iu); + for(int c=0; caddElement(iu); + elements->addElement(il); + } + +#else bool smallTile = numVertices <= 16384; osg::ref_ptr elements = smallTile ? static_cast(new osg::DrawElementsUShort(GL_QUADS)) : @@ -285,7 +337,7 @@ osg::ref_ptr GeometryPool::getOrCreateGeometry(osgTerrain::Terrai elements->addElement(iu+1); elements->addElement(iu); } - +#endif if (locator) { matrix = locator->getTransform();