14#ifndef OSG_PRIMITIVESET
15#define OSG_PRIMITIVESET 1
32#define OSG_HAS_MULTIDRAWARRAYS
90 virtual void drawArrays(GLenum mode,GLint first,GLsizei count) = 0;
93 virtual void drawElements(GLenum mode,GLsizei count,
const GLubyte* indices) = 0;
96 virtual void drawElements(GLenum mode,GLsizei count,
const GLushort* indices) = 0;
99 virtual void drawElements(GLenum mode,GLsizei count,
const GLuint* indices) = 0;
116 virtual void drawArrays(GLenum mode,GLint first,GLsizei count) = 0;
117 virtual void drawElements(GLenum mode,GLsizei count,
const GLubyte* indices) = 0;
118 virtual void drawElements(GLenum mode,GLsizei count,
const GLushort* indices) = 0;
119 virtual void drawElements(GLenum mode,GLsizei count,
const GLuint* indices) = 0;
144 MultiDrawElementsUIntIndirectPrimitiveType
151 LINE_STRIP = GL_LINE_STRIP,
152 LINE_LOOP = GL_LINE_LOOP,
153 TRIANGLES = GL_TRIANGLES,
154 TRIANGLE_STRIP = GL_TRIANGLE_STRIP,
155 TRIANGLE_FAN = GL_TRIANGLE_FAN,
157 QUAD_STRIP = GL_QUAD_STRIP,
158 POLYGON = GL_POLYGON,
167 _primitiveType(primType),
168 _numInstances(numInstances),
173 _primitiveType(prim._primitiveType),
174 _numInstances(prim._numInstances),
179 virtual const char*
className()
const {
return "PrimitiveSet"; }
199 virtual void draw(
State& state,
bool useVertexBufferObjects)
const = 0;
204 virtual unsigned int index(
unsigned int pos)
const = 0;
230 DrawArrays(GLenum mode, GLint first, GLsizei count,
int numInstances=0):
231 PrimitiveSet(DrawArraysPrimitiveType, mode, numInstances),
244 virtual const char*
className()
const {
return "DrawArrays"; }
247 void set(GLenum mode,GLint first, GLsizei count)
260 virtual void draw(
State& state,
bool useVertexBufferObjects)
const;
265 virtual unsigned int getNumIndices()
const {
return static_cast<unsigned int>(_count); }
266 virtual unsigned int index(
unsigned int pos)
const {
return static_cast<unsigned int>(_first)+pos; }
290 _first(dal._first) {}
312 virtual const char*
className()
const {
return "DrawArrayLengths"; }
318 virtual void draw(
State& state,
bool useVertexBufferObjects)
const;
324 virtual unsigned int index(
unsigned int pos)
const {
return _first+pos; }
391 DrawElements(DrawElementsUBytePrimitiveType,mode,numInstances),
406 virtual const char*
className()
const {
return "DrawElementsUByte"; }
409 virtual unsigned int getTotalDataSize()
const {
return static_cast<unsigned int>(size()); }
412 virtual void draw(
State& state,
bool useVertexBufferObjects)
const ;
417 virtual unsigned int getNumIndices()
const {
return static_cast<unsigned int>(size()); }
418 virtual unsigned int index(
unsigned int pos)
const {
return (*
this)[pos]; }
424 virtual void setElement(
unsigned int i,
unsigned int v) { (*this)[i] = v; }
425 virtual unsigned int getElement(
unsigned int i) {
return (*
this)[i]; }
426 virtual void addElement(
unsigned int v) { push_back(GLubyte(v)); }
454 DrawElements(DrawElementsUShortPrimitiveType,mode,numInstances),
465 template <
class InputIterator>
474 virtual const char*
className()
const {
return "DrawElementsUShort"; }
477 virtual unsigned int getTotalDataSize()
const {
return 2u*
static_cast<unsigned int>(size()); }
480 virtual void draw(
State& state,
bool useVertexBufferObjects)
const;
485 virtual unsigned int getNumIndices()
const {
return static_cast<unsigned int>(size()); }
486 virtual unsigned int index(
unsigned int pos)
const {
return (*
this)[pos]; }
492 virtual void setElement(
unsigned int i,
unsigned int v) { (*this)[i] = v; }
493 virtual unsigned int getElement(
unsigned int i) {
return (*
this)[i]; }
494 virtual void addElement(
unsigned int v) { push_back(GLushort(v)); }
521 DrawElements(DrawElementsUIntPrimitiveType,mode,numInstances),
532 template <
class InputIterator>
541 virtual const char*
className()
const {
return "DrawElementsUInt"; }
544 virtual unsigned int getTotalDataSize()
const {
return 4u*
static_cast<unsigned int>(size()); }
547 virtual void draw(
State& state,
bool useVertexBufferObjects)
const;
552 virtual unsigned int getNumIndices()
const {
return static_cast<unsigned int>(size()); }
553 virtual unsigned int index(
unsigned int pos)
const {
return (*
this)[pos]; }
559 virtual void setElement(
unsigned int i,
unsigned int v) { (*this)[i] = v; }
560 virtual unsigned int getElement(
unsigned int i) {
return (*
this)[i]; }
561 virtual void addElement(
unsigned int v) { push_back(GLuint(v)); }
568#ifdef OSG_HAS_MULTIDRAWARRAYS
578 _firsts(dal._firsts),
579 _counts(dal._counts) {}
585 virtual const char*
className()
const {
return "MultiDrawArrays"; }
594 virtual unsigned int index(
unsigned int pos)
const;
609 void add(GLint first, GLsizei count);
#define GL_LINES_ADJACENCY
Definition GLDefines:208
#define GL_TRIANGLE_STRIP_ADJACENCY
Definition GLDefines:211
#define GL_TRIANGLES_ADJACENCY
Definition GLDefines:210
#define GL_LINE_STRIP_ADJACENCY
Definition GLDefines:209
#define GL_PATCHES
Definition GLDefines:221
Definition BufferObject:495
osg::ref_ptr< BufferObject > _bufferObject
Definition BufferObject:590
void setBufferObject(BufferObject *bufferObject)
@ SHALLOW_COPY
Definition CopyOp:47
Definition PrimitiveSet:278
DrawArrayLengths(const DrawArrayLengths &dal, const CopyOp ©op=CopyOp::SHALLOW_COPY)
Definition PrimitiveSet:287
virtual unsigned int getNumPrimitives() const
virtual unsigned int index(unsigned int pos) const
Definition PrimitiveSet:324
virtual void offsetIndices(int offset)
Definition PrimitiveSet:325
DrawArrayLengths(GLenum mode, GLint first, unsigned int no)
Definition PrimitiveSet:297
DrawArrayLengths(GLenum mode, GLint first)
Definition PrimitiveSet:302
virtual Object * clone(const CopyOp ©op) const
Definition PrimitiveSet:309
DrawArrayLengths(GLenum mode=0)
Definition PrimitiveSet:283
virtual void accept(PrimitiveIndexFunctor &functor) const
virtual bool isSameKindAs(const Object *obj) const
Definition PrimitiveSet:310
DrawArrayLengths(GLenum mode, GLint first, unsigned int no, GLsizei *ptr)
Definition PrimitiveSet:292
virtual const char * className() const
Definition PrimitiveSet:312
virtual void draw(State &state, bool useVertexBufferObjects) const
virtual void accept(PrimitiveFunctor &functor) const
virtual unsigned int getNumIndices() const
GLint getFirst() const
Definition PrimitiveSet:316
virtual Object * cloneType() const
Definition PrimitiveSet:308
virtual const char * libraryName() const
Definition PrimitiveSet:311
GLint _first
Definition PrimitiveSet:333
VectorGLsizei vector_type
Definition PrimitiveSet:281
void setFirst(GLint first)
Definition PrimitiveSet:315
virtual ~DrawArrayLengths()
Definition PrimitiveSet:331
Definition PrimitiveSet:222
virtual const char * libraryName() const
Definition PrimitiveSet:243
virtual void accept(PrimitiveFunctor &functor) const
virtual bool isSameKindAs(const Object *obj) const
Definition PrimitiveSet:242
virtual void draw(State &state, bool useVertexBufferObjects) const
virtual ~DrawArrays()
Definition PrimitiveSet:271
virtual const char * className() const
Definition PrimitiveSet:244
virtual void accept(PrimitiveIndexFunctor &functor) const
void setCount(GLsizei count)
Definition PrimitiveSet:257
GLint _first
Definition PrimitiveSet:273
virtual unsigned int index(unsigned int pos) const
Definition PrimitiveSet:266
void setFirst(GLint first)
Definition PrimitiveSet:254
virtual Object * cloneType() const
Definition PrimitiveSet:240
GLsizei _count
Definition PrimitiveSet:274
virtual void offsetIndices(int offset)
Definition PrimitiveSet:267
DrawArrays(const DrawArrays &da, const CopyOp ©op=CopyOp::SHALLOW_COPY)
Definition PrimitiveSet:235
DrawArrays(GLenum mode, GLint first, GLsizei count, int numInstances=0)
Definition PrimitiveSet:230
GLsizei getCount() const
Definition PrimitiveSet:258
GLint getFirst() const
Definition PrimitiveSet:255
virtual Object * clone(const CopyOp ©op) const
Definition PrimitiveSet:241
virtual unsigned int getNumIndices() const
Definition PrimitiveSet:265
void set(GLenum mode, GLint first, GLsizei count)
Definition PrimitiveSet:247
DrawArrays(GLenum mode=0)
Definition PrimitiveSet:225
Definition PrimitiveSet:372
virtual bool isSameKindAs(const Object *obj) const
Definition PrimitiveSet:404
virtual unsigned int getElement(unsigned int i)
Definition PrimitiveSet:425
virtual void accept(PrimitiveIndexFunctor &functor) const
virtual const char * className() const
Definition PrimitiveSet:406
VectorGLubyte vector_type
Definition PrimitiveSet:375
virtual void setElement(unsigned int i, unsigned int v)
Definition PrimitiveSet:424
virtual unsigned int getTotalDataSize() const
Definition PrimitiveSet:409
virtual GLenum getDataType()
Definition PrimitiveSet:421
virtual Object * cloneType() const
Definition PrimitiveSet:402
virtual void reserveElements(unsigned int numIndices)
Definition PrimitiveSet:423
virtual bool supportsBufferObject() const
Definition PrimitiveSet:410
DrawElementsUByte(const DrawElementsUByte &array, const CopyOp ©op=CopyOp::SHALLOW_COPY)
Definition PrimitiveSet:380
virtual void addElement(unsigned int v)
Definition PrimitiveSet:426
virtual void resizeElements(unsigned int numIndices)
Definition PrimitiveSet:422
virtual unsigned int index(unsigned int pos) const
Definition PrimitiveSet:418
DrawElementsUByte(GLenum mode=0)
Definition PrimitiveSet:377
virtual void draw(State &state, bool useVertexBufferObjects) const
virtual const GLvoid * getDataPointer() const
Definition PrimitiveSet:408
virtual void offsetIndices(int offset)
virtual unsigned int getNumIndices() const
Definition PrimitiveSet:417
virtual const char * libraryName() const
Definition PrimitiveSet:405
DrawElementsUByte(GLenum mode, unsigned int no)
Definition PrimitiveSet:398
virtual ~DrawElementsUByte()
virtual void accept(PrimitiveFunctor &functor) const
virtual Object * clone(const CopyOp ©op) const
Definition PrimitiveSet:403
DrawElementsUByte(GLenum mode, unsigned int no, const GLubyte *ptr, int numInstances=0)
Definition PrimitiveSet:390
Definition PrimitiveSet:502
DrawElementsUInt(const DrawElementsUInt &array, const CopyOp ©op=CopyOp::SHALLOW_COPY)
Definition PrimitiveSet:510
virtual Object * clone(const CopyOp ©op) const
Definition PrimitiveSet:538
virtual void setElement(unsigned int i, unsigned int v)
Definition PrimitiveSet:559
VectorGLuint vector_type
Definition PrimitiveSet:505
virtual void reserveElements(unsigned int numIndices)
Definition PrimitiveSet:558
virtual void draw(State &state, bool useVertexBufferObjects) const
virtual void accept(PrimitiveFunctor &functor) const
virtual void offsetIndices(int offset)
virtual unsigned int getNumIndices() const
Definition PrimitiveSet:552
virtual unsigned int getTotalDataSize() const
Definition PrimitiveSet:544
virtual bool supportsBufferObject() const
Definition PrimitiveSet:545
virtual void resizeElements(unsigned int numIndices)
Definition PrimitiveSet:557
virtual const GLvoid * getDataPointer() const
Definition PrimitiveSet:543
virtual Object * cloneType() const
Definition PrimitiveSet:537
DrawElementsUInt(GLenum mode, InputIterator first, InputIterator last)
Definition PrimitiveSet:533
DrawElementsUInt(GLenum mode, unsigned int no)
Definition PrimitiveSet:528
virtual void accept(PrimitiveIndexFunctor &functor) const
virtual bool isSameKindAs(const Object *obj) const
Definition PrimitiveSet:539
DrawElementsUInt(GLenum mode=0)
Definition PrimitiveSet:507
DrawElementsUInt(GLenum mode, unsigned int no, const GLuint *ptr, int numInstances=0)
Definition PrimitiveSet:520
virtual ~DrawElementsUInt()
virtual void addElement(unsigned int v)
Definition PrimitiveSet:561
virtual const char * className() const
Definition PrimitiveSet:541
virtual const char * libraryName() const
Definition PrimitiveSet:540
virtual unsigned int index(unsigned int pos) const
Definition PrimitiveSet:553
virtual GLenum getDataType()
Definition PrimitiveSet:556
virtual unsigned int getElement(unsigned int i)
Definition PrimitiveSet:560
Definition PrimitiveSet:435
virtual GLenum getDataType()
Definition PrimitiveSet:489
virtual void reserveElements(unsigned int numIndices)
Definition PrimitiveSet:491
virtual unsigned int getNumIndices() const
Definition PrimitiveSet:485
DrawElementsUShort(GLenum mode, InputIterator first, InputIterator last)
Definition PrimitiveSet:466
virtual void setElement(unsigned int i, unsigned int v)
Definition PrimitiveSet:492
VectorGLushort vector_type
Definition PrimitiveSet:438
virtual void resizeElements(unsigned int numIndices)
Definition PrimitiveSet:490
virtual void accept(PrimitiveFunctor &functor) const
virtual const char * className() const
Definition PrimitiveSet:474
virtual void offsetIndices(int offset)
virtual unsigned int getElement(unsigned int i)
Definition PrimitiveSet:493
DrawElementsUShort(GLenum mode, unsigned int no)
Definition PrimitiveSet:461
virtual const char * libraryName() const
Definition PrimitiveSet:473
virtual bool supportsBufferObject() const
Definition PrimitiveSet:478
DrawElementsUShort(GLenum mode=0)
Definition PrimitiveSet:440
virtual void addElement(unsigned int v)
Definition PrimitiveSet:494
virtual const GLvoid * getDataPointer() const
Definition PrimitiveSet:476
virtual ~DrawElementsUShort()
DrawElementsUShort(const DrawElementsUShort &array, const CopyOp ©op=CopyOp::SHALLOW_COPY)
Definition PrimitiveSet:443
virtual void accept(PrimitiveIndexFunctor &functor) const
virtual Object * clone(const CopyOp ©op) const
Definition PrimitiveSet:471
virtual bool isSameKindAs(const Object *obj) const
Definition PrimitiveSet:472
virtual Object * cloneType() const
Definition PrimitiveSet:470
virtual void draw(State &state, bool useVertexBufferObjects) const
virtual unsigned int getTotalDataSize() const
Definition PrimitiveSet:477
virtual unsigned int index(unsigned int pos) const
Definition PrimitiveSet:486
DrawElementsUShort(GLenum mode, unsigned int no, const GLushort *ptr, int numInstances=0)
Definition PrimitiveSet:453
Definition PrimitiveSet:337
DrawElements(const DrawElements ©, const CopyOp ©op=CopyOp::SHALLOW_COPY)
Definition PrimitiveSet:343
DrawElements(Type primType=PrimitiveType, GLenum mode=0, int numInstances=0)
Definition PrimitiveSet:340
virtual void resizeElements(unsigned int numIndices)=0
virtual ~DrawElements()
Definition PrimitiveSet:368
virtual const DrawElements * getDrawElements() const
Definition PrimitiveSet:348
void setElementBufferObject(osg::ElementBufferObject *ebo)
Definition PrimitiveSet:351
virtual DrawElements * getDrawElements()
Definition PrimitiveSet:347
virtual void setElement(unsigned int, unsigned int)=0
osg::ElementBufferObject * getElementBufferObject()
Definition PrimitiveSet:354
const osg::ElementBufferObject * getElementBufferObject() const
Definition PrimitiveSet:357
virtual unsigned int getElement(unsigned int)=0
virtual void addElement(unsigned int)=0
virtual void reserveElements(unsigned int numIndices)=0
virtual GLenum getDataType()=0
Definition BufferObject:622
Definition MixinVector:29
Definition PrimitiveSet:570
virtual const char * libraryName() const
Definition PrimitiveSet:584
virtual const char * className() const
Definition PrimitiveSet:585
std::vector< GLsizei > Counts
Definition PrimitiveSet:604
void setFirsts(const Firsts &firsts)
Definition PrimitiveSet:600
std::vector< GLint > Firsts
Definition PrimitiveSet:599
virtual unsigned int index(unsigned int pos) const
MultiDrawArrays(const MultiDrawArrays &dal, const CopyOp ©op=CopyOp::SHALLOW_COPY)
Definition PrimitiveSet:576
Firsts & getFirsts()
Definition PrimitiveSet:601
virtual void accept(PrimitiveIndexFunctor &functor) const
virtual osg::Object * clone(const osg::CopyOp ©op) const
Definition PrimitiveSet:582
MultiDrawArrays(GLenum mode=0)
Definition PrimitiveSet:573
void setCounts(const Counts &firsts)
Definition PrimitiveSet:605
virtual unsigned int getNumIndices() const
virtual void accept(PrimitiveFunctor &functor) const
const Firsts & getFirsts() const
Definition PrimitiveSet:602
Counts _counts
Definition PrimitiveSet:614
const Counts & getCounts() const
Definition PrimitiveSet:607
Counts & getCounts()
Definition PrimitiveSet:606
virtual void draw(osg::State &state, bool useVertexBufferObjects) const
virtual osg::Object * cloneType() const
Definition PrimitiveSet:581
Firsts _firsts
Definition PrimitiveSet:613
virtual bool isSameKindAs(const osg::Object *obj) const
Definition PrimitiveSet:583
virtual void offsetIndices(int offset)
void add(GLint first, GLsizei count)
virtual unsigned int getNumPrimitives() const
Definition PrimitiveSet:54
virtual void setVertexArray(unsigned int count, const Vec3d *vertices)=0
virtual void drawArrays(GLenum mode, GLint first, GLsizei count)=0
Mimics the OpenGL glDrawArrays() function.
virtual void drawElements(GLenum mode, GLsizei count, const GLuint *indices)=0
Mimics the OpenGL glDrawElements() function.
virtual void drawElements(GLenum mode, GLsizei count, const GLubyte *indices)=0
Mimics the OpenGL glDrawElements() function.
virtual void setVertexArray(unsigned int count, const Vec2d *vertices)=0
virtual void drawElements(GLenum mode, GLsizei count, const GLushort *indices)=0
Mimics the OpenGL glDrawElements() function.
virtual ~PrimitiveFunctor()
Definition PrimitiveSet:57
virtual void setVertexArray(unsigned int count, const Vec2 *vertices)=0
virtual void setVertexArray(unsigned int count, const Vec3 *vertices)=0
virtual void setVertexArray(unsigned int count, const Vec4 *vertices)=0
virtual void setVertexArray(unsigned int count, const Vec4d *vertices)=0
Definition PrimitiveSet:103
virtual void setVertexArray(unsigned int count, const Vec4d *vertices)=0
virtual void setVertexArray(unsigned int count, const Vec3d *vertices)=0
virtual ~PrimitiveIndexFunctor()
Definition PrimitiveSet:106
virtual void setVertexArray(unsigned int count, const Vec3 *vertices)=0
virtual void drawArrays(GLenum mode, GLint first, GLsizei count)=0
virtual void drawElements(GLenum mode, GLsizei count, const GLushort *indices)=0
virtual void drawElements(GLenum mode, GLsizei count, const GLubyte *indices)=0
virtual void drawElements(GLenum mode, GLsizei count, const GLuint *indices)=0
virtual void setVertexArray(unsigned int count, const Vec2d *vertices)=0
virtual void setVertexArray(unsigned int count, const Vec4 *vertices)=0
virtual void setVertexArray(unsigned int count, const Vec2 *vertices)=0
Definition PrimitiveSet:125
virtual const GLvoid * getDataPointer() const
Definition PrimitiveSet:186
int getNumInstances() const
Definition PrimitiveSet:194
virtual bool isSameKindAs(const Object *obj) const
Definition PrimitiveSet:177
virtual osg::PrimitiveSet * asPrimitiveSet()
Definition PrimitiveSet:183
virtual unsigned int getNumIndices() const =0
virtual ~PrimitiveSet()
Definition PrimitiveSet:214
virtual DrawElements * getDrawElements()
Definition PrimitiveSet:190
int _numInstances
Definition PrimitiveSet:217
virtual const osg::PrimitiveSet * asPrimitiveSet() const
Definition PrimitiveSet:184
Type _primitiveType
Definition PrimitiveSet:216
virtual unsigned int getTotalDataSize() const
Definition PrimitiveSet:187
Type getType() const
Definition PrimitiveSet:181
virtual unsigned int index(unsigned int pos) const =0
void setMode(GLenum mode)
Definition PrimitiveSet:196
Mode
Definition PrimitiveSet:148
GLenum _mode
Definition PrimitiveSet:218
virtual void computeRange() const
Definition PrimitiveSet:210
virtual void offsetIndices(int offset)=0
Type
Definition PrimitiveSet:129
@ DrawElementsUByteIndirectPrimitiveType
Definition PrimitiveSet:138
@ DrawArrayLengthsPrimitiveType
Definition PrimitiveSet:132
@ MultiDrawElementsUByteIndirectPrimitiveType
Definition PrimitiveSet:142
@ MultiDrawArraysPrimitiveType
Definition PrimitiveSet:136
@ DrawElementsUIntPrimitiveType
Definition PrimitiveSet:135
@ DrawElementsUShortPrimitiveType
Definition PrimitiveSet:134
@ DrawArraysPrimitiveType
Definition PrimitiveSet:131
@ PrimitiveType
Definition PrimitiveSet:130
@ DrawArraysIndirectPrimitiveType
Definition PrimitiveSet:137
@ DrawElementsUBytePrimitiveType
Definition PrimitiveSet:133
@ DrawElementsUIntIndirectPrimitiveType
Definition PrimitiveSet:140
@ DrawElementsUShortIndirectPrimitiveType
Definition PrimitiveSet:139
@ MultiDrawElementsUShortIndirectPrimitiveType
Definition PrimitiveSet:143
@ MultiDrawArraysIndirectPrimitiveType
Definition PrimitiveSet:141
virtual unsigned int getNumPrimitives() const
virtual const DrawElements * getDrawElements() const
Definition PrimitiveSet:191
void setNumInstances(int n)
Definition PrimitiveSet:193
virtual bool supportsBufferObject() const
Definition PrimitiveSet:188
PrimitiveSet(Type primType=PrimitiveType, GLenum mode=0, int numInstances=0)
Definition PrimitiveSet:166
virtual void accept(PrimitiveIndexFunctor &functor) const =0
virtual const char * libraryName() const
Definition PrimitiveSet:178
virtual void draw(State &state, bool useVertexBufferObjects) const =0
virtual const char * className() const
Definition PrimitiveSet:179
GLenum getMode() const
Definition PrimitiveSet:197
PrimitiveSet(const PrimitiveSet &prim, const CopyOp ©op=CopyOp::SHALLOW_COPY)
Definition PrimitiveSet:171
virtual void accept(PrimitiveFunctor &functor) const =0
author: Julien Valentin 2017 (mp3butcher@hotmail.com)
Definition AlphaFunc:19
MixinVector< GLsizei > VectorGLsizei
Definition PrimitiveSet:36
MixinVector< GLuint > VectorGLuint
Definition PrimitiveSet:39
MixinVector< GLushort > VectorGLushort
Definition PrimitiveSet:38
MixinVector< GLubyte > VectorGLubyte
Definition PrimitiveSet:37
#define NULL
Definition osg/Export:55
#define OSG_EXPORT
Definition osg/Export:39