OpenSceneGraph 3.6.5
PrimitiveSetIndirect
Go to the documentation of this file.
1/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2 *
3 * This library is open source and may be redistributed and/or modified under
4 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5 * (at your option) any later version. The full license is in LICENSE file
6 * included with this distribution, and on the openscenegraph.org website.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * OpenSceneGraph Public License for more details.
12 *
13 * osg/PrimitiveSetIndirect
14 * Author: Julien Valentin 2016-2017
15*/
16
17#ifndef OSG_INDIRECTPRIMITIVESET
18#define OSG_INDIRECTPRIMITIVESET 1
19
20#include <osg/PrimitiveSet>
21
22
23namespace osg {
24
27{
28public:
30
31 IndirectCommandDrawArrays(const IndirectCommandDrawArrays& copy,const CopyOp& copyop/*=CopyOp::SHALLOW_COPY*/) :
32 BufferData(copy, copyop) {}
33
34 virtual unsigned int getTotalDataSize() const { return getNumElements()*getElementSize(); }
35
36 virtual unsigned int & count(const unsigned int&index)=0;
37 virtual unsigned int & instanceCount(const unsigned int&index)=0;
38 virtual unsigned int & first(const unsigned int&index)=0;
39 virtual unsigned int & baseInstance(const unsigned int&index)=0;
40
41 virtual unsigned int getElementSize() const = 0;
42 virtual unsigned int getNumElements() const = 0;
43 virtual void reserveElements(const unsigned int) = 0;
44 virtual void resizeElements(const unsigned int) = 0;
45};
46
48{
49public:
51
52 IndirectCommandDrawElements(const IndirectCommandDrawElements& copy,const CopyOp& copyop/*=CopyOp::SHALLOW_COPY*/)
53 : BufferData(copy, copyop) {}
54
55 virtual unsigned int getTotalDataSize() const { return getNumElements()*getElementSize(); }
56
57 virtual unsigned int & count(const unsigned int&index)=0;
58 virtual unsigned int & instanceCount(const unsigned int&index)=0;
59 virtual unsigned int & firstIndex(const unsigned int&index)=0;
60 virtual unsigned int & baseVertex(const unsigned int&index)=0;
61 virtual unsigned int & baseInstance(const unsigned int&index)=0;
62
63 virtual unsigned int getElementSize()const = 0;
64 virtual unsigned int getNumElements() const = 0;
65 virtual void reserveElements(const unsigned int) = 0;
66 virtual void resizeElements(const unsigned int) = 0;
67};
68
69
70
73{
74 DrawArraysIndirectCommand(unsigned int pcount = 0, unsigned int pinstanceCount = 0, unsigned int pfirst = 0, unsigned int pbaseInstance = 0) :
75 count(pcount), instanceCount(pinstanceCount), first(pfirst), baseInstance(pbaseInstance) {}
76
77 unsigned int count;
78 unsigned int instanceCount;
79 unsigned int first;
80 unsigned int baseInstance;
81};
82
85class DefaultIndirectCommandDrawArrays: public IndirectCommandDrawArrays, public MixinVector<DrawArraysIndirectCommand>
86{
87public:
93
94 virtual const GLvoid* getDataPointer() const { return empty()?0:&front(); }
95 virtual unsigned int getElementSize()const { return 16u; };
96 virtual unsigned int getNumElements() const { return static_cast<unsigned int>(size()); }
97 virtual void reserveElements(const unsigned int n) {reserve(n);}
98 virtual void resizeElements(const unsigned int n) {resize(n);}
99
100 virtual unsigned int & count(const unsigned int&index) { return at(index).count; }
101 virtual unsigned int & instanceCount(const unsigned int&index) { return at(index).instanceCount; }
102 virtual unsigned int & first(const unsigned int&index) { return at(index).first; }
103 virtual unsigned int & baseInstance(const unsigned int&index) { return at(index).baseInstance; }
104
105};
106
107
111{
112 DrawElementsIndirectCommand(unsigned int pcount = 0, unsigned int pinstanceCount = 0, unsigned int pfirstIndex = 0, unsigned int pbaseVertex = 0, unsigned int pbaseInstance = 0) :
113 count(pcount), instanceCount(pinstanceCount), firstIndex(pfirstIndex), baseVertex(pbaseVertex), baseInstance(pbaseInstance) {}
114
115 unsigned int count;
116 unsigned int instanceCount;
117 unsigned int firstIndex;
118 unsigned int baseVertex;
119 unsigned int baseInstance;
120};
121
123class DefaultIndirectCommandDrawElements: public IndirectCommandDrawElements, public MixinVector<DrawElementsIndirectCommand>
124{
125public:
129
132
133 virtual const GLvoid* getDataPointer() const { return empty()?0:&front(); }
134 virtual unsigned int getNumElements() const { return static_cast<unsigned int>(size()); }
135 virtual unsigned int getElementSize()const { return 20u; };
136 virtual void reserveElements(const unsigned int n) {reserve(n);}
137 virtual void resizeElements(const unsigned int n) {resize(n);}
138
139 virtual unsigned int & count(const unsigned int&index) { return at(index).count; }
140 virtual unsigned int & instanceCount(const unsigned int&index) { return at(index).instanceCount; }
141 virtual unsigned int & firstIndex(const unsigned int&index) { return at(index).firstIndex; }
142 virtual unsigned int & baseVertex(const unsigned int&index) { return at(index).baseVertex; }
143 virtual unsigned int & baseInstance(const unsigned int&index) { return at(index).baseInstance; }
144
145
146};
147
152{
153public:
154
155 DrawElementsIndirect(Type primType=PrimitiveType, GLenum mode = 0,unsigned int firstCommand = 0, GLsizei stride = 0) :
156 DrawElements(primType,mode, 0),_firstCommand(firstCommand),_stride(stride) { setIndirectCommandArray(new DefaultIndirectCommandDrawElements()); }
157
160
163 {
165 //ensure bo of idc is of the correct type
166 if(!dynamic_cast<DrawIndirectBufferObject* >(_indirectCommandArray->getBufferObject()))
167 _indirectCommandArray->setBufferObject(new DrawIndirectBufferObject());
168 }
169
173
176
178 inline void setFirstCommandToDraw( unsigned int i) { _firstCommand = i; }
179
181 inline unsigned int getFirstCommandToDraw() const { return _firstCommand; }
182
184 inline void setStride( GLsizei i) { _stride=i; }
185
187 inline GLsizei getStride() const { return _stride; }
188
189 virtual unsigned int getNumPrimitives() const=0;
190
191protected:
193
194 unsigned int _firstCommand;
195 GLsizei _stride;
197};
198
203{
204public:
205
207
208 DrawElementsIndirectUByte(GLenum mode = 0/*,unsigned int firstCommand = 0, GLsizei stride = 0*/) :
210
214
220 DrawElementsIndirectUByte(GLenum mode, unsigned int no, const GLubyte* ptr) :
222 vector_type(ptr,ptr+no) {}
223
231
232 virtual Object* cloneType() const { return new DrawElementsIndirectUByte(); }
233 virtual Object* clone(const CopyOp& copyop) const { return new DrawElementsIndirectUByte(*this,copyop); }
234 virtual bool isSameKindAs(const Object* obj) const { return dynamic_cast<const DrawElementsIndirectUByte*>(obj)!=NULL; }
235 virtual const char* libraryName() const { return "osg"; }
236 virtual const char* className() const { return "DrawElementsIndirectUByte"; }
237
238 virtual const GLvoid* getDataPointer() const { return empty()?0:&front(); }
239 virtual unsigned int getTotalDataSize() const { return static_cast<unsigned int>(size()); }
240 virtual bool supportsBufferObject() const { return false; }
241
242 virtual void draw(State& state, bool useVertexBufferObjects) const;
243
244 virtual void accept(PrimitiveFunctor& functor) const;
245 virtual void accept(PrimitiveIndexFunctor& functor) const;
246
247 virtual unsigned int getNumIndices() const { return static_cast<unsigned int>(size()); }
248 virtual unsigned int index(unsigned int pos) const { return (*this)[pos]; }
249 virtual void offsetIndices(int offset);
250
251 virtual GLenum getDataType() { return GL_UNSIGNED_BYTE; }
252
253 virtual void resizeElements(unsigned int numIndices) { resize(numIndices); }
254 virtual void reserveElements(unsigned int numIndices) { reserve(numIndices); }
255
256 virtual void setElement(unsigned int i, unsigned int v) { (*this)[i] = v; }
257 virtual unsigned int getElement(unsigned int i) { return (*this)[i]; }
258
259 virtual void addElement(unsigned int v) { push_back(GLubyte(v)); }
260 virtual unsigned int getNumPrimitives() const;
261
262protected:
263
265};
266
267
272{
273public:
274
276
277 DrawElementsIndirectUShort(GLenum mode = 0/*,unsigned int firstCommand = 0, GLsizei stride = 0*/) :
279
283
289 DrawElementsIndirectUShort(GLenum mode, unsigned int no, const GLushort* ptr) :
291 vector_type(ptr,ptr+no) {}
292
300
301 template <class InputIterator>
302 DrawElementsIndirectUShort(GLenum mode, InputIterator first,InputIterator last) :
304 vector_type(first,last) {}
305
306 virtual Object* cloneType() const { return new DrawElementsIndirectUShort(); }
307 virtual Object* clone(const CopyOp& copyop) const { return new DrawElementsIndirectUShort(*this,copyop); }
308 virtual bool isSameKindAs(const Object* obj) const { return dynamic_cast<const DrawElementsIndirectUShort*>(obj)!=NULL; }
309 virtual const char* libraryName() const { return "osg"; }
310 virtual const char* className() const { return "DrawElementsIndirectUShort"; }
311
312 virtual const GLvoid* getDataPointer() const { return empty()?0:&front(); }
313 virtual unsigned int getTotalDataSize() const { return 2u*static_cast<unsigned int>(size()); }
314 virtual bool supportsBufferObject() const { return false; }
315
316 virtual void draw(State& state, bool useVertexBufferObjects) const;
317
318 virtual void accept(PrimitiveFunctor& functor) const;
319 virtual void accept(PrimitiveIndexFunctor& functor) const;
320
321 virtual unsigned int getNumIndices() const { return static_cast<unsigned int>(size()); }
322 virtual unsigned int index(unsigned int pos) const { return (*this)[pos]; }
323 virtual void offsetIndices(int offset);
324
325 virtual GLenum getDataType() { return GL_UNSIGNED_SHORT; }
326 virtual void resizeElements(unsigned int numIndices) { resize(numIndices); }
327 virtual void reserveElements(unsigned int numIndices) { reserve(numIndices); }
328
329 virtual void setElement(unsigned int i, unsigned int v) { (*this)[i] = v; }
330 virtual unsigned int getElement(unsigned int i) { return (*this)[i]; }
331
332 virtual void addElement(unsigned int v) { push_back(GLushort(v)); }
333 virtual unsigned int getNumPrimitives() const;
334
335protected:
336
338};
339
344{
345public:
346
348
349 DrawElementsIndirectUInt(GLenum mode = 0/*,unsigned int firstCommand = 0, GLsizei stride = 0*/) :
351
355
361 DrawElementsIndirectUInt(GLenum mode, unsigned int no, const GLuint* ptr) :
363 vector_type(ptr,ptr+no) {}
364
372
373 template <class InputIterator>
374 DrawElementsIndirectUInt(GLenum mode, InputIterator first,InputIterator last) :
376 vector_type(first,last) {}
377
378 virtual Object* cloneType() const { return new DrawElementsIndirectUInt(); }
379 virtual Object* clone(const CopyOp& copyop) const { return new DrawElementsIndirectUInt(*this,copyop); }
380 virtual bool isSameKindAs(const Object* obj) const { return dynamic_cast<const DrawElementsIndirectUInt*>(obj)!=NULL; }
381 virtual const char* libraryName() const { return "osg"; }
382 virtual const char* className() const { return "DrawElementsIndirectUInt"; }
383
384 virtual const GLvoid* getDataPointer() const { return empty()?0:&front(); }
385 virtual unsigned int getTotalDataSize() const { return 4u*static_cast<unsigned int>(size()); }
386 virtual bool supportsBufferObject() const { return false; }
387
388 virtual void draw(State& state, bool useVertexBufferObjects) const;
389
390 virtual void accept(PrimitiveFunctor& functor) const;
391 virtual void accept(PrimitiveIndexFunctor& functor) const;
392
393 virtual unsigned int getNumIndices() const { return static_cast<unsigned int>(size()); }
394 virtual unsigned int index(unsigned int pos) const { return (*this)[pos]; }
395 virtual void offsetIndices(int offset);
396
397 virtual GLenum getDataType() { return GL_UNSIGNED_INT; }
398 virtual void resizeElements(unsigned int numIndices) { resize(numIndices); }
399 virtual void reserveElements(unsigned int numIndices) { reserve(numIndices); }
400 virtual void setElement(unsigned int i, unsigned int v) { (*this)[i] = v; }
401 virtual unsigned int getElement(unsigned int i) { return (*this)[i]; }
402 virtual void addElement(unsigned int v) { push_back(GLuint(v)); }
403
404 virtual unsigned int getNumPrimitives() const;
405
406protected:
407
409};
410
415{
416public:
417 MultiDrawElementsIndirectUShort(GLenum mode = 0/*,unsigned int firstCommand = 0, GLsizei stride = 0*/) :
419 _count(0)
420 {
422 }
423
429
435 MultiDrawElementsIndirectUShort(GLenum mode, unsigned int no, const GLushort* ptr) :
436 DrawElementsIndirectUShort(mode,no,ptr),
437 _count(0)
438 {
440 }
441
452
453 template <class InputIterator>
454 MultiDrawElementsIndirectUShort(GLenum mode, InputIterator first,InputIterator last) :
455 DrawElementsIndirectUShort(mode,first,last),
456 _count(0)
457 {
459 }
460
461 virtual osg::Object* cloneType() const { return new MultiDrawElementsIndirectUShort(); }
462 virtual osg::Object* clone(const osg::CopyOp& copyop) const { return new MultiDrawElementsIndirectUShort(*this,copyop); }
463 virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast<const MultiDrawElementsIndirectUShort*>(obj)!=NULL; }
464 virtual const char* className() const { return "MultiDrawElementsIndirectUShort"; }
465
466 virtual void draw(State& state, bool useVertexBufferObjects) const;
467 virtual void accept(PrimitiveFunctor& functor) const;
468 virtual void accept(PrimitiveIndexFunctor& functor) const;
469 virtual unsigned int getNumPrimitives() const;
470
472
474 inline void setNumCommandsToDraw( unsigned int i) { _count=i; }
476 inline unsigned int getNumCommandsToDraw()const { return _count; }
477
478protected:
479 unsigned int _count;
481};
482
484{
485public:
493
499
505 MultiDrawElementsIndirectUByte(GLenum mode, unsigned int no, const GLubyte* ptr) :
506 DrawElementsIndirectUByte(mode,no,ptr),
507 _count(0)
508 {
510 }
511
522
523 template <class InputIterator>
524 MultiDrawElementsIndirectUByte(GLenum mode, InputIterator first,InputIterator last) :
525 DrawElementsIndirectUByte(mode,first,last),
526 _count(0)
527 {
529 }
530
531 virtual osg::Object* cloneType() const { return new MultiDrawElementsIndirectUByte(); }
532 virtual osg::Object* clone(const osg::CopyOp& copyop) const { return new MultiDrawElementsIndirectUByte(*this,copyop); }
533 virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast<const MultiDrawElementsIndirectUByte*>(obj)!=NULL; }
534 virtual const char* className() const { return "MultiDrawElementsIndirectUByte"; }
535
536 virtual void draw(State& state, bool useVertexBufferObjects) const;
537 virtual void accept(PrimitiveFunctor& functor) const;
538 virtual void accept(PrimitiveIndexFunctor& functor) const;
539 virtual unsigned int getNumPrimitives() const;
540
542 inline void setNumCommandsToDraw( unsigned int i) { _count=i; }
544 inline unsigned int getNumCommandsToDraw()const { return _count; }
545
546protected:
547 unsigned int _count;
549};
550
552{
553public:
560
565
571 MultiDrawElementsIndirectUInt(GLenum mode, unsigned int no, const GLuint* ptr) :
572 DrawElementsIndirectUInt(mode,no,ptr),
573 _count(0)
574 {
576 }
577
588
589 template <class InputIterator>
590 MultiDrawElementsIndirectUInt(GLenum mode, InputIterator first,InputIterator last) :
591 DrawElementsIndirectUInt(mode,first,last),
592 _count(0)
593 {
595 }
596
597 virtual osg::Object* cloneType() const { return new MultiDrawElementsIndirectUInt(); }
598 virtual osg::Object* clone(const osg::CopyOp& copyop) const { return new MultiDrawElementsIndirectUInt(*this,copyop); }
599 virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast<const MultiDrawElementsIndirectUInt*>(obj)!=NULL; }
600 virtual const char* className() const { return "MultiDrawElementsIndirectUInt"; }
601
602 virtual void draw(State& state, bool useVertexBufferObjects) const;
603 virtual void accept(PrimitiveFunctor& functor) const;
604 virtual void accept(PrimitiveIndexFunctor& functor) const;
605 virtual unsigned int getNumPrimitives() const;
606
608 inline void setNumCommandsToDraw( unsigned int i) { _count=i; }
610 inline unsigned int getNumCommandsToDraw()const { return _count; }
611
612protected:
613 unsigned int _count;
615};
616
621{
622public:
623
624 DrawArraysIndirect(GLenum mode=0, unsigned int firstcommand = 0, GLsizei stride = 0) :
626 _firstCommand(firstcommand),
627 _stride(stride)
628 {
630 }
631
639
640 virtual osg::Object* cloneType() const { return new DrawArraysIndirect(); }
641 virtual osg::Object* clone(const osg::CopyOp& copyop) const { return new DrawArraysIndirect(*this,copyop); }
642 virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast<const DrawArraysIndirect*>(obj)!=NULL; }
643 virtual const char* libraryName() const { return "osg"; }
644 virtual const char* className() const { return "DrawArraysIndirect"; }
645
646 virtual void draw(State& state, bool useVertexBufferObjects) const;
647
648 virtual void accept(PrimitiveFunctor& functor) const;
649 virtual void accept(PrimitiveIndexFunctor& functor) const;
650
651 virtual unsigned int getNumIndices() const;
652 virtual unsigned int index(unsigned int pos) const;
653 virtual void offsetIndices(int offset);
654
655 virtual unsigned int getNumPrimitives() const;
656
658 inline void setStride( GLsizei i) { _stride=i; }
659
661 inline GLsizei getStride()const { return _stride; }
662
664 inline void setFirstCommandToDraw( unsigned int i) { _firstCommand=i; }
665
667 inline unsigned int getFirstCommandToDraw() const { return _firstCommand; }
668
670 {
672 //ensure bo of idc is of the correct type
673 if(!dynamic_cast<DrawIndirectBufferObject* >(_indirectCommandArray->getBufferObject()))
674 _indirectCommandArray->setBufferObject(new DrawIndirectBufferObject());
675 }
678
679protected:
680
681 unsigned int _firstCommand;
682 GLsizei _stride;
684
685};
686
691{
692public:
693
694 MultiDrawArraysIndirect(GLenum mode=0, unsigned int firstcommand = 0, unsigned int count = 0, GLsizei stride = 0) :
695 osg::DrawArraysIndirect(mode, firstcommand, stride),
696 _count(count)
697 {
699 }
700
705
706 virtual osg::Object* cloneType() const { return new MultiDrawArraysIndirect(); }
707 virtual osg::Object* clone(const osg::CopyOp& copyop) const { return new MultiDrawArraysIndirect(*this,copyop); }
708 virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast<const MultiDrawArraysIndirect*>(obj)!=NULL; }
709 virtual const char* className() const { return "MultiDrawArraysIndirect"; }
710
711 virtual void draw(State& state, bool useVertexBufferObjects) const;
712
713 virtual void accept(PrimitiveFunctor& functor) const;
714 virtual void accept(PrimitiveIndexFunctor& functor) const;
715
716 virtual unsigned int getNumIndices() const;
717 virtual unsigned int index(unsigned int pos) const;
718 virtual void offsetIndices(int offset);
719
720 virtual unsigned int getNumPrimitives() const;
721
723 inline void setNumCommandsToDraw( unsigned int i) { _count=i; }
725 inline unsigned int getNumCommandsToDraw()const { return _count; }
726
727protected:
728 unsigned int _count;
729
730};
731
732}
733
734#endif
The core osg library provides the basic scene graph classes such as Nodes, State and Drawables,...
Definition AlphaFunc:19
T * get(unsigned int contextID)
Definition ContextData:152
MixinVector< GLuint > VectorGLuint
Definition PrimitiveSet:39
MixinVector< GLushort > VectorGLushort
Definition PrimitiveSet:38
MixinVector< GLubyte > VectorGLubyte
Definition PrimitiveSet:37
BufferData()
Definition BufferObject:498
void setBufferObject(BufferObject *bufferObject)
Definition BufferObject:645
Copy Op(erator) used to control whether shallow or deep copy is used during copy construction and clo...
Definition CopyOp:41
@ SHALLOW_COPY
Definition CopyOp:47
size_type size() const
Definition MixinVector:92
void resize(size_type new_size, const value_type &fill_value=value_type())
Definition MixinVector:85
const_reference front() const
Definition MixinVector:138
void reserve(size_type new_capacity)
Definition MixinVector:86
const_reference at(size_type index) const
Definition MixinVector:110
void push_back(const value_type &value)
Definition MixinVector:117
bool empty() const
Definition MixinVector:91
Base class/standard interface for objects which require IO support, cloning and reference counting.
Definition Object:61
A PrimitiveFunctor is used (in conjunction with osg::Drawable::accept (PrimitiveFunctor&)) to get acc...
Definition PrimitiveSet:54
Definition PrimitiveSet:103
Definition PrimitiveSet:125
Type _primitiveType
Definition PrimitiveSet:216
Type
Definition PrimitiveSet:129
@ DrawElementsUByteIndirectPrimitiveType
Definition PrimitiveSet:138
@ MultiDrawElementsUByteIndirectPrimitiveType
Definition PrimitiveSet:142
@ PrimitiveType
Definition PrimitiveSet:130
@ DrawArraysIndirectPrimitiveType
Definition PrimitiveSet:137
@ MultiDrawElementsUIntIndirectPrimitiveType
Definition PrimitiveSet:144
@ DrawElementsUIntIndirectPrimitiveType
Definition PrimitiveSet:140
@ DrawElementsUShortIndirectPrimitiveType
Definition PrimitiveSet:139
@ MultiDrawElementsUShortIndirectPrimitiveType
Definition PrimitiveSet:143
@ MultiDrawArraysIndirectPrimitiveType
Definition PrimitiveSet:141
PrimitiveSet(Type primType=PrimitiveType, GLenum mode=0, int numInstances=0)
Definition PrimitiveSet:166
DrawElements(Type primType=PrimitiveType, GLenum mode=0, int numInstances=0)
Definition PrimitiveSet:340
common interface for IndirectCommandDrawArrayss
Definition PrimitiveSetIndirect:27
virtual unsigned int & first(const unsigned int &index)=0
virtual unsigned int getNumElements() const =0
virtual unsigned int & instanceCount(const unsigned int &index)=0
virtual unsigned int & baseInstance(const unsigned int &index)=0
virtual unsigned int getTotalDataSize() const
Definition PrimitiveSetIndirect:34
IndirectCommandDrawArrays()
Definition PrimitiveSetIndirect:29
virtual unsigned int & count(const unsigned int &index)=0
virtual unsigned int getElementSize() const =0
virtual void reserveElements(const unsigned int)=0
IndirectCommandDrawArrays(const IndirectCommandDrawArrays &copy, const CopyOp &copyop)
Definition PrimitiveSetIndirect:31
virtual void resizeElements(const unsigned int)=0
Definition PrimitiveSetIndirect:48
virtual void reserveElements(const unsigned int)=0
IndirectCommandDrawElements(const IndirectCommandDrawElements &copy, const CopyOp &copyop)
Definition PrimitiveSetIndirect:52
virtual unsigned int & instanceCount(const unsigned int &index)=0
IndirectCommandDrawElements()
Definition PrimitiveSetIndirect:50
virtual unsigned int getElementSize() const =0
virtual unsigned int & count(const unsigned int &index)=0
virtual unsigned int getNumElements() const =0
virtual unsigned int getTotalDataSize() const
Definition PrimitiveSetIndirect:55
virtual void resizeElements(const unsigned int)=0
virtual unsigned int & firstIndex(const unsigned int &index)=0
virtual unsigned int & baseInstance(const unsigned int &index)=0
virtual unsigned int & baseVertex(const unsigned int &index)=0
DrawArraysCommand.
Definition PrimitiveSetIndirect:73
unsigned int first
Definition PrimitiveSetIndirect:79
DrawArraysIndirectCommand(unsigned int pcount=0, unsigned int pinstanceCount=0, unsigned int pfirst=0, unsigned int pbaseInstance=0)
Definition PrimitiveSetIndirect:74
unsigned int count
Definition PrimitiveSetIndirect:77
unsigned int baseInstance
Definition PrimitiveSetIndirect:80
unsigned int instanceCount
Definition PrimitiveSetIndirect:78
default implementation of IndirectCommandDrawArrays DefaultIndirectCommandDrawArrays to be hosted on ...
Definition PrimitiveSetIndirect:86
virtual unsigned int & instanceCount(const unsigned int &index)
Definition PrimitiveSetIndirect:101
virtual const GLvoid * getDataPointer() const
Definition PrimitiveSetIndirect:94
virtual unsigned int & count(const unsigned int &index)
Definition PrimitiveSetIndirect:100
virtual unsigned int getNumElements() const
Definition PrimitiveSetIndirect:96
virtual void resizeElements(const unsigned int n)
Definition PrimitiveSetIndirect:98
virtual void reserveElements(const unsigned int n)
Definition PrimitiveSetIndirect:97
virtual unsigned int & baseInstance(const unsigned int &index)
Definition PrimitiveSetIndirect:103
DefaultIndirectCommandDrawArrays(const DefaultIndirectCommandDrawArrays &copy, const CopyOp &copyop)
Definition PrimitiveSetIndirect:91
META_Object(osg, DefaultIndirectCommandDrawArrays) DefaultIndirectCommandDrawArrays()
Definition PrimitiveSetIndirect:88
virtual unsigned int & first(const unsigned int &index)
Definition PrimitiveSetIndirect:102
virtual unsigned int getElementSize() const
Definition PrimitiveSetIndirect:95
default implementation of IndirectCommandDrawElements DrawElementsCommand
Definition PrimitiveSetIndirect:111
unsigned int baseInstance
Definition PrimitiveSetIndirect:119
unsigned int instanceCount
Definition PrimitiveSetIndirect:116
unsigned int firstIndex
Definition PrimitiveSetIndirect:117
DrawElementsIndirectCommand(unsigned int pcount=0, unsigned int pinstanceCount=0, unsigned int pfirstIndex=0, unsigned int pbaseVertex=0, unsigned int pbaseInstance=0)
Definition PrimitiveSetIndirect:112
unsigned int baseVertex
Definition PrimitiveSetIndirect:118
unsigned int count
Definition PrimitiveSetIndirect:115
vector of DrawElementsCommand to be hosted on GPU
Definition PrimitiveSetIndirect:124
virtual unsigned int & firstIndex(const unsigned int &index)
Definition PrimitiveSetIndirect:141
virtual unsigned int & baseInstance(const unsigned int &index)
Definition PrimitiveSetIndirect:143
META_Object(osg, DefaultIndirectCommandDrawElements) DefaultIndirectCommandDrawElements()
Definition PrimitiveSetIndirect:126
virtual void reserveElements(const unsigned int n)
Definition PrimitiveSetIndirect:136
virtual const GLvoid * getDataPointer() const
Definition PrimitiveSetIndirect:133
virtual void resizeElements(const unsigned int n)
Definition PrimitiveSetIndirect:137
virtual unsigned int & count(const unsigned int &index)
Definition PrimitiveSetIndirect:139
virtual unsigned int getNumElements() const
Definition PrimitiveSetIndirect:134
virtual unsigned int & baseVertex(const unsigned int &index)
Definition PrimitiveSetIndirect:142
virtual unsigned int & instanceCount(const unsigned int &index)
Definition PrimitiveSetIndirect:140
DefaultIndirectCommandDrawElements(const DefaultIndirectCommandDrawElements &copy, const CopyOp &copyop)
Definition PrimitiveSetIndirect:130
virtual unsigned int getElementSize() const
Definition PrimitiveSetIndirect:135
unsigned int getFirstCommandToDraw() const
get offset of the first command in the IndirectCommandDrawArrays
Definition PrimitiveSetIndirect:181
DrawElementsIndirect(Type primType=PrimitiveType, GLenum mode=0, unsigned int firstCommand=0, GLsizei stride=0)
Definition PrimitiveSetIndirect:155
virtual ~DrawElementsIndirect()
Definition PrimitiveSetIndirect:192
GLsizei _stride
Definition PrimitiveSetIndirect:195
void setFirstCommandToDraw(unsigned int i)
Further methods are for advanced DI when you plan to use your own IndirectCommandElement (stride) or ...
Definition PrimitiveSetIndirect:178
const IndirectCommandDrawElements * getIndirectCommandArray() const
Definition PrimitiveSetIndirect:172
IndirectCommandDrawElements * getIndirectCommandArray()
get command array of this indirect primitive set
Definition PrimitiveSetIndirect:171
void setIndirectCommandArray(IndirectCommandDrawElements *idc)
set command array of this indirect primitive set
Definition PrimitiveSetIndirect:162
GLsizei getStride() const
stride (to set if you use custom CommandArray)
Definition PrimitiveSetIndirect:187
ref_ptr< IndirectCommandDrawElements > _indirectCommandArray
Definition PrimitiveSetIndirect:196
DrawElementsIndirect(const DrawElementsIndirect &rhs, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
Definition PrimitiveSetIndirect:158
virtual unsigned int getNumPrimitives() const =0
unsigned int _firstCommand
Definition PrimitiveSetIndirect:194
void setStride(GLsizei i)
stride (to set if you use custom CommandArray)
Definition PrimitiveSetIndirect:184
DrawElementsIndirectUByte(const DrawElementsIndirectUByte &array, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
Definition PrimitiveSetIndirect:211
virtual void reserveElements(unsigned int numIndices)
Definition PrimitiveSetIndirect:254
DrawElementsIndirectUByte(GLenum mode, unsigned int no, const GLubyte *ptr)
Definition PrimitiveSetIndirect:220
virtual const char * className() const
return the name of the object's class type.
Definition PrimitiveSetIndirect:236
virtual unsigned int getTotalDataSize() const
Definition PrimitiveSetIndirect:239
DrawElementsIndirectUByte(GLenum mode=0)
Definition PrimitiveSetIndirect:208
VectorGLubyte vector_type
Definition PrimitiveSetIndirect:206
virtual const char * libraryName() const
return the name of the object's library.
Definition PrimitiveSetIndirect:235
virtual void setElement(unsigned int i, unsigned int v)
Definition PrimitiveSetIndirect:256
virtual unsigned int getNumIndices() const
Definition PrimitiveSetIndirect:247
DrawElementsIndirectUByte(GLenum mode, unsigned int no)
Definition PrimitiveSetIndirect:228
virtual Object * clone(const CopyOp &copyop) const
Clone an object, with Object* return type.
Definition PrimitiveSetIndirect:233
virtual const GLvoid * getDataPointer() const
Definition PrimitiveSetIndirect:238
virtual unsigned int getElement(unsigned int i)
Definition PrimitiveSetIndirect:257
virtual void accept(PrimitiveIndexFunctor &functor) const
virtual Object * cloneType() const
Clone the type of an object, with Object* return type.
Definition PrimitiveSetIndirect:232
virtual unsigned int index(unsigned int pos) const
Definition PrimitiveSetIndirect:248
virtual unsigned int getNumPrimitives() const
virtual void accept(PrimitiveFunctor &functor) const
virtual void resizeElements(unsigned int numIndices)
Definition PrimitiveSetIndirect:253
virtual bool supportsBufferObject() const
Definition PrimitiveSetIndirect:240
virtual void draw(State &state, bool useVertexBufferObjects) const
virtual GLenum getDataType()
Definition PrimitiveSetIndirect:251
virtual void offsetIndices(int offset)
virtual void addElement(unsigned int v)
Definition PrimitiveSetIndirect:259
virtual bool isSameKindAs(const Object *obj) const
Definition PrimitiveSetIndirect:234
DrawElementsIndirectUShort(GLenum mode, unsigned int no, const GLushort *ptr)
Definition PrimitiveSetIndirect:289
virtual unsigned int getNumPrimitives() const
virtual void reserveElements(unsigned int numIndices)
Definition PrimitiveSetIndirect:327
virtual const char * className() const
return the name of the object's class type.
Definition PrimitiveSetIndirect:310
virtual unsigned int getNumIndices() const
Definition PrimitiveSetIndirect:321
virtual const GLvoid * getDataPointer() const
Definition PrimitiveSetIndirect:312
virtual bool supportsBufferObject() const
Definition PrimitiveSetIndirect:314
virtual void addElement(unsigned int v)
Definition PrimitiveSetIndirect:332
virtual void resizeElements(unsigned int numIndices)
Definition PrimitiveSetIndirect:326
DrawElementsIndirectUShort(const DrawElementsIndirectUShort &array, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
Definition PrimitiveSetIndirect:280
virtual Object * cloneType() const
Clone the type of an object, with Object* return type.
Definition PrimitiveSetIndirect:306
DrawElementsIndirectUShort(GLenum mode=0)
Definition PrimitiveSetIndirect:277
virtual unsigned int index(unsigned int pos) const
Definition PrimitiveSetIndirect:322
DrawElementsIndirectUShort(GLenum mode, unsigned int no)
Definition PrimitiveSetIndirect:297
virtual Object * clone(const CopyOp &copyop) const
Clone an object, with Object* return type.
Definition PrimitiveSetIndirect:307
DrawElementsIndirectUShort(GLenum mode, InputIterator first, InputIterator last)
Definition PrimitiveSetIndirect:302
virtual unsigned int getElement(unsigned int i)
Definition PrimitiveSetIndirect:330
virtual void accept(PrimitiveFunctor &functor) const
virtual void setElement(unsigned int i, unsigned int v)
Definition PrimitiveSetIndirect:329
virtual GLenum getDataType()
Definition PrimitiveSetIndirect:325
VectorGLushort vector_type
Definition PrimitiveSetIndirect:275
virtual void draw(State &state, bool useVertexBufferObjects) const
virtual void offsetIndices(int offset)
virtual bool isSameKindAs(const Object *obj) const
Definition PrimitiveSetIndirect:308
virtual unsigned int getTotalDataSize() const
Definition PrimitiveSetIndirect:313
virtual const char * libraryName() const
return the name of the object's library.
Definition PrimitiveSetIndirect:309
virtual void accept(PrimitiveIndexFunctor &functor) const
DrawElementsIndirectUInt(const DrawElementsIndirectUInt &array, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
Definition PrimitiveSetIndirect:352
DrawElementsIndirectUInt(GLenum mode, unsigned int no, const GLuint *ptr)
Definition PrimitiveSetIndirect:361
virtual const char * className() const
return the name of the object's class type.
Definition PrimitiveSetIndirect:382
virtual const char * libraryName() const
return the name of the object's library.
Definition PrimitiveSetIndirect:381
virtual Object * cloneType() const
Clone the type of an object, with Object* return type.
Definition PrimitiveSetIndirect:378
virtual void accept(PrimitiveFunctor &functor) const
virtual void draw(State &state, bool useVertexBufferObjects) const
virtual void setElement(unsigned int i, unsigned int v)
Definition PrimitiveSetIndirect:400
virtual unsigned int index(unsigned int pos) const
Definition PrimitiveSetIndirect:394
virtual GLenum getDataType()
Definition PrimitiveSetIndirect:397
virtual bool supportsBufferObject() const
Definition PrimitiveSetIndirect:386
virtual void addElement(unsigned int v)
Definition PrimitiveSetIndirect:402
virtual bool isSameKindAs(const Object *obj) const
Definition PrimitiveSetIndirect:380
virtual unsigned int getNumPrimitives() const
VectorGLuint vector_type
Definition PrimitiveSetIndirect:347
DrawElementsIndirectUInt(GLenum mode=0)
Definition PrimitiveSetIndirect:349
virtual unsigned int getNumIndices() const
Definition PrimitiveSetIndirect:393
virtual unsigned int getTotalDataSize() const
Definition PrimitiveSetIndirect:385
virtual void accept(PrimitiveIndexFunctor &functor) const
virtual void resizeElements(unsigned int numIndices)
Definition PrimitiveSetIndirect:398
DrawElementsIndirectUInt(GLenum mode, unsigned int no)
Definition PrimitiveSetIndirect:369
virtual const GLvoid * getDataPointer() const
Definition PrimitiveSetIndirect:384
virtual unsigned int getElement(unsigned int i)
Definition PrimitiveSetIndirect:401
DrawElementsIndirectUInt(GLenum mode, InputIterator first, InputIterator last)
Definition PrimitiveSetIndirect:374
virtual void reserveElements(unsigned int numIndices)
Definition PrimitiveSetIndirect:399
virtual Object * clone(const CopyOp &copyop) const
Clone an object, with Object* return type.
Definition PrimitiveSetIndirect:379
virtual void offsetIndices(int offset)
unsigned int getNumCommandsToDraw() const
count of Indirect Command to execute
Definition PrimitiveSetIndirect:476
MultiDrawElementsIndirectUShort(GLenum mode, InputIterator first, InputIterator last)
Definition PrimitiveSetIndirect:454
unsigned int _count
Definition PrimitiveSetIndirect:479
virtual void draw(State &state, bool useVertexBufferObjects) const
virtual osg::Object * clone(const osg::CopyOp &copyop) const
Clone an object, with Object* return type.
Definition PrimitiveSetIndirect:462
MultiDrawElementsIndirectUShort(GLenum mode, unsigned int no)
Definition PrimitiveSetIndirect:446
void setNumCommandsToDraw(unsigned int i)
if you want to draw a subset of the IndirectCommandElement(FirstCommandToDraw,NumCommandsToDraw)
Definition PrimitiveSetIndirect:474
virtual void accept(PrimitiveFunctor &functor) const
virtual void accept(PrimitiveIndexFunctor &functor) const
virtual const char * className() const
return the name of the object's class type.
Definition PrimitiveSetIndirect:464
MultiDrawElementsIndirectUShort(GLenum mode=0)
Definition PrimitiveSetIndirect:417
MultiDrawElementsIndirectUShort(const MultiDrawElementsIndirectUShort &mdi, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
Definition PrimitiveSetIndirect:424
virtual bool isSameKindAs(const osg::Object *obj) const
Definition PrimitiveSetIndirect:463
virtual osg::Object * cloneType() const
Clone the type of an object, with Object* return type.
Definition PrimitiveSetIndirect:461
MultiDrawElementsIndirectUShort(GLenum mode, unsigned int no, const GLushort *ptr)
Definition PrimitiveSetIndirect:435
virtual unsigned int getNumPrimitives() const
virtual const char * className() const
return the name of the object's class type.
Definition PrimitiveSetIndirect:534
unsigned int _count
Definition PrimitiveSetIndirect:547
virtual osg::Object * cloneType() const
Clone the type of an object, with Object* return type.
Definition PrimitiveSetIndirect:531
virtual bool isSameKindAs(const osg::Object *obj) const
Definition PrimitiveSetIndirect:533
MultiDrawElementsIndirectUByte(GLenum mode=0)
Definition PrimitiveSetIndirect:486
MultiDrawElementsIndirectUByte(GLenum mode, InputIterator first, InputIterator last)
Definition PrimitiveSetIndirect:524
unsigned int getNumCommandsToDraw() const
count of Indirect Command to execute
Definition PrimitiveSetIndirect:544
virtual void accept(PrimitiveFunctor &functor) const
virtual unsigned int getNumPrimitives() const
virtual void draw(State &state, bool useVertexBufferObjects) const
void setNumCommandsToDraw(unsigned int i)
count of Indirect Command to execute
Definition PrimitiveSetIndirect:542
virtual osg::Object * clone(const osg::CopyOp &copyop) const
Clone an object, with Object* return type.
Definition PrimitiveSetIndirect:532
MultiDrawElementsIndirectUByte(GLenum mode, unsigned int no, const GLubyte *ptr)
Definition PrimitiveSetIndirect:505
virtual void accept(PrimitiveIndexFunctor &functor) const
MultiDrawElementsIndirectUByte(GLenum mode, unsigned int no)
Definition PrimitiveSetIndirect:516
MultiDrawElementsIndirectUByte(const MultiDrawElementsIndirectUByte &mdi, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
Definition PrimitiveSetIndirect:494
virtual bool isSameKindAs(const osg::Object *obj) const
Definition PrimitiveSetIndirect:599
virtual unsigned int getNumPrimitives() const
MultiDrawElementsIndirectUInt(GLenum mode=0)
Definition PrimitiveSetIndirect:554
virtual const char * className() const
return the name of the object's class type.
Definition PrimitiveSetIndirect:600
MultiDrawElementsIndirectUInt(GLenum mode, unsigned int no, const GLuint *ptr)
Definition PrimitiveSetIndirect:571
MultiDrawElementsIndirectUInt(GLenum mode, unsigned int no)
Definition PrimitiveSetIndirect:582
virtual osg::Object * clone(const osg::CopyOp &copyop) const
Clone an object, with Object* return type.
Definition PrimitiveSetIndirect:598
MultiDrawElementsIndirectUInt(GLenum mode, InputIterator first, InputIterator last)
Definition PrimitiveSetIndirect:590
void setNumCommandsToDraw(unsigned int i)
count of Indirect Command to execute
Definition PrimitiveSetIndirect:608
virtual void accept(PrimitiveFunctor &functor) const
MultiDrawElementsIndirectUInt(const MultiDrawElementsIndirectUInt &mdi, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
Definition PrimitiveSetIndirect:561
virtual osg::Object * cloneType() const
Clone the type of an object, with Object* return type.
Definition PrimitiveSetIndirect:597
unsigned int _count
Definition PrimitiveSetIndirect:613
virtual void draw(State &state, bool useVertexBufferObjects) const
virtual void accept(PrimitiveIndexFunctor &functor) const
unsigned int getNumCommandsToDraw() const
count of Indirect Command to execute
Definition PrimitiveSetIndirect:610
virtual bool isSameKindAs(const osg::Object *obj) const
Definition PrimitiveSetIndirect:642
void setFirstCommandToDraw(unsigned int i)
set offset of the first command in the IndirectCommandDrawArrays
Definition PrimitiveSetIndirect:664
virtual void draw(State &state, bool useVertexBufferObjects) const
virtual osg::Object * clone(const osg::CopyOp &copyop) const
Clone an object, with Object* return type.
Definition PrimitiveSetIndirect:641
virtual void accept(PrimitiveFunctor &functor) const
void setIndirectCommandArray(IndirectCommandDrawArrays *idc)
Definition PrimitiveSetIndirect:669
const IndirectCommandDrawArrays * getIndirectCommandArray() const
Definition PrimitiveSetIndirect:676
IndirectCommandDrawArrays * getIndirectCommandArray()
Definition PrimitiveSetIndirect:677
virtual void accept(PrimitiveIndexFunctor &functor) const
virtual const char * className() const
return the name of the object's class type.
Definition PrimitiveSetIndirect:644
virtual unsigned int index(unsigned int pos) const
virtual const char * libraryName() const
return the name of the object's library.
Definition PrimitiveSetIndirect:643
virtual unsigned int getNumIndices() const
virtual osg::Object * cloneType() const
Clone the type of an object, with Object* return type.
Definition PrimitiveSetIndirect:640
DrawArraysIndirect(const DrawArraysIndirect &dal, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
Definition PrimitiveSetIndirect:632
unsigned int _firstCommand
Definition PrimitiveSetIndirect:681
void setStride(GLsizei i)
stride (to set if you use custom CommandArray)
Definition PrimitiveSetIndirect:658
GLsizei _stride
Definition PrimitiveSetIndirect:682
ref_ptr< IndirectCommandDrawArrays > _indirectCommandArray
Definition PrimitiveSetIndirect:683
GLsizei getStride() const
stride (to set if you use custom CommandArray)
Definition PrimitiveSetIndirect:661
unsigned int getFirstCommandToDraw() const
get offset of the first command in the IndirectCommandDrawArrays
Definition PrimitiveSetIndirect:667
virtual unsigned int getNumPrimitives() const
virtual void offsetIndices(int offset)
DrawArraysIndirect(GLenum mode=0, unsigned int firstcommand=0, GLsizei stride=0)
Definition PrimitiveSetIndirect:624
unsigned int _count
Definition PrimitiveSetIndirect:728
virtual osg::Object * cloneType() const
Clone the type of an object, with Object* return type.
Definition PrimitiveSetIndirect:706
virtual osg::Object * clone(const osg::CopyOp &copyop) const
Clone an object, with Object* return type.
Definition PrimitiveSetIndirect:707
virtual void accept(PrimitiveIndexFunctor &functor) const
MultiDrawArraysIndirect(GLenum mode=0, unsigned int firstcommand=0, unsigned int count=0, GLsizei stride=0)
Definition PrimitiveSetIndirect:694
MultiDrawArraysIndirect(const MultiDrawArraysIndirect &dal, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
Definition PrimitiveSetIndirect:701
virtual unsigned int getNumIndices() const
virtual unsigned int getNumPrimitives() const
virtual unsigned int index(unsigned int pos) const
virtual void accept(PrimitiveFunctor &functor) const
virtual bool isSameKindAs(const osg::Object *obj) const
Definition PrimitiveSetIndirect:708
virtual void draw(State &state, bool useVertexBufferObjects) const
virtual void offsetIndices(int offset)
unsigned int getNumCommandsToDraw() const
count of Indirect Command to execute
Definition PrimitiveSetIndirect:725
virtual const char * className() const
return the name of the object's class type.
Definition PrimitiveSetIndirect:709
void setNumCommandsToDraw(unsigned int i)
count of Indirect Command to execute
Definition PrimitiveSetIndirect:723
Smart pointer for handling referenced counted objects.
Definition ref_ptr:32
Encapsulates the current applied OpenGL modes, attributes and vertex arrays settings,...
Definition State:80
#define NULL
Definition Export:55
#define OSG_EXPORT
Definition Export:39

osg logo
Generated at Sun Jul 27 2025 00:00:00 for the OpenSceneGraph by doxygen 1.14.0.