16 #include <vlutil/vlPrint.h>
18 #include <osg/Geometry>
23 #include <tbb/atomic.h>
54 virtual bool checkSrcAndDstIndicesOk(
const osg::Geometry& geometry);
57 virtual void copyIndices(std::vector<int>& indices,
const osg::Geometry& geometry);
61 virtual void cancel();
69 virtual std::string toModeString(
GLenum mode);
73 static int calculateNumIndices(
const osg::PrimitiveSet* primitiveSet);
78 virtual bool checkAndCopyIndicesIfTriangleElements(std::vector<int>& indices,
const osg::PrimitiveSet* primitiveSet);
81 virtual bool checkAndCopyIndicesIfDrawArrays(std::vector<int>& indices,
const osg::PrimitiveSet* primitiveSet);
84 virtual void printDetailsPrimitiveSets(
const osg::Geometry& geometry);
91 bool copyIndicesOnMatch(std::vector<int>& indices,
const osg::PrimitiveSet* primitiveSet);
106 const T* primitiveSetT =
dynamic_cast<const T*
>(primitiveSet);
107 if (primitiveSetT == 0)
115 DtWarn <<
"Info: " << __FILE__ <<
" +" << __LINE__ <<
" " << __FUNCTION__ <<
" mode is: " <<
toModeString(mode) <<
", skipping" << std::endl;
119 indices.reserve(indices.size() + primitiveSetT->size());
120 if (mode == GL_TRIANGLES)
122 indices.insert(indices.end(), primitiveSetT->begin(), primitiveSetT->end());
125 else if (mode == GL_TRIANGLE_FAN)
129 int numTriangles = primitiveSetT->size() - 2;
131 int i0 = primitiveSetT->at(0);
133 for (
int i = 0; i < numTriangles; ++i)
135 int i1 = primitiveSetT->at(i + 1);
136 int i2 = primitiveSetT->at(i + 2);
138 indices.push_back(i0);
139 indices.push_back(i1);
140 indices.push_back(i2);
143 else if (mode == GL_TRIANGLE_STRIP)
146 int numTriangles = primitiveSetT->size() - 2;
147 for (
int i = 0; i < numTriangles; ++i)
149 int i0 = primitiveSetT->at(i);
150 int i1 = primitiveSetT->at(i + 1);
151 int i2 = primitiveSetT->at(i + 2);
155 indices.push_back(i0);
156 indices.push_back(i1);
157 indices.push_back(i2);
161 indices.push_back(i1);
162 indices.push_back(i0);
163 indices.push_back(i2);
167 else if (mode == GL_QUADS)
169 int count = primitiveSetT->size();
171 int numQuads = count / 4;
172 for (
int quad = 0; quad < numQuads; ++quad)
174 int q0 = primitiveSetT->at(quad) * 4 + 0;
175 int q1 = primitiveSetT->at(quad) * 4 + 1;
176 int q2 = primitiveSetT->at(quad) * 4 + 2;
177 int q3 = primitiveSetT->at(quad) * 4 + 3;
179 indices.push_back(q0);
180 indices.push_back(q1);
181 indices.push_back(q2);
183 indices.push_back(q0);
184 indices.push_back(q2);
185 indices.push_back(q3);
tbb::atomic< int > myCancelTask
Definition: DtIndirectAggregateIndicesHelper.h:100
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
osg::ref_ptr< osg::Geometry > myAggregatedGeometry
Definition: DtIndirectAggregateIndicesHelper.h:98
bool copyIndicesOnMatch(std::vector< int > &indices, const osg::PrimitiveSet *primitiveSet)
templated function used to copy indices that are a DrawElements vector.
Definition: DtIndirectAggregateIndicesHelper.h:104
helper class for DtIndirectAggregateHelper which checks and copies indices from a geometry ...
Definition: DtIndirectAggregateIndicesHelper.h:34
virtual std::string toModeString(GLenum mode)
helper function for converting from a GLenum to a string that contains the GLenum.
unsigned int GLenum
Definition: DtGlTextureBufferObject.h:18
const char int mode
Definition: ioapi.h:38
Contains DLL export macros.
#define ASSERT_PREDICATE(p)
Definition: DtAssert.h:28
virtual bool isModeSupported(GLenum mode)
helper function for checking if a mode is supported by this helper/indirect
const std::string myModelFileName
Definition: DtIndirectAggregateIndicesHelper.h:96