16 #include <vlutil/vlPrint.h>
18 #include <osg/Geometry>
23 #include <tbb/atomic.h>
42 virtual bool checkSrcAndDstIndicesOk(
const osg::Geometry& geometry);
45 virtual void copyIndices(std::vector<int>& indices,
const osg::Geometry& geometry);
48 static int calculateNumIndices(
const osg::PrimitiveSet* primitiveSet);
52 virtual void cancel();
65 virtual bool checkAndCopyIndicesIfTriangleElements(std::vector<int>& indices,
const osg::PrimitiveSet* primitiveSet);
68 virtual bool checkAndCopyIndicesIfDrawArrays(std::vector<int>& indices,
const osg::PrimitiveSet* primitiveSet);
73 virtual void printDetailsPrimitiveSets(
const osg::Geometry& geometry);
80 bool copyIndicesOnMatch(std::vector<int>& indices,
const osg::PrimitiveSet* primitiveSet);
95 const T* primitiveSetT =
dynamic_cast<const T*
>(primitiveSet);
96 if (primitiveSetT == 0)
104 DtWarn <<
"Info: " << __FILE__ <<
" +" << __LINE__ <<
" " << __FUNCTION__ <<
" mode is: " <<
toModeString(mode) <<
", skipping" << std::endl;
108 indices.reserve(indices.size() + primitiveSetT->size());
109 if (mode == GL_TRIANGLES)
111 indices.insert(indices.end(), primitiveSetT->begin(), primitiveSetT->end());
114 else if (mode == GL_TRIANGLE_FAN)
118 int numTriangles = primitiveSetT->size() - 2;
120 int i0 = primitiveSetT->at(0);
122 for (
int i = 0; i < numTriangles; ++i)
124 int i1 = primitiveSetT->at(i + 1);
125 int i2 = primitiveSetT->at(i + 2);
127 indices.push_back(i0);
128 indices.push_back(i1);
129 indices.push_back(i2);
132 else if (mode == GL_TRIANGLE_STRIP)
135 int numTriangles = primitiveSetT->size() - 2;
136 for (
int i = 0; i < numTriangles; ++i)
138 int i0 = primitiveSetT->at(i);
139 int i1 = primitiveSetT->at(i + 1);
140 int i2 = primitiveSetT->at(i + 2);
144 indices.push_back(i0);
145 indices.push_back(i1);
146 indices.push_back(i2);
150 indices.push_back(i1);
151 indices.push_back(i0);
152 indices.push_back(i2);
156 else if (mode == GL_QUADS)
158 int count = primitiveSetT->size();
160 int numQuads = count / 4;
161 for (
int quad = 0; quad < numQuads; ++quad)
163 int q0 = primitiveSetT->at(quad) * 4 + 0;
164 int q1 = primitiveSetT->at(quad) * 4 + 1;
165 int q2 = primitiveSetT->at(quad) * 4 + 2;
166 int q3 = primitiveSetT->at(quad) * 4 + 3;
168 indices.push_back(q0);
169 indices.push_back(q1);
170 indices.push_back(q2);
172 indices.push_back(q0);
173 indices.push_back(q2);
174 indices.push_back(q3);
tbb::atomic< int > myCancelTask
Definition: DtIndirectAggregateIndicesHelper.h:89
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
osg::ref_ptr< osg::Geometry > myAggregatedGeometry
Definition: DtIndirectAggregateIndicesHelper.h:87
bool copyIndicesOnMatch(std::vector< int > &indices, const osg::PrimitiveSet *primitiveSet)
templated function used to copy indicies that are a DrawElements vector.
Definition: DtIndirectAggregateIndicesHelper.h:93
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
virtual ~DtIndirectAggregateIndicesHelper()
Definition: DtIndirectAggregateIndicesHelper.h:39
const std::string myModelFileName
Definition: DtIndirectAggregateIndicesHelper.h:85