17 #include <osg/MixinVector>
44 #include <osg/Matrixd>
46 #include <osg/BufferObject>
54 class ConstArrayVisitor;
57 class ConstValueVisitor;
100 Vec3uiArrayType = 25,
101 Vec4uiArrayType = 26,
111 MatrixArrayType = 33,
112 MatrixdArrayType = 34
120 BIND_PER_PRIMITIVE_SET=2,
124 Array(
Type arrayType=ArrayType,GLint dataSize=0,GLenum dataType=0,
Binding binding=BIND_UNDEFINED):
125 _arrayType(arrayType),
130 _preserveDataType(false) {}
134 _arrayType(array._arrayType),
135 _dataSize(array._dataSize),
136 _dataType(array._dataType),
137 _binding(array._binding),
138 _normalize(array._normalize),
139 _preserveDataType(array._preserveDataType) {}
143 virtual const char* className()
const;
148 virtual void accept(
unsigned int index,
ValueVisitor&) = 0;
153 virtual int compare(
unsigned int lhs,
unsigned int rhs)
const = 0;
162 virtual unsigned int getElementSize()
const = 0;
163 virtual const GLvoid* getDataPointer()
const = 0;
164 virtual unsigned int getTotalDataSize()
const = 0;
165 virtual unsigned int getNumElements()
const = 0;
166 virtual void reserveArray(
unsigned int num) = 0;
167 virtual void resizeArray(
unsigned int num) = 0;
222 template<
typename T, Array::Type ARRAYTYPE,
int DataSize,
int DataType>
234 Array(ARRAYTYPE,DataSize,DataType),
238 Array(ARRAYTYPE,DataSize,DataType),
242 Array(ARRAYTYPE,DataSize,DataType, binding),
246 Array(ARRAYTYPE,DataSize,DataType, binding),
249 template <
class InputIterator>
251 Array(ARRAYTYPE,DataSize,DataType),
256 if (
this==&array)
return *
this;
270 virtual int compare(
unsigned int lhs,
unsigned int rhs)
const
272 const T& elem_lhs = (*this)[lhs];
273 const T& elem_rhs = (*this)[rhs];
274 if (elem_lhs<elem_rhs)
return -1;
275 if (elem_rhs<elem_lhs)
return 1;
305 Array(arrayType,dataSize,dataType) {}
308 Array(array,copyop) {}
312 virtual unsigned int index(
unsigned int pos)
const = 0;
319 template<
typename T, Array::Type ARRAYTYPE,
int DataSize,
int DataType>
338 template <
class InputIterator>
345 if (
this==&array)
return *
this;
359 virtual int compare(
unsigned int lhs,
unsigned int rhs)
const
361 const T& elem_lhs = (*this)[lhs];
362 const T& elem_rhs = (*this)[rhs];
363 if (elem_lhs<elem_rhs)
return -1;
364 if (elem_rhs<elem_lhs)
return 1;
381 virtual unsigned int index(
unsigned int pos)
const {
return (*
this)[pos]; }
490 virtual void apply(MatrixfArray&) {}
491 virtual void apply(MatrixdArray&) {}
502 virtual void apply(
const ByteArray&) {}
503 virtual void apply(
const ShortArray&) {}
504 virtual void apply(
const IntArray&) {}
506 virtual void apply(
const UByteArray&) {}
507 virtual void apply(
const UShortArray&) {}
508 virtual void apply(
const UIntArray&) {}
510 virtual void apply(
const FloatArray&) {}
511 virtual void apply(
const DoubleArray&) {}
514 virtual void apply(
const Vec2bArray&) {}
515 virtual void apply(
const Vec3bArray&) {}
516 virtual void apply(
const Vec4bArray&) {}
518 virtual void apply(
const Vec2sArray&) {}
519 virtual void apply(
const Vec3sArray&) {}
520 virtual void apply(
const Vec4sArray&) {}
522 virtual void apply(
const Vec2iArray&) {}
523 virtual void apply(
const Vec3iArray&) {}
524 virtual void apply(
const Vec4iArray&) {}
526 virtual void apply(
const Vec2ubArray&) {}
527 virtual void apply(
const Vec3ubArray&) {}
528 virtual void apply(
const Vec4ubArray&) {}
530 virtual void apply(
const Vec2usArray&) {}
531 virtual void apply(
const Vec3usArray&) {}
532 virtual void apply(
const Vec4usArray&) {}
534 virtual void apply(
const Vec2uiArray&) {}
535 virtual void apply(
const Vec3uiArray&) {}
536 virtual void apply(
const Vec4uiArray&) {}
538 virtual void apply(
const Vec2Array&) {}
539 virtual void apply(
const Vec3Array&) {}
540 virtual void apply(
const Vec4Array&) {}
542 virtual void apply(
const Vec2dArray&) {}
543 virtual void apply(
const Vec3dArray&) {}
544 virtual void apply(
const Vec4dArray&) {}
546 virtual void apply(
const MatrixfArray&) {}
547 virtual void apply(
const MatrixdArray&) {}
611 virtual void apply(
const GLbyte&) {}
612 virtual void apply(
const GLshort&) {}
615 virtual void apply(
const GLushort&) {}
616 virtual void apply(
const GLubyte&) {}
617 virtual void apply(
const GLuint&) {}
619 virtual void apply(
const GLfloat&) {}
659 template<
typename T, Array::Type ARRAYTYPE,
int DataSize,
int DataType>
662 template<
typename T, Array::Type ARRAYTYPE,
int DataSize,
int DataType>
665 template<
typename T, Array::Type ARRAYTYPE,
int DataSize,
int DataType>
668 template<
typename T, Array::Type ARRAYTYPE,
int DataSize,
int DataType>
671 template<
typename T, Array::Type ARRAYTYPE,
int DataSize,
int DataType>
674 template<
typename T, Array::Type ARRAYTYPE,
int DataSize,
int DataType>
677 template<
typename T, Array::Type ARRAYTYPE,
int DataSize,
int DataType>
680 template<
typename T, Array::Type ARRAYTYPE,
int DataSize,
int DataType>
TemplateIndexArray< GLshort, Array::ShortArrayType, 1, GL_SHORT > ShortArray
virtual void apply(const UShortArray &)
TemplateArray< Vec4ub, Array::Vec4ubArrayType, 4, GL_UNSIGNED_BYTE > Vec4ubArray
virtual Object * clone(const CopyOp ©op) const
Array(const Array &array, const CopyOp ©op=CopyOp::SHALLOW_COPY)
GLint getDataSize() const
IndexArray(Type arrayType=ArrayType, GLint dataSize=0, GLenum dataType=0)
virtual void apply(FloatArray &)
virtual void apply(const Vec3ui &)
virtual void apply(Vec4us &)
virtual unsigned int getTotalDataSize() const
TemplateArray & operator=(const TemplateArray &array)
virtual void apply(IntArray &)
virtual void apply(const Vec3usArray &)
TemplateArray(unsigned int no, const T *ptr)
virtual void apply(const Vec3uiArray &)
TemplateArray< Vec3ui, Array::Vec3uiArrayType, 3, GL_UNSIGNED_INT > Vec3uiArray
virtual void apply(GLdouble &)
virtual void apply(Vec4b &)
virtual void apply(const Matrixf &)
virtual void reserveArray(unsigned int num)
virtual void apply(Vec4ub &)
TemplateArray< Vec2d, Array::Vec2dArrayType, 2, GL_DOUBLE > Vec2dArray
virtual void apply(const DoubleArray &)
virtual Object * clone(const CopyOp ©op) const
virtual void apply(const GLbyte &)
virtual void apply(Vec2dArray &)
virtual void apply(Vec3Array &)
TemplateArray< Vec4, Array::Vec4ArrayType, 4, GL_FLOAT > Vec4Array
TemplateArray< Matrixd, Array::MatrixdArrayType, 16, GL_DOUBLE > MatrixdArray
virtual void apply(const MatrixfArray &)
virtual void apply(Matrixf &)
virtual void apply(MatrixfArray &)
virtual void apply(const Vec4usArray &)
virtual void apply(MatrixdArray &)
TemplateArray< GLdouble, Array::DoubleArrayType, 1, GL_DOUBLE > DoubleArray
osg::Array::Binding getBinding(const osg::Array *array)
virtual void apply(const GLushort &)
virtual void apply(Vec2us &)
virtual void apply(GLint &)
TemplateArray< Vec2us, Array::Vec2usArrayType, 2, GL_UNSIGNED_SHORT > Vec2usArray
void setNormalize(bool normalize)
virtual void apply(const Vec4d &)
virtual void apply(Vec3iArray &)
virtual void apply(Vec3i &)
virtual void apply(const Vec3Array &)
virtual void apply(const GLint &)
TemplateIndexArray(unsigned int no, T *ptr)
virtual ~ConstArrayVisitor()
TemplateArray(Binding binding=BIND_UNDEFINED)
virtual void apply(Vec3 &)
virtual void apply(const Vec4s &)
TemplateArray< Vec4us, Array::Vec4usArrayType, 4, GL_UNSIGNED_SHORT > Vec4usArray
TemplateIndexArray< GLuint, Array::UIntArrayType, 1, GL_UNSIGNED_INT > UIntArray
virtual void apply(GLubyte &)
virtual void apply(const Vec2uiArray &)
virtual void apply(Vec4dArray &)
virtual void apply(const Vec3i &)
TemplateArray< GLfloat, Array::FloatArrayType, 1, GL_FLOAT > FloatArray
virtual void apply(const Vec4ub &)
virtual void apply(const Vec2 &)
virtual void apply(const Vec2ub &)
virtual void apply(Vec2ubArray &)
virtual void apply(const Vec3us &)
virtual void apply(Vec4ui &)
virtual void apply(const Vec4iArray &)
virtual void apply(const Vec2usArray &)
virtual void apply(Vec4uiArray &)
const_iterator begin() const
virtual void apply(Vec2s &)
virtual void apply(GLfloat &)
virtual void apply(Vec3usArray &)
virtual void apply(const Vec3s &)
virtual void apply(Vec4usArray &)
virtual unsigned int getElementSize() const
virtual void apply(Vec4s &)
void assign(size_type count, const value_type &value)
virtual unsigned int getNumElements() const
const_iterator end() const
virtual void apply(ByteArray &)
virtual void apply(Vec4bArray &)
const osg::VertexBufferObject * getVertexBufferObject() const
virtual void apply(Vec2ub &)
TemplateArray< Vec4b, Array::Vec4bArrayType, 4, GL_BYTE > Vec4bArray
virtual void apply(const Vec2s &)
virtual void apply(const Vec2i &)
virtual const GLvoid * getDataPointer() const
virtual void apply(UIntArray &)
TemplateArray< Vec3d, Array::Vec3dArrayType, 3, GL_DOUBLE > Vec3dArray
virtual void apply(Vec2bArray &)
TemplateArray< Vec3, Array::Vec3ArrayType, 3, GL_FLOAT > Vec3Array
virtual void apply(Vec3ubArray &)
virtual void apply(const Vec3iArray &)
TemplateArray(Binding binding, unsigned int no, const T *ptr)
TemplateArray< Vec2ui, Array::Vec2uiArrayType, 2, GL_UNSIGNED_INT > Vec2uiArray
TemplateArray< Vec4i, Array::Vec4iArrayType, 4, GL_INT > Vec4iArray
virtual void apply(const Vec2d &)
virtual void apply(Vec3b &)
virtual void apply(const GLdouble &)
TemplateArray(unsigned int no)
virtual const osg::Array * asArray() const
virtual void apply(DoubleArray &)
virtual void apply(Vec3uiArray &)
virtual void apply(const Vec2bArray &)
virtual void apply(const Vec3 &)
virtual void apply(Vec2ui &)
virtual void apply(ShortArray &)
virtual void apply(Vec2usArray &)
Binding getBinding() const
virtual void apply(const Vec2Array &)
TemplateIndexArray(const TemplateIndexArray &ta, const CopyOp ©op=CopyOp::SHALLOW_COPY)
virtual osg::Array * asArray()
virtual int compare(unsigned int lhs, unsigned int rhs) const
virtual unsigned int getElementSize() const
TemplateArray< Matrixf, Array::MatrixArrayType, 16, GL_FLOAT > MatrixfArray
virtual void apply(Vec2uiArray &)
TemplateIndexArray< GLushort, Array::UShortArrayType, 1, GL_UNSIGNED_SHORT > UShortArray
virtual const GLvoid * getDataPointer() const
TemplateArray< Vec3b, Array::Vec3bArrayType, 3, GL_BYTE > Vec3bArray
virtual void apply(UShortArray &)
virtual void resizeArray(unsigned int num)
virtual void apply(Vec2i &)
virtual void apply(const Vec4dArray &)
TemplateIndexArray< GLbyte, Array::ByteArrayType, 1, GL_BYTE > ByteArray
virtual void apply(const GLubyte &)
virtual void apply(Vec4 &)
virtual const char * libraryName() const
TemplateArray(Binding binding, unsigned int no)
virtual void apply(Vec2Array &)
virtual void apply(const Vec4bArray &)
osg::VertexBufferObject * getVertexBufferObject()
virtual void apply(Vec2 &)
virtual void apply(const Vec3d &)
TemplateArray< Vec4ui, Array::Vec4uiArrayType, 4, GL_UNSIGNED_INT > Vec4uiArray
virtual void apply(const Vec2sArray &)
virtual void apply(const Matrixd &)
TemplateIndexArray< GLint, Array::IntArrayType, 1, GL_INT > IntArray
TemplateIndexArray(unsigned int no)
TemplateArray< Vec2s, Array::Vec2sArrayType, 2, GL_SHORT > Vec2sArray
virtual void apply(Vec3ui &)
virtual unsigned int getNumElements() const
virtual void apply(GLushort &)
virtual void apply(const GLfloat &)
virtual void apply(const Vec3sArray &)
virtual void apply(const Vec3ub &)
virtual void apply(const Array &)
bool getNormalize(const osg::Array *array)
virtual void apply(GLshort &)
virtual void apply(Vec3d &)
TemplateArray< Vec4s, Array::Vec4sArrayType, 4, GL_SHORT > Vec4sArray
const_reference front() const
TemplateArray< Vec2b, Array::Vec2bArrayType, 2, GL_BYTE > Vec2bArray
bool getPreserveDataType() const
virtual void apply(const Vec2us &)
TemplateArray< Vec3ub, Array::Vec3ubArrayType, 3, GL_UNSIGNED_BYTE > Vec3ubArray
void setPreserveDataType(bool preserve)
GLenum getDataType() const
virtual void apply(GLuint &)
virtual void apply(const UByteArray &)
virtual Object * cloneType() const
TemplateIndexArray(InputIterator first, InputIterator last)
TemplateArray< Vec3s, Array::Vec3sArrayType, 3, GL_SHORT > Vec3sArray
TemplateArray< Vec3us, Array::Vec3usArrayType, 3, GL_UNSIGNED_SHORT > Vec3usArray
virtual ~ConstValueVisitor()
virtual void apply(const Vec2dArray &)
virtual void apply(Vec4sArray &)
TemplateArray< Vec4d, Array::Vec4dArrayType, 4, GL_DOUBLE > Vec4dArray
void swap(vector_type &other)
virtual int compare(unsigned int lhs, unsigned int rhs) const
virtual bool isSameKindAs(const Object *obj) const
virtual void apply(const Vec3bArray &)
virtual void apply(Matrixd &)
virtual void apply(Vec3us &)
TemplateIndexArray & operator=(const TemplateIndexArray &array)
virtual void apply(Vec4Array &)
virtual void apply(const Vec2b &)
virtual void apply(const MatrixdArray &)
virtual void apply(const Vec4b &)
TemplateArray< Vec2i, Array::Vec2iArrayType, 2, GL_INT > Vec2iArray
virtual void apply(Vec3ub &)
virtual void apply(Vec3s &)
virtual void apply(const Vec3ubArray &)
virtual void apply(Array &)
virtual void resizeArray(unsigned int num)
virtual void apply(const Vec4Array &)
void resize(size_type new_size, const value_type &fill_value=value_type())
virtual void apply(const GLuint &)
virtual void apply(Vec4ubArray &)
virtual bool isSameKindAs(const Object *obj) const
TemplateArray< Vec3i, Array::Vec3iArrayType, 3, GL_INT > Vec3iArray
virtual void apply(const ByteArray &)
virtual void apply(GLbyte &)
virtual void apply(const UIntArray &)
virtual void apply(Vec2sArray &)
virtual void apply(const Vec3b &)
IndexArray(const Array &array, const CopyOp ©op=CopyOp::SHALLOW_COPY)
virtual void apply(const Vec4uiArray &)
virtual void apply(Vec2iArray &)
virtual void apply(const Vec4ui &)
virtual void apply(Vec4iArray &)
virtual void apply(const IntArray &)
void setBinding(Binding binding)
void setVertexBufferObject(osg::VertexBufferObject *vbo)
virtual void apply(Vec2b &)
virtual void accept(ArrayVisitor &av)
virtual void apply(const Vec4us &)
TemplateIndexArray< GLubyte, Array::UByteArrayType, 1, GL_UNSIGNED_BYTE > UByteArray
virtual void apply(const GLshort &)
void reserve(size_type new_capacity)
virtual void apply(const Vec2ui &)
virtual void apply(const Vec2ubArray &)
virtual void apply(Vec3sArray &)
virtual void apply(UByteArray &)
TemplateArray(InputIterator first, InputIterator last)
TemplateArray< Vec2ub, Array::Vec2ubArrayType, 2, GL_UNSIGNED_BYTE > Vec2ubArray
virtual void apply(const FloatArray &)
virtual void apply(const Vec4i &)
virtual void apply(Vec4d &)
virtual void apply(const Vec4ubArray &)
Array(Type arrayType=ArrayType, GLint dataSize=0, GLenum dataType=0, Binding binding=BIND_UNDEFINED)
virtual void reserveArray(unsigned int num)
virtual void apply(const Vec4 &)
virtual void apply(Vec3dArray &)
virtual void apply(Vec3bArray &)
virtual ~TemplateIndexArray()
virtual void apply(Vec2d &)
virtual Object * cloneType() const
virtual void accept(ArrayVisitor &av)
virtual unsigned int getTotalDataSize() const
virtual void apply(const ShortArray &)
virtual unsigned int index(unsigned int pos) const
virtual void apply(Vec4i &)
virtual void apply(const Vec3dArray &)
virtual void apply(const Vec2iArray &)
virtual void apply(const Vec4sArray &)
bool getNormalize() const
TemplateArray< Vec2, Array::Vec2ArrayType, 2, GL_FLOAT > Vec2Array
TemplateArray(const TemplateArray &ta, const CopyOp ©op=CopyOp::SHALLOW_COPY)