14 #ifndef OSG_PRIMITIVESET
15 #define OSG_PRIMITIVESET 1
19 #include <osg/buffered_value>
26 #include <osg/MixinVector>
28 #include <osg/BufferObject>
88 virtual void drawArrays(GLenum mode,GLint first,GLsizei count) = 0;
91 virtual void drawElements(GLenum mode,GLsizei count,
const GLubyte* indices) = 0;
94 virtual void drawElements(GLenum mode,GLsizei count,
const GLushort* indices) = 0;
97 virtual void drawElements(GLenum mode,GLsizei count,
const GLuint* indices) = 0;
100 virtual void begin(GLenum mode) = 0;
112 virtual void vertex(
float x,
float y) = 0;
115 virtual void vertex(
float x,
float y,
float z) = 0;
118 virtual void vertex(
float x,
float y,
float z,
float w) = 0;
121 virtual void end() = 0;
146 virtual void drawArrays(GLenum mode,GLint first,GLsizei count) = 0;
147 virtual void drawElements(GLenum mode,GLsizei count,
const GLubyte* indices) = 0;
148 virtual void drawElements(GLenum mode,GLsizei count,
const GLushort* indices) = 0;
149 virtual void drawElements(GLenum mode,GLsizei count,
const GLuint* indices) = 0;
151 virtual void begin(GLenum mode) = 0;
152 virtual void vertex(
unsigned int pos) = 0;
153 virtual void end() = 0;
177 DrawElementsUIntPrimitiveType
184 LINE_STRIP = GL_LINE_STRIP,
185 LINE_LOOP = GL_LINE_LOOP,
186 TRIANGLES = GL_TRIANGLES,
187 TRIANGLE_STRIP = GL_TRIANGLE_STRIP,
188 TRIANGLE_FAN = GL_TRIANGLE_FAN,
190 QUAD_STRIP = GL_QUAD_STRIP,
191 POLYGON = GL_POLYGON,
200 _primitiveType(primType),
201 _numInstances(numInstances),
206 _primitiveType(prim._primitiveType),
207 _numInstances(prim._numInstances),
212 virtual const char*
className()
const {
return "PrimitiveSet"; }
232 virtual void draw(
State& state,
bool useVertexBufferObjects)
const = 0;
237 virtual unsigned int index(
unsigned int pos)
const = 0;
238 virtual unsigned int getNumIndices()
const = 0;
239 virtual void offsetIndices(
int offset) = 0;
241 virtual unsigned int getNumPrimitives()
const;
263 DrawArrays(GLenum mode, GLint first, GLsizei count,
int numInstances=0):
264 PrimitiveSet(DrawArraysPrimitiveType, mode, numInstances),
277 virtual const char*
className()
const {
return "DrawArrays"; }
280 void set(GLenum mode,GLint first, GLsizei count)
293 virtual void draw(
State& state,
bool useVertexBufferObjects)
const;
298 virtual unsigned int getNumIndices()
const {
return static_cast<unsigned int>(_count); }
299 virtual unsigned int index(
unsigned int pos)
const {
return static_cast<unsigned int>(_first)+pos; }
323 _first(dal._first) {}
327 vector_type(ptr,ptr+no),
345 virtual const char*
className()
const {
return "DrawArrayLengths"; }
351 virtual void draw(
State& state,
bool useVertexBufferObjects)
const;
356 virtual unsigned int getNumIndices()
const;
357 virtual unsigned int index(
unsigned int pos)
const {
return _first+pos; }
360 virtual unsigned int getNumPrimitives()
const;
395 virtual void setElement(
unsigned int,
unsigned int) = 0;
396 virtual unsigned int getElement(
unsigned int) = 0;
415 vector_type(array) {}
421 DrawElements(DrawElementsUBytePrimitiveType,mode,numInstances),
422 vector_type(ptr,ptr+no) {}
435 virtual const char*
className()
const {
return "DrawElementsUByte"; }
438 virtual unsigned int getTotalDataSize()
const {
return static_cast<unsigned int>(size()); }
441 virtual void draw(
State& state,
bool useVertexBufferObjects)
const ;
446 virtual unsigned int getNumIndices()
const {
return static_cast<unsigned int>(size()); }
447 virtual unsigned int index(
unsigned int pos)
const {
return (*
this)[pos]; }
448 virtual void offsetIndices(
int offset);
453 virtual void setElement(
unsigned int i,
unsigned int v) { (*this)[i] = v; }
454 virtual unsigned int getElement(
unsigned int i) {
return (*
this)[i]; }
455 virtual void addElement(
unsigned int v) { push_back(GLubyte(v)); }
474 vector_type(array) {}
480 DrawElements(DrawElementsUShortPrimitiveType,mode,numInstances),
481 vector_type(ptr,ptr+no) {}
490 template <
class InputIterator>
493 vector_type(first,last) {}
499 virtual const char*
className()
const {
return "DrawElementsUShort"; }
502 virtual unsigned int getTotalDataSize()
const {
return 2u*
static_cast<unsigned int>(size()); }
505 virtual void draw(
State& state,
bool useVertexBufferObjects)
const;
510 virtual unsigned int getNumIndices()
const {
return static_cast<unsigned int>(size()); }
511 virtual unsigned int index(
unsigned int pos)
const {
return (*
this)[pos]; }
512 virtual void offsetIndices(
int offset);
517 virtual void setElement(
unsigned int i,
unsigned int v) { (*this)[i] = v; }
518 virtual unsigned int getElement(
unsigned int i) {
return (*
this)[i]; }
519 virtual void addElement(
unsigned int v) { push_back(GLushort(v)); }
537 vector_type(array) {}
544 DrawElements(DrawElementsUIntPrimitiveType,mode,numInstances),
545 vector_type(ptr,ptr+no) {}
554 template <
class InputIterator>
557 vector_type(first,last) {}
563 virtual const char*
className()
const {
return "DrawElementsUInt"; }
566 virtual unsigned int getTotalDataSize()
const {
return 4u*
static_cast<unsigned int>(size()); }
569 virtual void draw(
State& state,
bool useVertexBufferObjects)
const;
574 virtual unsigned int getNumIndices()
const {
return static_cast<unsigned int>(size()); }
575 virtual unsigned int index(
unsigned int pos)
const {
return (*
this)[pos]; }
576 virtual void offsetIndices(
int offset);
581 virtual void setElement(
unsigned int i,
unsigned int v) { (*this)[i] = v; }
582 virtual unsigned int getElement(
unsigned int i) {
return (*
this)[i]; }
583 virtual void addElement(
unsigned int v) { push_back(GLuint(v)); }
#define GL_TRIANGLE_STRIP_ADJACENCY
virtual unsigned int getElement(unsigned int i)
virtual void reserveElements(unsigned int numIndices)
virtual const char * className() const
std::vector< Vec3 > _vertexCache
virtual unsigned int getNumIndices() const
bool _treatVertexDataAsTemporary
virtual const char * className() const
virtual Object * cloneType() const
virtual void reserveElements(unsigned int numIndices)
virtual bool isSameKindAs(const Object *obj) const
DrawArrayLengths(GLenum mode, GLint first, unsigned int no, GLsizei *ptr)
virtual void setElement(unsigned int, unsigned int)=0
virtual void drawArrays(GLenum mode, GLint first, GLsizei count)=0
virtual Object * cloneType() const
virtual void end()=0
Mimics the OpenGL glEnd() function.
DrawArrayLengths(const DrawArrayLengths &dal, const CopyOp ©op=CopyOp::SHALLOW_COPY)
virtual void setElement(unsigned int i, unsigned int v)
virtual bool isSameKindAs(const Object *obj) const
std::vector< Vec3 > _vertexCache
virtual void vertex(unsigned int pos)=0
DrawElementsUInt(GLenum mode, unsigned int no)
virtual void drawElements(GLenum mode, GLsizei count, const GLubyte *indices)=0
virtual GLenum getDataType()
virtual Object * cloneType() const
DrawArrayLengths(GLenum mode, GLint first, unsigned int no)
virtual void drawElements(GLenum mode, GLsizei count, const GLubyte *indices)=0
Mimics the OpenGL glDrawElements() function.
virtual void addElement(unsigned int)=0
void setBufferObject(BufferObject *bufferObject)
virtual const DrawElements * getDrawElements() const
void setElementBufferObject(osg::ElementBufferObject *ebo)
virtual unsigned int index(unsigned int pos) const
virtual void resizeElements(unsigned int numIndices)=0
void setNumInstances(int n)
virtual unsigned int index(unsigned int pos) const
virtual void computeRange() const
DrawElementsUInt(GLenum mode=0)
virtual const char * className() const
virtual bool isSameKindAs(const Object *obj) const
MixinVector< GLuint > VectorGLuint
virtual const char * libraryName() const
virtual void vertex(const Vec2 &vert)=0
Mimics the OpenGL glVertex() "family of functions".
DrawElements(const DrawElements ©, const CopyOp ©op=CopyOp::SHALLOW_COPY)
virtual void drawArrays(GLenum mode, GLint first, GLsizei count)=0
Mimics the OpenGL glDrawArrays() function.
virtual bool isSameKindAs(const Object *obj) const
virtual unsigned int index(unsigned int pos) const
virtual void addElement(unsigned int v)
virtual void addElement(unsigned int v)
DrawElementsUByte(const DrawElementsUByte &array, const CopyOp ©op=CopyOp::SHALLOW_COPY)
const osg::ElementBufferObject * getElementBufferObject() const
DrawArrays(GLenum mode=0)
virtual unsigned int getElement(unsigned int i)
virtual void begin(GLenum mode)=0
MixinVector< GLushort > VectorGLushort
virtual void reserveElements(unsigned int numIndices)
virtual GLenum getDataType()=0
virtual unsigned int getElement(unsigned int)=0
virtual const osg::PrimitiveSet * asPrimitiveSet() const
bool _treatVertexDataAsTemporary
virtual const char * className() const
void setMode(GLenum mode)
virtual DrawElements * getDrawElements()
DrawElements(Type primType=PrimitiveType, GLenum mode=0, int numInstances=0)
virtual bool isSameKindAs(const Object *obj) const
virtual Object * cloneType() const
virtual unsigned int getTotalDataSize() const
virtual const char * libraryName() const
virtual ~PrimitiveFunctor()
virtual GLenum getDataType()
VectorGLubyte vector_type
void useVertexCacheAsVertexArray()
void useVertexCacheAsVertexArray()
virtual void setVertexArray(unsigned int count, const Vec2 *vertices)=0
virtual ~DrawArrayLengths()
virtual bool supportsBufferObject() const
virtual ~PrimitiveIndexFunctor()
virtual void resizeElements(unsigned int numIndices)
virtual const char * libraryName() const
virtual unsigned int index(unsigned int pos) const
virtual const char * libraryName() const
DrawElementsUByte(GLenum mode, unsigned int no)
#define GL_LINE_STRIP_ADJACENCY
DrawElementsUShort(GLenum mode=0)
PrimitiveSet(Type primType=PrimitiveType, GLenum mode=0, int numInstances=0)
void setFirst(GLint first)
virtual unsigned int getNumIndices() const
virtual void setElement(unsigned int i, unsigned int v)
virtual const char * className() const
virtual void offsetIndices(int offset)
virtual const GLvoid * getDataPointer() const
virtual const char * libraryName() const
DrawElementsUShort(GLenum mode, unsigned int no, const GLushort *ptr, int numInstances=0)
DrawArrays(GLenum mode, GLint first, GLsizei count, int numInstances=0)
virtual unsigned int index(unsigned int pos) const
DrawElementsUByte(GLenum mode=0)
virtual osg::PrimitiveSet * asPrimitiveSet()
virtual const GLvoid * getDataPointer() const
DrawElementsUShort(GLenum mode, unsigned int no)
virtual void offsetIndices(int offset)
virtual bool supportsBufferObject() const
MixinVector< GLsizei > VectorGLsizei
void setCount(GLsizei count)
virtual const char * libraryName() const
void set(GLenum mode, GLint first, GLsizei count)
virtual void begin(GLenum mode)=0
Mimics the OpenGL glBegin() function.
virtual const char * className() const
DrawArrayLengths(GLenum mode=0)
virtual const GLvoid * getDataPointer() const
virtual void reserveElements(unsigned int numIndices)=0
MixinVector< GLubyte > VectorGLubyte
virtual const GLvoid * getDataPointer() const
VectorGLushort vector_type
virtual bool supportsBufferObject() const
virtual Object * cloneType() const
virtual const DrawElements * getDrawElements() const
DrawElementsUShort(const DrawElementsUShort &array, const CopyOp ©op=CopyOp::SHALLOW_COPY)
virtual unsigned int getElement(unsigned int i)
virtual Object * clone(const CopyOp ©op) const
#define GL_TRIANGLES_ADJACENCY
virtual unsigned int getNumIndices() const
virtual Object * clone(const CopyOp ©op) const
DrawArrayLengths(GLenum mode, GLint first)
virtual GLenum getDataType()
DrawElementsUInt(GLenum mode, InputIterator first, InputIterator last)
virtual DrawElements * getDrawElements()
virtual void setElement(unsigned int i, unsigned int v)
virtual Object * clone(const CopyOp ©op) const
void setFirst(GLint first)
osg::ref_ptr< BufferObject > _bufferObject
DrawElementsUInt(const DrawElementsUInt &array, const CopyOp ©op=CopyOp::SHALLOW_COPY)
virtual Object * clone(const CopyOp ©op) const
DrawArrays(const DrawArrays &da, const CopyOp ©op=CopyOp::SHALLOW_COPY)
#define GL_LINES_ADJACENCY
DrawElementsUShort(GLenum mode, InputIterator first, InputIterator last)
virtual Object * clone(const CopyOp ©op) const
virtual bool supportsBufferObject() const
virtual void addElement(unsigned int v)
PrimitiveSet(const PrimitiveSet &prim, const CopyOp ©op=CopyOp::SHALLOW_COPY)
virtual void resizeElements(unsigned int numIndices)
VectorGLsizei vector_type
virtual unsigned int getTotalDataSize() const
virtual unsigned int getTotalDataSize() const
DrawElementsUByte(GLenum mode, unsigned int no, const GLubyte *ptr, int numInstances=0)
virtual void setVertexArray(unsigned int count, const Vec2 *vertices)=0
int getNumInstances() const
DrawElementsUInt(GLenum mode, unsigned int no, const GLuint *ptr, int numInstances=0)
virtual bool isSameKindAs(const Object *obj) const
virtual void resizeElements(unsigned int numIndices)
virtual unsigned int getNumIndices() const
virtual unsigned int getTotalDataSize() const
osg::ElementBufferObject * getElementBufferObject()