OSG  3.4.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Array.h
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 
14 #ifndef OSG_ARRAY
15 #define OSG_ARRAY 1
16 
17 #include <osg/MixinVector>
18 
19 #include <osg/Vec2b>
20 #include <osg/Vec3b>
21 #include <osg/Vec4b>
22 #include <osg/Vec2s>
23 #include <osg/Vec3s>
24 #include <osg/Vec4s>
25 #include <osg/Vec2i>
26 #include <osg/Vec3i>
27 #include <osg/Vec4i>
28 #include <osg/Vec2ub>
29 #include <osg/Vec3ub>
30 #include <osg/Vec4ub>
31 #include <osg/Vec2us>
32 #include <osg/Vec3us>
33 #include <osg/Vec4us>
34 #include <osg/Vec2ui>
35 #include <osg/Vec3ui>
36 #include <osg/Vec4ui>
37 #include <osg/Vec2>
38 #include <osg/Vec3>
39 #include <osg/Vec4>
40 #include <osg/Vec2d>
41 #include <osg/Vec3d>
42 #include <osg/Vec4d>
43 #include <osg/Matrix>
44 #include <osg/Matrixd>
45 
46 #include <osg/BufferObject>
47 
48 #include <osg/Object>
49 #include <osg/GL>
50 
51 namespace osg {
52 
53 class ArrayVisitor;
54 class ConstArrayVisitor;
55 
56 class ValueVisitor;
57 class ConstValueVisitor;
58 
59 class OSG_EXPORT Array : public BufferData
60 {
61 
62  public:
63 
64  enum Type
65  {
66  ArrayType = 0,
67 
68  ByteArrayType = 1,
69  ShortArrayType = 2,
70  IntArrayType = 3,
71 
72  UByteArrayType = 4,
73  UShortArrayType = 5,
74  UIntArrayType = 6,
75 
76  FloatArrayType = 7,
77  DoubleArrayType = 8,
78 
79  Vec2bArrayType = 9,
80  Vec3bArrayType = 10,
81  Vec4bArrayType = 11,
82 
83  Vec2sArrayType = 12,
84  Vec3sArrayType = 13,
85  Vec4sArrayType = 14,
86 
87  Vec2iArrayType = 15,
88  Vec3iArrayType = 16,
89  Vec4iArrayType = 17,
90 
91  Vec2ubArrayType = 18,
92  Vec3ubArrayType = 19,
93  Vec4ubArrayType = 20,
94 
95  Vec2usArrayType = 21,
96  Vec3usArrayType = 22,
97  Vec4usArrayType = 23,
98 
99  Vec2uiArrayType = 24,
100  Vec3uiArrayType = 25,
101  Vec4uiArrayType = 26,
102 
103  Vec2ArrayType = 27,
104  Vec3ArrayType = 28,
105  Vec4ArrayType = 29,
106 
107  Vec2dArrayType = 30,
108  Vec3dArrayType = 31,
109  Vec4dArrayType = 32,
110 
111  MatrixArrayType = 33,
112  MatrixdArrayType = 34
113  };
114 
115  enum Binding
116  {
117  BIND_UNDEFINED=-1,
118  BIND_OFF=0,
119  BIND_OVERALL=1,
120  BIND_PER_PRIMITIVE_SET=2,
121  BIND_PER_VERTEX=4
122  };
123 
124  Array(Type arrayType=ArrayType,GLint dataSize=0,GLenum dataType=0, Binding binding=BIND_UNDEFINED):
125  _arrayType(arrayType),
126  _dataSize(dataSize),
127  _dataType(dataType),
128  _binding(binding),
129  _normalize(false),
130  _preserveDataType(false) {}
131 
132  Array(const Array& array,const CopyOp& copyop=CopyOp::SHALLOW_COPY):
133  BufferData(array,copyop),
134  _arrayType(array._arrayType),
135  _dataSize(array._dataSize),
136  _dataType(array._dataType),
137  _binding(array._binding),
138  _normalize(array._normalize),
139  _preserveDataType(array._preserveDataType) {}
140 
141  virtual bool isSameKindAs(const Object* obj) const { return dynamic_cast<const Array*>(obj)!=NULL; }
142  virtual const char* libraryName() const { return "osg"; }
143  virtual const char* className() const;
144 
145  virtual void accept(ArrayVisitor&) = 0;
146  virtual void accept(ConstArrayVisitor&) const = 0;
147 
148  virtual void accept(unsigned int index,ValueVisitor&) = 0;
149  virtual void accept(unsigned int index,ConstValueVisitor&) const = 0;
150 
153  virtual int compare(unsigned int lhs,unsigned int rhs) const = 0;
154 
155  Type getType() const { return _arrayType; }
156  GLint getDataSize() const { return _dataSize; }
157  GLenum getDataType() const { return _dataType; }
158 
159  virtual osg::Array* asArray() { return this; }
160  virtual const osg::Array* asArray() const { return this; }
161 
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;
168 
169 
171  void setBinding(Binding binding) { _binding = binding; }
172 
174  Binding getBinding() const { return _binding; }
175 
176 
178  void setNormalize(bool normalize) { _normalize = normalize; }
179 
181  bool getNormalize() const { return _normalize; }
182 
183 
185  void setPreserveDataType(bool preserve) { _preserveDataType = preserve; }
186 
188  bool getPreserveDataType() const { return _preserveDataType; }
189 
190 
192  virtual void trim() {}
193 
195  inline void setVertexBufferObject(osg::VertexBufferObject* vbo) { setBufferObject(vbo); }
196 
198  inline osg::VertexBufferObject* getVertexBufferObject() { return dynamic_cast<osg::VertexBufferObject*>(_bufferObject.get()); }
199 
201  inline const osg::VertexBufferObject* getVertexBufferObject() const { return dynamic_cast<const osg::VertexBufferObject*>(_bufferObject.get()); }
202 
203  protected:
204 
205  virtual ~Array() {}
206 
208  GLint _dataSize;
209  GLenum _dataType;
213 };
214 
216 inline osg::Array::Binding getBinding(const osg::Array* array) { return array ? array->getBinding() : osg::Array::BIND_OFF; }
217 
219 inline bool getNormalize(const osg::Array* array) { return array ? array->getNormalize() : false; }
220 
221 
222 template<typename T, Array::Type ARRAYTYPE, int DataSize, int DataType>
223 class TemplateArray : public Array, public MixinVector<T>
224 {
225  public:
226 
227  TemplateArray(Binding binding=BIND_UNDEFINED) : Array(ARRAYTYPE,DataSize,DataType, binding) {}
228 
230  Array(ta,copyop),
231  MixinVector<T>(ta) {}
232 
233  TemplateArray(unsigned int no) :
234  Array(ARRAYTYPE,DataSize,DataType),
235  MixinVector<T>(no) {}
236 
237  TemplateArray(unsigned int no,const T* ptr) :
238  Array(ARRAYTYPE,DataSize,DataType),
239  MixinVector<T>(ptr,ptr+no) {}
240 
241  TemplateArray(Binding binding, unsigned int no) :
242  Array(ARRAYTYPE,DataSize,DataType, binding),
243  MixinVector<T>(no) {}
244 
245  TemplateArray(Binding binding, unsigned int no,const T* ptr) :
246  Array(ARRAYTYPE,DataSize,DataType, binding),
247  MixinVector<T>(ptr,ptr+no) {}
248 
249  template <class InputIterator>
250  TemplateArray(InputIterator first,InputIterator last) :
251  Array(ARRAYTYPE,DataSize,DataType),
252  MixinVector<T>(first,last) {}
253 
255  {
256  if (this==&array) return *this;
257  this->assign(array.begin(),array.end());
258  return *this;
259  }
260 
261  virtual Object* cloneType() const { return new TemplateArray(); }
262  virtual Object* clone(const CopyOp& copyop) const { return new TemplateArray(*this,copyop); }
263 
264  inline virtual void accept(ArrayVisitor& av);
265  inline virtual void accept(ConstArrayVisitor& av) const;
266 
267  inline virtual void accept(unsigned int index,ValueVisitor& vv);
268  inline virtual void accept(unsigned int index,ConstValueVisitor& vv) const;
269 
270  virtual int compare(unsigned int lhs,unsigned int rhs) const
271  {
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;
276  return 0;
277  }
278 
280  virtual void trim()
281  {
282  MixinVector<T>( *this ).swap( *this );
283  }
284 
285  virtual unsigned int getElementSize() const { return sizeof(ElementDataType); }
286  virtual const GLvoid* getDataPointer() const { if (!this->empty()) return &this->front(); else return 0; }
287  virtual unsigned int getTotalDataSize() const { return static_cast<unsigned int>(this->size()*sizeof(ElementDataType)); }
288  virtual unsigned int getNumElements() const { return static_cast<unsigned int>(this->size()); }
289  virtual void reserveArray(unsigned int num) { this->reserve(num); }
290  virtual void resizeArray(unsigned int num) { this->resize(num); }
291 
292  typedef T ElementDataType; // expose T
293 
294  protected:
295 
296  virtual ~TemplateArray() {}
297 };
298 
300 {
301 
302  public:
303 
304  IndexArray(Type arrayType=ArrayType,GLint dataSize=0,GLenum dataType=0):
305  Array(arrayType,dataSize,dataType) {}
306 
307  IndexArray(const Array& array,const CopyOp& copyop=CopyOp::SHALLOW_COPY):
308  Array(array,copyop) {}
309 
310  virtual bool isSameKindAs(const Object* obj) const { return dynamic_cast<const IndexArray*>(obj)!=NULL; }
311 
312  virtual unsigned int index(unsigned int pos) const = 0;
313 
314  protected:
315 
316  virtual ~IndexArray() {}
317 };
318 
319 template<typename T, Array::Type ARRAYTYPE, int DataSize, int DataType>
320 class TemplateIndexArray : public IndexArray, public MixinVector<T>
321 {
322  public:
323 
324  TemplateIndexArray() : IndexArray(ARRAYTYPE,DataSize,DataType) {}
325 
327  IndexArray(ta,copyop),
328  MixinVector<T>(ta) {}
329 
330  TemplateIndexArray(unsigned int no) :
331  IndexArray(ARRAYTYPE,DataSize,DataType),
332  MixinVector<T>(no) {}
333 
334  TemplateIndexArray(unsigned int no,T* ptr) :
335  IndexArray(ARRAYTYPE,DataSize,DataType),
336  MixinVector<T>(ptr,ptr+no) {}
337 
338  template <class InputIterator>
339  TemplateIndexArray(InputIterator first,InputIterator last) :
340  IndexArray(ARRAYTYPE,DataSize,DataType),
341  MixinVector<T>(first,last) {}
342 
344  {
345  if (this==&array) return *this;
346  this->assign(array.begin(),array.end());
347  return *this;
348  }
349 
350  virtual Object* cloneType() const { return new TemplateIndexArray(); }
351  virtual Object* clone(const CopyOp& copyop) const { return new TemplateIndexArray(*this,copyop); }
352 
353  inline virtual void accept(ArrayVisitor& av);
354  inline virtual void accept(ConstArrayVisitor& av) const;
355 
356  inline virtual void accept(unsigned int index,ValueVisitor& vv);
357  inline virtual void accept(unsigned int index,ConstValueVisitor& vv) const;
358 
359  virtual int compare(unsigned int lhs,unsigned int rhs) const
360  {
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;
365  return 0;
366  }
367 
369  virtual void trim()
370  {
371  MixinVector<T>( *this ).swap( *this );
372  }
373 
374  virtual unsigned int getElementSize() const { return sizeof(ElementDataType); }
375  virtual const GLvoid* getDataPointer() const { if (!this->empty()) return &this->front(); else return 0; }
376  virtual unsigned int getTotalDataSize() const { return static_cast<unsigned int>(this->size()*sizeof(T)); }
377  virtual unsigned int getNumElements() const { return static_cast<unsigned int>(this->size()); }
378  virtual void reserveArray(unsigned int num) { this->reserve(num); }
379  virtual void resizeArray(unsigned int num) { this->resize(num); }
380 
381  virtual unsigned int index(unsigned int pos) const { return (*this)[pos]; }
382 
383  typedef T ElementDataType; // expose T
384 
385  protected:
386 
387  virtual ~TemplateIndexArray() {}
388 };
389 
393 
397 
400 
401 
405 
409 
413 
417 
421 
425 
429 
433 
436 
437 
439 {
440  public:
442  virtual ~ArrayVisitor() {}
443 
444  virtual void apply(Array&) {}
445 
446  virtual void apply(ByteArray&) {}
447  virtual void apply(ShortArray&) {}
448  virtual void apply(IntArray&) {}
449 
450  virtual void apply(UByteArray&) {}
451  virtual void apply(UShortArray&) {}
452  virtual void apply(UIntArray&) {}
453 
454  virtual void apply(FloatArray&) {}
455  virtual void apply(DoubleArray&) {}
456 
457 
458  virtual void apply(Vec2bArray&) {}
459  virtual void apply(Vec3bArray&) {}
460  virtual void apply(Vec4bArray&) {}
461 
462  virtual void apply(Vec2sArray&) {}
463  virtual void apply(Vec3sArray&) {}
464  virtual void apply(Vec4sArray&) {}
465 
466  virtual void apply(Vec2iArray&) {}
467  virtual void apply(Vec3iArray&) {}
468  virtual void apply(Vec4iArray&) {}
469 
470  virtual void apply(Vec2ubArray&) {}
471  virtual void apply(Vec3ubArray&) {}
472  virtual void apply(Vec4ubArray&) {}
473 
474  virtual void apply(Vec2usArray&) {}
475  virtual void apply(Vec3usArray&) {}
476  virtual void apply(Vec4usArray&) {}
477 
478  virtual void apply(Vec2uiArray&) {}
479  virtual void apply(Vec3uiArray&) {}
480  virtual void apply(Vec4uiArray&) {}
481 
482  virtual void apply(Vec2Array&) {}
483  virtual void apply(Vec3Array&) {}
484  virtual void apply(Vec4Array&) {}
485 
486  virtual void apply(Vec2dArray&) {}
487  virtual void apply(Vec3dArray&) {}
488  virtual void apply(Vec4dArray&) {}
489 
490  virtual void apply(MatrixfArray&) {}
491  virtual void apply(MatrixdArray&) {}
492 };
493 
495 {
496  public:
498  virtual ~ConstArrayVisitor() {}
499 
500  virtual void apply(const Array&) {}
501 
502  virtual void apply(const ByteArray&) {}
503  virtual void apply(const ShortArray&) {}
504  virtual void apply(const IntArray&) {}
505 
506  virtual void apply(const UByteArray&) {}
507  virtual void apply(const UShortArray&) {}
508  virtual void apply(const UIntArray&) {}
509 
510  virtual void apply(const FloatArray&) {}
511  virtual void apply(const DoubleArray&) {}
512 
513 
514  virtual void apply(const Vec2bArray&) {}
515  virtual void apply(const Vec3bArray&) {}
516  virtual void apply(const Vec4bArray&) {}
517 
518  virtual void apply(const Vec2sArray&) {}
519  virtual void apply(const Vec3sArray&) {}
520  virtual void apply(const Vec4sArray&) {}
521 
522  virtual void apply(const Vec2iArray&) {}
523  virtual void apply(const Vec3iArray&) {}
524  virtual void apply(const Vec4iArray&) {}
525 
526  virtual void apply(const Vec2ubArray&) {}
527  virtual void apply(const Vec3ubArray&) {}
528  virtual void apply(const Vec4ubArray&) {}
529 
530  virtual void apply(const Vec2usArray&) {}
531  virtual void apply(const Vec3usArray&) {}
532  virtual void apply(const Vec4usArray&) {}
533 
534  virtual void apply(const Vec2uiArray&) {}
535  virtual void apply(const Vec3uiArray&) {}
536  virtual void apply(const Vec4uiArray&) {}
537 
538  virtual void apply(const Vec2Array&) {}
539  virtual void apply(const Vec3Array&) {}
540  virtual void apply(const Vec4Array&) {}
541 
542  virtual void apply(const Vec2dArray&) {}
543  virtual void apply(const Vec3dArray&) {}
544  virtual void apply(const Vec4dArray&) {}
545 
546  virtual void apply(const MatrixfArray&) {}
547  virtual void apply(const MatrixdArray&) {}
548 };
549 
550 
552 {
553  public:
555  virtual ~ValueVisitor() {}
556 
557  virtual void apply(GLbyte&) {}
558  virtual void apply(GLshort&) {}
559  virtual void apply(GLint&) {}
560 
561  virtual void apply(GLushort&) {}
562  virtual void apply(GLubyte&) {}
563  virtual void apply(GLuint&) {}
564 
565  virtual void apply(GLfloat&) {}
566  virtual void apply(GLdouble&) {}
567 
568 
569  virtual void apply(Vec2b&) {}
570  virtual void apply(Vec3b&) {}
571  virtual void apply(Vec4b&) {}
572 
573  virtual void apply(Vec2s&) {}
574  virtual void apply(Vec3s&) {}
575  virtual void apply(Vec4s&) {}
576 
577  virtual void apply(Vec2i&) {}
578  virtual void apply(Vec3i&) {}
579  virtual void apply(Vec4i&) {}
580 
581  virtual void apply(Vec2ub&) {}
582  virtual void apply(Vec3ub&) {}
583  virtual void apply(Vec4ub&) {}
584 
585  virtual void apply(Vec2us&) {}
586  virtual void apply(Vec3us&) {}
587  virtual void apply(Vec4us&) {}
588 
589  virtual void apply(Vec2ui&) {}
590  virtual void apply(Vec3ui&) {}
591  virtual void apply(Vec4ui&) {}
592 
593  virtual void apply(Vec2&) {}
594  virtual void apply(Vec3&) {}
595  virtual void apply(Vec4&) {}
596 
597  virtual void apply(Vec2d&) {}
598  virtual void apply(Vec3d&) {}
599  virtual void apply(Vec4d&) {}
600 
601  virtual void apply(Matrixf&) {}
602  virtual void apply(Matrixd&) {}
603 };
604 
606 {
607  public:
609  virtual ~ConstValueVisitor() {}
610 
611  virtual void apply(const GLbyte&) {}
612  virtual void apply(const GLshort&) {}
613  virtual void apply(const GLint&) {}
614 
615  virtual void apply(const GLushort&) {}
616  virtual void apply(const GLubyte&) {}
617  virtual void apply(const GLuint&) {}
618 
619  virtual void apply(const GLfloat&) {}
620  virtual void apply(const GLdouble&) {}
621 
622 
623  virtual void apply(const Vec2b&) {}
624  virtual void apply(const Vec3b&) {}
625  virtual void apply(const Vec4b&) {}
626 
627  virtual void apply(const Vec2s&) {}
628  virtual void apply(const Vec3s&) {}
629  virtual void apply(const Vec4s&) {}
630 
631  virtual void apply(const Vec2i&) {}
632  virtual void apply(const Vec3i&) {}
633  virtual void apply(const Vec4i&) {}
634 
635  virtual void apply(const Vec2ub&) {}
636  virtual void apply(const Vec3ub&) {}
637  virtual void apply(const Vec4ub&) {}
638 
639  virtual void apply(const Vec2us&) {}
640  virtual void apply(const Vec3us&) {}
641  virtual void apply(const Vec4us&) {}
642 
643  virtual void apply(const Vec2ui&) {}
644  virtual void apply(const Vec3ui&) {}
645  virtual void apply(const Vec4ui&) {}
646 
647  virtual void apply(const Vec2&) {}
648  virtual void apply(const Vec3&) {}
649  virtual void apply(const Vec4&) {}
650 
651  virtual void apply(const Vec2d&) {}
652  virtual void apply(const Vec3d&) {}
653  virtual void apply(const Vec4d&) {}
654 
655  virtual void apply(const Matrixf&) {}
656  virtual void apply(const Matrixd&) {}
657 };
658 
659 template<typename T, Array::Type ARRAYTYPE, int DataSize, int DataType>
661 
662 template<typename T, Array::Type ARRAYTYPE, int DataSize, int DataType>
664 
665 template<typename T, Array::Type ARRAYTYPE, int DataSize, int DataType>
666 inline void TemplateArray<T,ARRAYTYPE,DataSize,DataType>::accept(unsigned int index,ValueVisitor& vv) { vv.apply( (*this)[index] ); }
667 
668 template<typename T, Array::Type ARRAYTYPE, int DataSize, int DataType>
669 inline void TemplateArray<T,ARRAYTYPE,DataSize,DataType>::accept(unsigned int index,ConstValueVisitor& vv) const { vv.apply( (*this)[index] );}
670 
671 template<typename T, Array::Type ARRAYTYPE, int DataSize, int DataType>
673 
674 template<typename T, Array::Type ARRAYTYPE, int DataSize, int DataType>
676 
677 template<typename T, Array::Type ARRAYTYPE, int DataSize, int DataType>
678 inline void TemplateIndexArray<T,ARRAYTYPE,DataSize,DataType>::accept(unsigned int index,ValueVisitor& vv) { vv.apply( (*this)[index] ); }
679 
680 template<typename T, Array::Type ARRAYTYPE, int DataSize, int DataType>
681 inline void TemplateIndexArray<T,ARRAYTYPE,DataSize,DataType>::accept(unsigned int index,ConstValueVisitor& vv) const { vv.apply( (*this)[index] );}
682 
683 }
684 
685 #endif
TemplateIndexArray< GLshort, Array::ShortArrayType, 1, GL_SHORT > ShortArray
Definition: Array.h:391
virtual void apply(const UShortArray &)
Definition: Array.h:507
TemplateArray< Vec4ub, Array::Vec4ubArrayType, 4, GL_UNSIGNED_BYTE > Vec4ubArray
Definition: Array.h:416
virtual Object * clone(const CopyOp &copyop) const
Definition: Array.h:262
#define OSG_EXPORT
Definition: Export.h:43
Array(const Array &array, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
Definition: Array.h:132
Type getType() const
Definition: Array.h:155
GLint getDataSize() const
Definition: Array.h:156
IndexArray(Type arrayType=ArrayType, GLint dataSize=0, GLenum dataType=0)
Definition: Array.h:304
virtual void apply(FloatArray &)
Definition: Array.h:454
virtual void apply(const Vec3ui &)
Definition: Array.h:644
virtual void apply(Vec4us &)
Definition: Array.h:587
virtual ~ArrayVisitor()
Definition: Array.h:442
#define NULL
Definition: Export.h:59
virtual unsigned int getTotalDataSize() const
Definition: Array.h:376
TemplateArray & operator=(const TemplateArray &array)
Definition: Array.h:254
virtual void apply(IntArray &)
Definition: Array.h:448
virtual void apply(const Vec3usArray &)
Definition: Array.h:531
TemplateArray(unsigned int no, const T *ptr)
Definition: Array.h:237
virtual void apply(const Vec3uiArray &)
Definition: Array.h:535
TemplateArray< Vec3ui, Array::Vec3uiArrayType, 3, GL_UNSIGNED_INT > Vec3uiArray
Definition: Array.h:423
bool _normalize
Definition: Array.h:211
virtual void apply(GLdouble &)
Definition: Array.h:566
virtual void apply(Vec4b &)
Definition: Array.h:571
virtual void apply(const Matrixf &)
Definition: Array.h:655
virtual void reserveArray(unsigned int num)
Definition: Array.h:289
virtual void apply(Vec4ub &)
Definition: Array.h:583
TemplateArray< Vec2d, Array::Vec2dArrayType, 2, GL_DOUBLE > Vec2dArray
Definition: Array.h:430
virtual void apply(const DoubleArray &)
Definition: Array.h:511
virtual Object * clone(const CopyOp &copyop) const
Definition: Array.h:351
virtual ~IndexArray()
Definition: Array.h:316
virtual void apply(const GLbyte &)
Definition: Array.h:611
virtual void apply(Vec2dArray &)
Definition: Array.h:486
virtual void apply(Vec3Array &)
Definition: Array.h:483
TemplateArray< Vec4, Array::Vec4ArrayType, 4, GL_FLOAT > Vec4Array
Definition: Array.h:428
TemplateArray< Matrixd, Array::MatrixdArrayType, 16, GL_DOUBLE > MatrixdArray
Definition: Array.h:435
virtual void apply(const MatrixfArray &)
Definition: Array.h:546
virtual void apply(Matrixf &)
Definition: Array.h:601
virtual void apply(MatrixfArray &)
Definition: Array.h:490
virtual void apply(const Vec4usArray &)
Definition: Array.h:532
virtual void apply(MatrixdArray &)
Definition: Array.h:491
GLint _dataSize
Definition: Array.h:208
TemplateArray< GLdouble, Array::DoubleArrayType, 1, GL_DOUBLE > DoubleArray
Definition: Array.h:399
osg::Array::Binding getBinding(const osg::Array *array)
Definition: Array.h:216
virtual void apply(const GLushort &)
Definition: Array.h:615
virtual void apply(Vec2us &)
Definition: Array.h:585
virtual void apply(GLint &)
Definition: Array.h:559
TemplateArray< Vec2us, Array::Vec2usArrayType, 2, GL_UNSIGNED_SHORT > Vec2usArray
Definition: Array.h:418
void setNormalize(bool normalize)
Definition: Array.h:178
virtual void apply(const Vec4d &)
Definition: Array.h:653
virtual void apply(Vec3iArray &)
Definition: Array.h:467
bool _preserveDataType
Definition: Array.h:212
virtual void apply(Vec3i &)
Definition: Array.h:578
virtual void apply(const Vec3Array &)
Definition: Array.h:539
virtual void apply(const GLint &)
Definition: Array.h:613
virtual void trim()
Definition: Array.h:369
TemplateIndexArray(unsigned int no, T *ptr)
Definition: Array.h:334
virtual ~ConstArrayVisitor()
Definition: Array.h:498
virtual ~Array()
Definition: Array.h:205
TemplateArray(Binding binding=BIND_UNDEFINED)
Definition: Array.h:227
virtual void apply(Vec3 &)
Definition: Array.h:594
virtual void apply(const Vec4s &)
Definition: Array.h:629
TemplateArray< Vec4us, Array::Vec4usArrayType, 4, GL_UNSIGNED_SHORT > Vec4usArray
Definition: Array.h:420
TemplateIndexArray< GLuint, Array::UIntArrayType, 1, GL_UNSIGNED_INT > UIntArray
Definition: Array.h:396
virtual void apply(GLubyte &)
Definition: Array.h:562
virtual void apply(const Vec2uiArray &)
Definition: Array.h:534
virtual void apply(Vec4dArray &)
Definition: Array.h:488
virtual void apply(const Vec3i &)
Definition: Array.h:632
TemplateArray< GLfloat, Array::FloatArrayType, 1, GL_FLOAT > FloatArray
Definition: Array.h:398
virtual void apply(const Vec4ub &)
Definition: Array.h:637
virtual void apply(const Vec2 &)
Definition: Array.h:647
virtual void apply(const Vec2ub &)
Definition: Array.h:635
virtual void apply(Vec2ubArray &)
Definition: Array.h:470
virtual void apply(const Vec3us &)
Definition: Array.h:640
virtual void apply(Vec4ui &)
Definition: Array.h:591
virtual void apply(const Vec4iArray &)
Definition: Array.h:524
virtual void apply(const Vec2usArray &)
Definition: Array.h:530
virtual void apply(Vec4uiArray &)
Definition: Array.h:480
const_iterator begin() const
Definition: MixinVector.h:97
virtual void apply(Vec2s &)
Definition: Array.h:573
virtual void apply(GLfloat &)
Definition: Array.h:565
virtual void apply(Vec3usArray &)
Definition: Array.h:475
virtual void apply(const Vec3s &)
Definition: Array.h:628
virtual void apply(Vec4usArray &)
Definition: Array.h:476
virtual unsigned int getElementSize() const
Definition: Array.h:285
virtual void apply(Vec4s &)
Definition: Array.h:575
void assign(size_type count, const value_type &value)
Definition: MixinVector.h:113
virtual unsigned int getNumElements() const
Definition: Array.h:377
const_iterator end() const
Definition: MixinVector.h:99
virtual void apply(ByteArray &)
Definition: Array.h:446
virtual void apply(Vec4bArray &)
Definition: Array.h:460
const osg::VertexBufferObject * getVertexBufferObject() const
Definition: Array.h:201
virtual void trim()
Definition: Array.h:280
virtual void apply(Vec2ub &)
Definition: Array.h:581
TemplateArray< Vec4b, Array::Vec4bArrayType, 4, GL_BYTE > Vec4bArray
Definition: Array.h:404
virtual void apply(const Vec2s &)
Definition: Array.h:627
virtual void apply(const Vec2i &)
Definition: Array.h:631
virtual const GLvoid * getDataPointer() const
Definition: Array.h:375
virtual void apply(UIntArray &)
Definition: Array.h:452
TemplateArray< Vec3d, Array::Vec3dArrayType, 3, GL_DOUBLE > Vec3dArray
Definition: Array.h:431
virtual void apply(Vec2bArray &)
Definition: Array.h:458
TemplateArray< Vec3, Array::Vec3ArrayType, 3, GL_FLOAT > Vec3Array
Definition: Array.h:427
virtual void apply(Vec3ubArray &)
Definition: Array.h:471
virtual void apply(const Vec3iArray &)
Definition: Array.h:523
TemplateArray(Binding binding, unsigned int no, const T *ptr)
Definition: Array.h:245
TemplateArray< Vec2ui, Array::Vec2uiArrayType, 2, GL_UNSIGNED_INT > Vec2uiArray
Definition: Array.h:422
TemplateArray< Vec4i, Array::Vec4iArrayType, 4, GL_INT > Vec4iArray
Definition: Array.h:412
virtual void apply(const Vec2d &)
Definition: Array.h:651
virtual void apply(Vec3b &)
Definition: Array.h:570
virtual void apply(const GLdouble &)
Definition: Array.h:620
TemplateArray(unsigned int no)
Definition: Array.h:233
virtual const osg::Array * asArray() const
Definition: Array.h:160
virtual void apply(DoubleArray &)
Definition: Array.h:455
GLenum _dataType
Definition: Array.h:209
virtual void apply(Vec3uiArray &)
Definition: Array.h:479
virtual void apply(const Vec2bArray &)
Definition: Array.h:514
virtual void trim()
Definition: Array.h:192
virtual void apply(const Vec3 &)
Definition: Array.h:648
virtual void apply(Vec2ui &)
Definition: Array.h:589
virtual void apply(ShortArray &)
Definition: Array.h:447
virtual void apply(Vec2usArray &)
Definition: Array.h:474
Binding getBinding() const
Definition: Array.h:174
virtual void apply(const Vec2Array &)
Definition: Array.h:538
TemplateIndexArray(const TemplateIndexArray &ta, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
Definition: Array.h:326
virtual osg::Array * asArray()
Definition: Array.h:159
virtual int compare(unsigned int lhs, unsigned int rhs) const
Definition: Array.h:359
virtual unsigned int getElementSize() const
Definition: Array.h:374
Type _arrayType
Definition: Array.h:207
TemplateArray< Matrixf, Array::MatrixArrayType, 16, GL_FLOAT > MatrixfArray
Definition: Array.h:434
virtual void apply(Vec2uiArray &)
Definition: Array.h:478
TemplateIndexArray< GLushort, Array::UShortArrayType, 1, GL_UNSIGNED_SHORT > UShortArray
Definition: Array.h:395
double GLdouble
Definition: GL.h:159
virtual const GLvoid * getDataPointer() const
Definition: Array.h:286
TemplateArray< Vec3b, Array::Vec3bArrayType, 3, GL_BYTE > Vec3bArray
Definition: Array.h:403
virtual void apply(UShortArray &)
Definition: Array.h:451
virtual void resizeArray(unsigned int num)
Definition: Array.h:379
virtual void apply(Vec2i &)
Definition: Array.h:577
virtual void apply(const Vec4dArray &)
Definition: Array.h:544
TemplateIndexArray< GLbyte, Array::ByteArrayType, 1, GL_BYTE > ByteArray
Definition: Array.h:390
virtual void apply(const GLubyte &)
Definition: Array.h:616
virtual void apply(Vec4 &)
Definition: Array.h:595
virtual const char * libraryName() const
Definition: Array.h:142
TemplateArray(Binding binding, unsigned int no)
Definition: Array.h:241
virtual void apply(Vec2Array &)
Definition: Array.h:482
virtual void apply(const Vec4bArray &)
Definition: Array.h:516
osg::VertexBufferObject * getVertexBufferObject()
Definition: Array.h:198
virtual void apply(Vec2 &)
Definition: Array.h:593
virtual void apply(const Vec3d &)
Definition: Array.h:652
TemplateArray< Vec4ui, Array::Vec4uiArrayType, 4, GL_UNSIGNED_INT > Vec4uiArray
Definition: Array.h:424
virtual void apply(const Vec2sArray &)
Definition: Array.h:518
virtual void apply(const Matrixd &)
Definition: Array.h:656
TemplateIndexArray< GLint, Array::IntArrayType, 1, GL_INT > IntArray
Definition: Array.h:392
TemplateIndexArray(unsigned int no)
Definition: Array.h:330
TemplateArray< Vec2s, Array::Vec2sArrayType, 2, GL_SHORT > Vec2sArray
Definition: Array.h:406
virtual void apply(Vec3ui &)
Definition: Array.h:590
virtual unsigned int getNumElements() const
Definition: Array.h:288
virtual void apply(GLushort &)
Definition: Array.h:561
virtual void apply(const GLfloat &)
Definition: Array.h:619
virtual void apply(const Vec3sArray &)
Definition: Array.h:519
virtual void apply(const Vec3ub &)
Definition: Array.h:636
virtual void apply(const Array &)
Definition: Array.h:500
bool getNormalize(const osg::Array *array)
Definition: Array.h:219
virtual void apply(GLshort &)
Definition: Array.h:558
virtual void apply(Vec3d &)
Definition: Array.h:598
TemplateArray< Vec4s, Array::Vec4sArrayType, 4, GL_SHORT > Vec4sArray
Definition: Array.h:408
const_reference front() const
Definition: MixinVector.h:138
TemplateArray< Vec2b, Array::Vec2bArrayType, 2, GL_BYTE > Vec2bArray
Definition: Array.h:402
bool getPreserveDataType() const
Definition: Array.h:188
virtual void apply(const Vec2us &)
Definition: Array.h:639
TemplateArray< Vec3ub, Array::Vec3ubArrayType, 3, GL_UNSIGNED_BYTE > Vec3ubArray
Definition: Array.h:415
void setPreserveDataType(bool preserve)
Definition: Array.h:185
GLenum getDataType() const
Definition: Array.h:157
virtual void apply(GLuint &)
Definition: Array.h:563
virtual void apply(const UByteArray &)
Definition: Array.h:506
virtual Object * cloneType() const
Definition: Array.h:261
TemplateIndexArray(InputIterator first, InputIterator last)
Definition: Array.h:339
TemplateArray< Vec3s, Array::Vec3sArrayType, 3, GL_SHORT > Vec3sArray
Definition: Array.h:407
TemplateArray< Vec3us, Array::Vec3usArrayType, 3, GL_UNSIGNED_SHORT > Vec3usArray
Definition: Array.h:419
virtual ~ConstValueVisitor()
Definition: Array.h:609
virtual void apply(const Vec2dArray &)
Definition: Array.h:542
virtual void apply(Vec4sArray &)
Definition: Array.h:464
TemplateArray< Vec4d, Array::Vec4dArrayType, 4, GL_DOUBLE > Vec4dArray
Definition: Array.h:432
virtual ~ValueVisitor()
Definition: Array.h:555
void swap(vector_type &other)
Definition: MixinVector.h:88
virtual int compare(unsigned int lhs, unsigned int rhs) const
Definition: Array.h:270
virtual bool isSameKindAs(const Object *obj) const
Definition: Array.h:310
virtual void apply(const Vec3bArray &)
Definition: Array.h:515
virtual void apply(Matrixd &)
Definition: Array.h:602
virtual void apply(Vec3us &)
Definition: Array.h:586
TemplateIndexArray & operator=(const TemplateIndexArray &array)
Definition: Array.h:343
virtual void apply(Vec4Array &)
Definition: Array.h:484
virtual void apply(const Vec2b &)
Definition: Array.h:623
virtual void apply(const MatrixdArray &)
Definition: Array.h:547
virtual void apply(const Vec4b &)
Definition: Array.h:625
Binding _binding
Definition: Array.h:210
TemplateArray< Vec2i, Array::Vec2iArrayType, 2, GL_INT > Vec2iArray
Definition: Array.h:410
virtual void apply(Vec3ub &)
Definition: Array.h:582
virtual void apply(Vec3s &)
Definition: Array.h:574
virtual void apply(const Vec3ubArray &)
Definition: Array.h:527
virtual void apply(Array &)
Definition: Array.h:444
Definition: AlphaFunc.h:19
virtual void resizeArray(unsigned int num)
Definition: Array.h:290
virtual void apply(const Vec4Array &)
Definition: Array.h:540
void resize(size_type new_size, const value_type &fill_value=value_type())
Definition: MixinVector.h:85
virtual void apply(const GLuint &)
Definition: Array.h:617
virtual void apply(Vec4ubArray &)
Definition: Array.h:472
bool empty() const
Definition: MixinVector.h:91
virtual bool isSameKindAs(const Object *obj) const
Definition: Array.h:141
TemplateArray< Vec3i, Array::Vec3iArrayType, 3, GL_INT > Vec3iArray
Definition: Array.h:411
virtual void apply(const ByteArray &)
Definition: Array.h:502
virtual void apply(GLbyte &)
Definition: Array.h:557
virtual void apply(const UIntArray &)
Definition: Array.h:508
virtual void apply(Vec2sArray &)
Definition: Array.h:462
virtual void apply(const Vec3b &)
Definition: Array.h:624
IndexArray(const Array &array, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
Definition: Array.h:307
virtual void apply(const Vec4uiArray &)
Definition: Array.h:536
virtual void apply(Vec2iArray &)
Definition: Array.h:466
virtual void apply(const Vec4ui &)
Definition: Array.h:645
virtual void apply(Vec4iArray &)
Definition: Array.h:468
virtual void apply(const IntArray &)
Definition: Array.h:504
void setBinding(Binding binding)
Definition: Array.h:171
void setVertexBufferObject(osg::VertexBufferObject *vbo)
Definition: Array.h:195
virtual void apply(Vec2b &)
Definition: Array.h:569
virtual void accept(ArrayVisitor &av)
Definition: Array.h:672
virtual void apply(const Vec4us &)
Definition: Array.h:641
TemplateIndexArray< GLubyte, Array::UByteArrayType, 1, GL_UNSIGNED_BYTE > UByteArray
Definition: Array.h:394
virtual void apply(const GLshort &)
Definition: Array.h:612
void reserve(size_type new_capacity)
Definition: MixinVector.h:86
virtual void apply(const Vec2ui &)
Definition: Array.h:643
virtual void apply(const Vec2ubArray &)
Definition: Array.h:526
virtual void apply(Vec3sArray &)
Definition: Array.h:463
virtual void apply(UByteArray &)
Definition: Array.h:450
size_type size() const
Definition: MixinVector.h:92
TemplateArray(InputIterator first, InputIterator last)
Definition: Array.h:250
TemplateArray< Vec2ub, Array::Vec2ubArrayType, 2, GL_UNSIGNED_BYTE > Vec2ubArray
Definition: Array.h:414
virtual void apply(const FloatArray &)
Definition: Array.h:510
virtual void apply(const Vec4i &)
Definition: Array.h:633
virtual void apply(Vec4d &)
Definition: Array.h:599
virtual void apply(const Vec4ubArray &)
Definition: Array.h:528
Array(Type arrayType=ArrayType, GLint dataSize=0, GLenum dataType=0, Binding binding=BIND_UNDEFINED)
Definition: Array.h:124
virtual void reserveArray(unsigned int num)
Definition: Array.h:378
virtual void apply(const Vec4 &)
Definition: Array.h:649
virtual void apply(Vec3dArray &)
Definition: Array.h:487
virtual void apply(Vec3bArray &)
Definition: Array.h:459
virtual ~TemplateIndexArray()
Definition: Array.h:387
virtual void apply(Vec2d &)
Definition: Array.h:597
virtual Object * cloneType() const
Definition: Array.h:350
virtual void accept(ArrayVisitor &av)
Definition: Array.h:660
virtual ~TemplateArray()
Definition: Array.h:296
virtual unsigned int getTotalDataSize() const
Definition: Array.h:287
virtual void apply(const ShortArray &)
Definition: Array.h:503
virtual unsigned int index(unsigned int pos) const
Definition: Array.h:381
virtual void apply(Vec4i &)
Definition: Array.h:579
virtual void apply(const Vec3dArray &)
Definition: Array.h:543
virtual void apply(const Vec2iArray &)
Definition: Array.h:522
virtual void apply(const Vec4sArray &)
Definition: Array.h:520
bool getNormalize() const
Definition: Array.h:181
TemplateArray< Vec2, Array::Vec2ArrayType, 2, GL_FLOAT > Vec2Array
Definition: Array.h:426
TemplateArray(const TemplateArray &ta, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
Definition: Array.h:229