openscenegraph
BufferObject
Go to the documentation of this file.
1/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2 * Copyright (C) 2012 David Callu
3 *
4 * This library is open source and may be redistributed and/or modified under
5 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
6 * (at your option) any later version. The full license is in LICENSE file
7 * included with this distribution, and on the openscenegraph.org website.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * OpenSceneGraph Public License for more details.
13*/
14
15#ifndef OSG_BUFFEROBJECT
16#define OSG_BUFFEROBJECT 1
17
18#include <osg/GL>
19#include <osg/GLExtensions>
20#include <osg/Object>
21#include <osg/buffered_value>
22#include <osg/FrameStamp>
23#include <osg/GLObjects>
24
25#include <iosfwd>
26#include <list>
27#include <map>
28
29#ifndef GL_ARB_vertex_buffer_object
30 #define GL_ARRAY_BUFFER_ARB 0x8892
31 #define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893
32 #define GL_ARRAY_BUFFER_BINDING_ARB 0x8894
33 #define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895
34 #define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896
35 #define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897
36 #define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898
37 #define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899
38 #define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A
39 #define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B
40 #define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C
41 #define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D
42 #define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E
43 #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F
44 #define GL_STREAM_DRAW_ARB 0x88E0
45 #define GL_STREAM_READ_ARB 0x88E1
46 #define GL_STREAM_COPY_ARB 0x88E2
47 #define GL_STATIC_DRAW_ARB 0x88E4
48 #define GL_STATIC_READ_ARB 0x88E5
49 #define GL_STATIC_COPY_ARB 0x88E6
50 #define GL_DYNAMIC_DRAW_ARB 0x88E8
51 #define GL_DYNAMIC_READ_ARB 0x88E9
52 #define GL_DYNAMIC_COPY_ARB 0x88EA
53 #define GL_READ_ONLY_ARB 0x88B8
54 #define GL_WRITE_ONLY_ARB 0x88B9
55 #define GL_READ_WRITE_ARB 0x88BA
56 #define GL_BUFFER_SIZE_ARB 0x8764
57 #define GL_BUFFER_USAGE_ARB 0x8765
58 #define GL_BUFFER_ACCESS_ARB 0x88BB
59 #define GL_BUFFER_MAPPED_ARB 0x88BC
60 #define GL_BUFFER_MAP_POINTER_ARB 0x88BD
61#endif
62
63#ifndef GL_VERSION_1_5
64 #define GL_STREAM_DRAW 0x88E0
65 #define GL_STREAM_READ 0x88E1
66 #define GL_STREAM_COPY 0x88E2
67 #define GL_STATIC_DRAW 0x88E4
68 #define GL_STATIC_READ 0x88E5
69 #define GL_STATIC_COPY 0x88E6
70 #define GL_DYNAMIC_DRAW 0x88E8
71 #define GL_DYNAMIC_READ 0x88E9
72 #define GL_DYNAMIC_COPY 0x88EA
73#endif
74
75#ifndef GL_VERSION_2_1
76 #define GL_PIXEL_PACK_BUFFER 0x88EB
77 #define GL_PIXEL_UNPACK_BUFFER 0x88EC
78 #define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED
79 #define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF
80#endif
81
82
83#ifndef GL_ARB_pixel_buffer_object
84 #define GL_PIXEL_PACK_BUFFER_ARB 0x88EB
85 #define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC
86 #define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED
87 #define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF
88#endif
89
90namespace osg
91{
92
93class State;
94class BufferData;
95class BufferObject;
96
98{
99 public:
101 _target(0),
102 _usage(0),
103 _size(0) {}
104
105 BufferObjectProfile(GLenum target, GLenum usage, unsigned int size):
106 _target(target),
107 _usage(usage),
108 _size(size) {}
109
111 _target(bpo._target),
112 _usage(bpo._usage),
113 _size(bpo._size) {}
114
115 bool operator < (const BufferObjectProfile& rhs) const
116 {
117 if (_target < rhs._target) return true;
118 else if (_target > rhs._target) return false;
119 if (_usage < rhs._usage) return true;
120 else if (_usage > rhs._usage) return false;
121 return _size < rhs._size;
122 }
123
124 bool operator == (const BufferObjectProfile& rhs) const
125 {
126 return (_target == rhs._target) &&
127 (_usage == rhs._usage) &&
128 (_size == rhs._size);
129 }
130
131 void setProfile(GLenum target, GLenum usage, unsigned int size)
132 {
133 _target = target;
134 _usage = usage;
135 _size = size;
136 }
137
139 {
140 _target = rhs._target;
141 _usage = rhs._usage;
142 _size = rhs._size;
143 return *this;
144 }
145
146 GLenum _target;
147 GLenum _usage;
148 GLenum _size;
149};
150
151// forward declare
154
155inline unsigned int computeBufferAlignment(unsigned int pos, unsigned int bufferAlignment)
156{
157 if (bufferAlignment<2) return pos;
158 if ((pos%bufferAlignment)==0) return pos;
159 return ((pos/bufferAlignment)+1)*bufferAlignment;
160}
161
162
164{
165 public:
166
167 GLBufferObject(unsigned int contextID, BufferObject* bufferObject, unsigned int glObjectID=0);
168
169 void setProfile(const BufferObjectProfile& profile) { _profile = profile; }
170 const BufferObjectProfile& getProfile() const { return _profile; }
171
172 void setBufferObject(BufferObject* bufferObject);
173 BufferObject* getBufferObject() { return _bufferObject; }
174
176 {
177 BufferEntry(): numRead(0), modifiedCount(0),dataSize(0),offset(0),dataSource(0) {}
178
180 numRead(rhs.numRead),
181 modifiedCount(rhs.modifiedCount),
182 dataSize(rhs.dataSize),
183 offset(rhs.offset),
184 dataSource(rhs.dataSource) {}
185
186 BufferEntry& operator = (const BufferEntry& rhs)
187 {
188 if (&rhs==this) return *this;
189 numRead = rhs.numRead;
190 modifiedCount = rhs.modifiedCount;
191 dataSize = rhs.dataSize;
192 offset = rhs.offset;
193 dataSource = rhs.dataSource;
194 return *this;
195 }
196
197 unsigned int getNumClients() const;
198
199 unsigned int numRead;
200 unsigned int modifiedCount;
201 unsigned int dataSize;
202 unsigned int offset;
204 };
205
206 inline unsigned int getContextID() const { return _contextID; }
207
208 inline GLuint& getGLObjectID() { return _glObjectID; }
209 inline GLuint getGLObjectID() const { return _glObjectID; }
210 inline GLsizeiptr getOffset(unsigned int i) const { return _bufferEntries[i].offset; }
211
212 inline void bindBuffer();
213
214 inline void unbindBuffer()
215 {
216 _extensions->glBindBuffer(_profile._target,0);
217 }
218
220 void release();
221
222 inline bool isDirty() const { return _dirty; }
223
224 void dirty() { _dirty = true; }
225
226 void clear();
227
229
231
232 void assign(BufferObject* bufferObject);
233
234 bool isPBOSupported() const { return _extensions->isPBOSupported; }
235
237
239
240 protected:
241
243
244 unsigned int computeBufferAlignment(unsigned int pos, unsigned int bufferAlignment) const
245 {
246 return osg::computeBufferAlignment(pos, bufferAlignment);
247 }
248
249 unsigned int _contextID;
251
253 unsigned int _allocatedSize;
254
255 bool _dirty;
256
257 typedef std::vector<BufferEntry> BufferEntries;
259
261
262 public:
263
267 unsigned int _frameLastUsed;
268
269 public:
271
272};
273
274typedef std::list< ref_ptr<GLBufferObject> > GLBufferObjectList;
275
277{
278 public:
280
281 const BufferObjectProfile& getProfile() const { return _profile; }
282
284
289 void flushDeletedGLBufferObjects(double currentTime, double& availableTime);
290
293
299
300 unsigned int size() const { return _profile._size * _numOfGLBufferObjects; }
301
302 bool makeSpace(unsigned int& size);
303
304 bool checkConsistency() const;
305
306 GLBufferObjectManager* getParent() { return _parent; }
307
309 unsigned int getNumOfGLBufferObjects() const { return _numOfGLBufferObjects; }
310 unsigned int getNumOrphans() const { return static_cast<unsigned int>(_orphanedGLBufferObjects.size()); }
311 unsigned int getNumPendingOrphans() const { return static_cast<unsigned int>(_pendingOrphanedGLBufferObjects.size()); }
312
313
314 protected:
315
317
319
321 unsigned int _contextID;
326
329};
330
332{
333 public:
334 GLBufferObjectManager(unsigned int contextID);
335
336 void setNumberActiveGLBufferObjects(unsigned int size) { _numActiveGLBufferObjects = size; }
337 unsigned int& getNumberActiveGLBufferObjects() { return _numActiveGLBufferObjects; }
338 unsigned int getNumberActiveGLBufferObjects() const { return _numActiveGLBufferObjects; }
339
340 void setNumberOrphanedGLBufferObjects(unsigned int size) { _numOrphanedGLBufferObjects = size; }
341 unsigned int& getNumberOrphanedGLBufferObjects() { return _numOrphanedGLBufferObjects; }
342 unsigned int getNumberOrphanedGLBufferObjects() const { return _numOrphanedGLBufferObjects; }
343
344 void setCurrGLBufferObjectPoolSize(unsigned int size) { _currGLBufferObjectPoolSize = size; }
345 unsigned int& getCurrGLBufferObjectPoolSize() { return _currGLBufferObjectPoolSize; }
346 unsigned int getCurrGLBufferObjectPoolSize() const { return _currGLBufferObjectPoolSize; }
347
348 void setMaxGLBufferObjectPoolSize(unsigned int size);
349 unsigned int getMaxGLBufferObjectPoolSize() const { return _maxGLBufferObjectPoolSize; }
350
351 bool hasSpace(unsigned int size) const { return (_currGLBufferObjectPoolSize+size)<=_maxGLBufferObjectPoolSize; }
352 bool makeSpace(unsigned int size);
353
355
357
362 void flushDeletedGLObjects(double currentTime, double& availableTime);
363
365
368 void reportStats(std::ostream& out);
369 void recomputeStats(std::ostream& out) const;
370
371 unsigned int& getFrameNumber() { return _frameNumber; }
372 unsigned int& getNumberFrames() { return _numFrames; }
373
374 unsigned int& getNumberDeleted() { return _numDeleted; }
375 double& getDeleteTime() { return _deleteTime; }
376
377 unsigned int& getNumberGenerated() { return _numGenerated; }
378 double& getGenerateTime() { return _generateTime; }
379
380 unsigned int& getNumberApplied() { return _numApplied; }
381 double& getApplyTime() { return _applyTime; }
382
383 protected:
384
386
387 typedef std::map< BufferObjectProfile, osg::ref_ptr<GLBufferObjectSet> > GLBufferObjectSetMap;
388
394
395 unsigned int _frameNumber;
396
397 unsigned int _numFrames;
398 unsigned int _numDeleted;
400
401 unsigned int _numGenerated;
403
404 unsigned int _numApplied;
406
407};
408
409
411{
412 public:
413
415
417 BufferObject(const BufferObject& bo,const CopyOp& copyop=CopyOp::SHALLOW_COPY);
418
419 virtual bool isSameKindAs(const Object* obj) const { return dynamic_cast<const BufferObject*>(obj)!=NULL; }
420 virtual const char* libraryName() const { return "osg"; }
421 virtual const char* className() const { return "BufferObject"; }
422
423 void setTarget(GLenum target) { _profile._target = target; }
424 GLenum getTarget() const { return _profile._target; }
425
431 void setUsage(GLenum usage) { _profile._usage = usage; }
432
434 GLenum getUsage() const { return _profile._usage; }
435
436 BufferObjectProfile& getProfile() { return _profile; }
437 const BufferObjectProfile& getProfile() const { return _profile; }
438
439
441 void setCopyDataAndReleaseGLBufferObject(bool copyAndRelease) { _copyDataAndReleaseGLBufferObject = copyAndRelease; }
442
444 bool getCopyDataAndReleaseGLBufferObject() const { return _copyDataAndReleaseGLBufferObject; }
445
446
447 void dirty();
448
450 virtual void resizeGLObjectBuffers(unsigned int maxSize);
451
455 void releaseGLObjects(State* state=0) const;
456
457 unsigned int addBufferData(BufferData* bd);
458 void removeBufferData(unsigned int index);
460
461 void setBufferData(unsigned int index, BufferData* bd);
462 BufferData* getBufferData(unsigned int index) { return _bufferDataList[index]; }
463 const BufferData* getBufferData(unsigned int index) const { return _bufferDataList[index]; }
464
465 unsigned int getNumBufferData() const { return static_cast<unsigned int>(_bufferDataList.size()); }
466
467 void setGLBufferObject(unsigned int contextID, GLBufferObject* glbo) { _glBufferObjects[contextID] = glbo; }
468
469 GLBufferObject* getGLBufferObject(unsigned int contextID) const { return _glBufferObjects[contextID].get(); }
470
471 GLBufferObject* getOrCreateGLBufferObject(unsigned int contextID) const;
472
473 unsigned int computeRequiredBufferSize() const;
474
476 static void deleteBufferObject(unsigned int contextID,GLuint globj);
477
478 protected:
479
481
482 typedef std::vector< BufferData* > BufferDataList;
484
486
488
490
492};
493
495{
496 public:
497
499 Object(true),
500 _modifiedCount(0),
501 _bufferIndex(0),
502 _numClients(0) {}
503
505 BufferData(const BufferData& bd,const CopyOp& copyop=CopyOp::SHALLOW_COPY):
506 osg::Object(bd,copyop),
507 _modifiedCount(0),
508 _bufferIndex(0),
509 _modifiedCallback(bd._modifiedCallback),
510 _numClients(0) {}
511
512 virtual bool isSameKindAs(const Object* obj) const { return dynamic_cast<const BufferData*>(obj)!=NULL; }
513 virtual const char* libraryName() const { return "osg"; }
514 virtual const char* className() const { return "BufferData"; }
515
516 virtual const GLvoid* getDataPointer() const = 0;
517 virtual unsigned int getTotalDataSize() const = 0;
518
519 virtual osg::Array* asArray() { return 0; }
520 virtual const osg::Array* asArray() const { return 0; }
521
522 virtual osg::PrimitiveSet* asPrimitiveSet() { return 0; }
523 virtual const osg::PrimitiveSet* asPrimitiveSet() const { return 0; }
524
525 virtual osg::Image* asImage() { return 0; }
526 virtual const osg::Image* asImage() const { return 0; }
527
528 void setBufferObject(BufferObject* bufferObject);
529 BufferObject* getBufferObject() { return _bufferObject.get(); }
530 const BufferObject* getBufferObject() const { return _bufferObject.get(); }
531
532 void setBufferIndex(unsigned int index) { _bufferIndex = index; }
533 unsigned int getBufferIndex() const { return _bufferIndex; }
534
535 GLBufferObject* getGLBufferObject(unsigned int contextID) const { return _bufferObject.valid() ? _bufferObject->getGLBufferObject(contextID) : 0; }
536 GLBufferObject* getOrCreateGLBufferObject(unsigned int contextID) const { return _bufferObject.valid() ? _bufferObject->getOrCreateGLBufferObject(contextID) : 0; }
537
538 struct ModifiedCallback : public virtual osg::Object
539 {
541
542 ModifiedCallback(const ModifiedCallback& org, const CopyOp& copyop) :
543 Object(org, copyop) {}
544
546
547 virtual void modified(BufferData* /*bufferData*/) const {}
548 };
549
550 void setModifiedCallback(ModifiedCallback* md) { _modifiedCallback = md; }
551 ModifiedCallback* getModifiedCallback() { return _modifiedCallback.get(); }
552 const ModifiedCallback* getModifiedCallback() const { return _modifiedCallback.get(); }
553
556 inline void dirty()
557 {
558 ++_modifiedCount;
559 if (_modifiedCallback.valid()) _modifiedCallback->modified(this);
560 if (_bufferObject.valid()) _bufferObject->dirty();
561 }
562
564 inline void setModifiedCount(unsigned int value) { _modifiedCount=value; }
565
567 inline unsigned int getModifiedCount() const { return _modifiedCount; }
568
570 virtual void resizeGLObjectBuffers(unsigned int maxSize);
571
575 void releaseGLObjects(State* state=0) const;
576
577 unsigned int getNumClients() const { return _numClients; }
578
579 void addClient(osg::Object * /*client*/) { ++_numClients; }
580
581 void removeClient(osg::Object * /*client*/) { --_numClients; }
582
583protected:
584
585 virtual ~BufferData();
586
587 unsigned int _modifiedCount;
588
589 unsigned int _bufferIndex;
592
593 unsigned int _numClients;
594};
595
596
597class Array;
599{
600 public:
601
603
605 VertexBufferObject(const VertexBufferObject& vbo,const CopyOp& copyop=CopyOp::SHALLOW_COPY);
606
608
609 unsigned int addArray(osg::Array* array);
611
612 void setArray(unsigned int i, Array* array);
613 Array* getArray(unsigned int i);
614 const Array* getArray(unsigned int i) const;
615
616 protected:
618};
619
620class DrawElements;
622{
623 public:
624
626
628 ElementBufferObject(const ElementBufferObject& pbo,const CopyOp& copyop=CopyOp::SHALLOW_COPY);
629
631
634
637 const DrawElements* getDrawElements(unsigned int i) const;
638
639 protected:
640
642};
643
645{
646 public:
647
649
651 DrawIndirectBufferObject(const DrawIndirectBufferObject& vbo,const CopyOp& copyop=CopyOp::SHALLOW_COPY);
652
654
655 unsigned int addArray(osg::Array* array);
657
658 void setArray(unsigned int i, Array* array);
659 Array* getArray(unsigned int i);
660 const Array* getArray(unsigned int i) const;
661
662 protected:
664};
665
666class Image;
668{
669 public:
670
672
674 PixelBufferObject(const PixelBufferObject& pbo,const CopyOp& copyop=CopyOp::SHALLOW_COPY);
675
677
678 void setImage(osg::Image* image);
679
681 const Image* getImage() const;
682
683 bool isPBOSupported(unsigned int contextID) const { return _glBufferObjects[contextID]->isPBOSupported(); }
684
685 protected:
686
688};
689
697{
698 public:
700 PixelDataBufferObject(const PixelDataBufferObject& pbo, const CopyOp& copyop=CopyOp::SHALLOW_COPY);
701
703
705 inline void setDataSize(unsigned int size) { _profile._size = size; dirty(); }
706
708 inline unsigned int getDataSize() const { return _profile._size; }
709
711 virtual void compileBuffer(State& state) const;
712
714 virtual void bindBufferInReadMode(State& state);
715
717 virtual void bindBufferInWriteMode(State& state);
718
720 virtual void unbindBuffer(unsigned int contextID) const;
721
723 virtual void resizeGLObjectBuffers(unsigned int maxSize);
724
725 enum Mode
726 {
728 NONE = 0,
729
731 READ = 1,
732
734 WRITE = 2
735 };
736
737 Mode getMode(unsigned int contextID) const { return (Mode)_mode[contextID]; }
738
739 protected:
740
742
744
746
747};
748
749
751{
752 public:
754 UniformBufferObject(const UniformBufferObject& ubo, const CopyOp& copyop=CopyOp::SHALLOW_COPY);
756 protected:
758};
759
770
772{
774 if (_set) _set->moveToBack(this);
775}
776
777
788
789
790
791}
792
793#endif
This class provides an object-oriented thread mutex interface.
Definition Mutex:31
Definition Array:61
Definition BufferObject:761
META_Object(osg, AtomicCounterBufferObject)
AtomicCounterBufferObject(const AtomicCounterBufferObject &ubo, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
Definition BufferObject:495
void addClient(osg::Object *)
Definition BufferObject:579
unsigned int getNumClients() const
Definition BufferObject:577
virtual const osg::PrimitiveSet * asPrimitiveSet() const
Definition BufferObject:523
BufferObject * getBufferObject()
Definition BufferObject:529
unsigned int _numClients
Definition BufferObject:593
const BufferObject * getBufferObject() const
Definition BufferObject:530
virtual ~BufferData()
osg::ref_ptr< ModifiedCallback > _modifiedCallback
Definition BufferObject:591
virtual osg::Image * asImage()
Definition BufferObject:525
GLBufferObject * getGLBufferObject(unsigned int contextID) const
Definition BufferObject:535
unsigned int getModifiedCount() const
Definition BufferObject:567
virtual osg::Array * asArray()
Definition BufferObject:519
virtual const GLvoid * getDataPointer() const =0
virtual const osg::Array * asArray() const
Definition BufferObject:520
BufferData()
Definition BufferObject:498
osg::ref_ptr< BufferObject > _bufferObject
Definition BufferObject:590
virtual bool isSameKindAs(const Object *obj) const
Definition BufferObject:512
const ModifiedCallback * getModifiedCallback() const
Definition BufferObject:552
virtual osg::PrimitiveSet * asPrimitiveSet()
Definition BufferObject:522
virtual unsigned int getTotalDataSize() const =0
unsigned int _modifiedCount
Definition BufferObject:587
void removeClient(osg::Object *)
Definition BufferObject:581
virtual const osg::Image * asImage() const
Definition BufferObject:526
GLBufferObject * getOrCreateGLBufferObject(unsigned int contextID) const
Definition BufferObject:536
void dirty()
Definition BufferObject:556
unsigned int _bufferIndex
Definition BufferObject:589
void setModifiedCount(unsigned int value)
Definition BufferObject:564
void setModifiedCallback(ModifiedCallback *md)
Definition BufferObject:550
ModifiedCallback * getModifiedCallback()
Definition BufferObject:551
unsigned int getBufferIndex() const
Definition BufferObject:533
virtual const char * libraryName() const
Definition BufferObject:513
void setBufferIndex(unsigned int index)
Definition BufferObject:532
BufferData(const BufferData &bd, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
Definition BufferObject:505
void setBufferObject(BufferObject *bufferObject)
virtual const char * className() const
Definition BufferObject:514
virtual void resizeGLObjectBuffers(unsigned int maxSize)
void releaseGLObjects(State *state=0) const
Definition BufferObject:98
bool operator==(const BufferObjectProfile &rhs) const
Definition BufferObject:124
bool operator<(const BufferObjectProfile &rhs) const
Definition BufferObject:115
BufferObjectProfile & operator=(const BufferObjectProfile &rhs)
Definition BufferObject:138
GLenum _size
Definition BufferObject:148
BufferObjectProfile()
Definition BufferObject:100
void setProfile(GLenum target, GLenum usage, unsigned int size)
Definition BufferObject:131
BufferObjectProfile(GLenum target, GLenum usage, unsigned int size)
Definition BufferObject:105
GLenum _target
Definition BufferObject:146
GLenum _usage
Definition BufferObject:147
BufferObjectProfile(const BufferObjectProfile &bpo)
Definition BufferObject:110
Definition BufferObject:411
void setTarget(GLenum target)
Definition BufferObject:423
void setBufferData(unsigned int index, BufferData *bd)
osg::buffered_object< osg::ref_ptr< GLBufferObject > > GLBufferObjects
Definition BufferObject:483
std::vector< BufferData * > BufferDataList
Definition BufferObject:482
void setUsage(GLenum usage)
Definition BufferObject:431
BufferObject(const BufferObject &bo, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
GLBufferObject * getGLBufferObject(unsigned int contextID) const
Definition BufferObject:469
virtual bool isSameKindAs(const Object *obj) const
Definition BufferObject:419
GLenum getTarget() const
Definition BufferObject:424
BufferObjectProfile _profile
Definition BufferObject:485
void removeBufferData(BufferData *bd)
static void deleteBufferObject(unsigned int contextID, GLuint globj)
BufferDataList _bufferDataList
Definition BufferObject:489
GLenum getUsage() const
Definition BufferObject:434
void releaseGLObjects(State *state=0) const
unsigned int getNumBufferData() const
Definition BufferObject:465
BufferData * getBufferData(unsigned int index)
Definition BufferObject:462
GLBufferObjects _glBufferObjects
Definition BufferObject:491
void removeBufferData(unsigned int index)
void setGLBufferObject(unsigned int contextID, GLBufferObject *glbo)
Definition BufferObject:467
bool getCopyDataAndReleaseGLBufferObject() const
Definition BufferObject:444
GLBufferObject * getOrCreateGLBufferObject(unsigned int contextID) const
BufferObjectProfile & getProfile()
Definition BufferObject:436
void setCopyDataAndReleaseGLBufferObject(bool copyAndRelease)
Definition BufferObject:441
const BufferObjectProfile & getProfile() const
Definition BufferObject:437
bool _copyDataAndReleaseGLBufferObject
Definition BufferObject:487
virtual void resizeGLObjectBuffers(unsigned int maxSize)
virtual const char * className() const
Definition BufferObject:421
unsigned int computeRequiredBufferSize() const
const BufferData * getBufferData(unsigned int index) const
Definition BufferObject:463
virtual const char * libraryName() const
Definition BufferObject:420
unsigned int addBufferData(BufferData *bd)
Definition CopyOp:41
Definition PrimitiveSet:337
Definition BufferObject:645
META_Object(osg, DrawIndirectBufferObject)
void removeArray(osg::Array *array)
void setArray(unsigned int i, Array *array)
DrawIndirectBufferObject(const DrawIndirectBufferObject &vbo, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
unsigned int addArray(osg::Array *array)
Array * getArray(unsigned int i)
const Array * getArray(unsigned int i) const
Definition BufferObject:622
const DrawElements * getDrawElements(unsigned int i) const
unsigned int addDrawElements(osg::DrawElements *PrimitiveSet)
void removeDrawElements(osg::DrawElements *PrimitiveSet)
void setDrawElements(unsigned int i, DrawElements *PrimitiveSet)
ElementBufferObject(const ElementBufferObject &pbo, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
DrawElements * getDrawElements(unsigned int i)
META_Object(osg, ElementBufferObject)
Definition FrameStamp:35
Definition BufferObject:332
osg::ref_ptr< GLBufferObject > generateGLBufferObject(const osg::BufferObject *bufferObject)
unsigned int _maxGLBufferObjectPoolSize
Definition BufferObject:392
unsigned int & getCurrGLBufferObjectPoolSize()
Definition BufferObject:345
unsigned int getCurrGLBufferObjectPoolSize() const
Definition BufferObject:346
GLBufferObjectSet * getGLBufferObjectSet(const BufferObjectProfile &profile)
double _deleteTime
Definition BufferObject:399
GLBufferObjectSetMap _glBufferObjectSetMap
Definition BufferObject:393
bool hasSpace(unsigned int size) const
Definition BufferObject:351
unsigned int & getNumberApplied()
Definition BufferObject:380
unsigned int & getNumberOrphanedGLBufferObjects()
Definition BufferObject:341
void setCurrGLBufferObjectPoolSize(unsigned int size)
Definition BufferObject:344
unsigned int _currGLBufferObjectPoolSize
Definition BufferObject:391
unsigned int _numGenerated
Definition BufferObject:401
unsigned int getNumberOrphanedGLBufferObjects() const
Definition BufferObject:342
unsigned int _numActiveGLBufferObjects
Definition BufferObject:389
unsigned int & getNumberDeleted()
Definition BufferObject:374
unsigned int _numDeleted
Definition BufferObject:398
unsigned int _numFrames
Definition BufferObject:397
GLBufferObjectManager(unsigned int contextID)
void setNumberActiveGLBufferObjects(unsigned int size)
Definition BufferObject:336
unsigned int & getNumberGenerated()
Definition BufferObject:377
void setMaxGLBufferObjectPoolSize(unsigned int size)
double _applyTime
Definition BufferObject:405
void newFrame(osg::FrameStamp *fs)
unsigned int getNumberActiveGLBufferObjects() const
Definition BufferObject:338
unsigned int & getNumberFrames()
Definition BufferObject:372
unsigned int & getFrameNumber()
Definition BufferObject:371
unsigned int _numOrphanedGLBufferObjects
Definition BufferObject:390
double & getApplyTime()
Definition BufferObject:381
unsigned int & getNumberActiveGLBufferObjects()
Definition BufferObject:337
void handlePendingOrphandedGLBufferObjects()
void recomputeStats(std::ostream &out) const
std::map< BufferObjectProfile, osg::ref_ptr< GLBufferObjectSet > > GLBufferObjectSetMap
Definition BufferObject:387
void flushDeletedGLObjects(double currentTime, double &availableTime)
void reportStats(std::ostream &out)
unsigned int _numApplied
Definition BufferObject:404
unsigned int _frameNumber
Definition BufferObject:395
double & getGenerateTime()
Definition BufferObject:378
bool makeSpace(unsigned int size)
unsigned int getMaxGLBufferObjectPoolSize() const
Definition BufferObject:349
double _generateTime
Definition BufferObject:402
double & getDeleteTime()
Definition BufferObject:375
void setNumberOrphanedGLBufferObjects(unsigned int size)
Definition BufferObject:340
Definition BufferObject:277
void flushDeletedGLBufferObjects(double currentTime, double &availableTime)
void remove(GLBufferObject *to)
osg::ref_ptr< GLBufferObject > takeFromOrphans(BufferObject *bufferObject)
unsigned int computeNumGLBufferObjectsInList() const
BufferObjectProfile _profile
Definition BufferObject:322
GLBufferObject * _head
Definition BufferObject:327
GLBufferObjectList _pendingOrphanedGLBufferObjects
Definition BufferObject:325
void addToBack(GLBufferObject *to)
void orphan(GLBufferObject *to)
bool checkConsistency() const
virtual ~GLBufferObjectSet()
unsigned int getNumOrphans() const
Definition BufferObject:310
unsigned int _numOfGLBufferObjects
Definition BufferObject:323
void moveToBack(GLBufferObject *to)
void flushAllDeletedGLBufferObjects()
GLBufferObjectSet(GLBufferObjectManager *parent, const BufferObjectProfile &profile)
GLBufferObjectList _orphanedGLBufferObjects
Definition BufferObject:324
osg::ref_ptr< GLBufferObject > takeOrGenerate(BufferObject *bufferObject)
unsigned int getNumOfGLBufferObjects() const
Definition BufferObject:309
unsigned int _contextID
Definition BufferObject:321
OpenThreads::Mutex _mutex
Definition BufferObject:318
void discardAllDeletedGLBufferObjects()
GLBufferObjectManager * getParent()
Definition BufferObject:306
unsigned int size() const
Definition BufferObject:300
GLBufferObjectManager * _parent
Definition BufferObject:320
GLBufferObject * _tail
Definition BufferObject:328
unsigned int getNumPendingOrphans() const
Definition BufferObject:311
void moveToSet(GLBufferObject *to, GLBufferObjectSet *set)
bool makeSpace(unsigned int &size)
void handlePendingOrphandedGLBufferObjects()
const BufferObjectProfile & getProfile() const
Definition BufferObject:281
Definition BufferObject:164
GLuint & getGLObjectID()
Definition BufferObject:208
void setBufferObject(BufferObject *bufferObject)
void setProfile(const BufferObjectProfile &profile)
Definition BufferObject:169
void dirty()
Definition BufferObject:224
virtual ~GLBufferObject()
GLsizeiptr getOffset(unsigned int i) const
Definition BufferObject:210
unsigned int _allocatedSize
Definition BufferObject:253
GLBufferObject(unsigned int contextID, BufferObject *bufferObject, unsigned int glObjectID=0)
const BufferObjectProfile & getProfile() const
Definition BufferObject:170
void unbindBuffer()
Definition BufferObject:214
void setBufferDataHasBeenRead(const osg::BufferData *bd)
void bindBuffer()
Definition BufferObject:771
BufferEntries _bufferEntries
Definition BufferObject:258
bool hasAllBufferDataBeenRead() const
bool isPBOSupported() const
Definition BufferObject:234
BufferObject * _bufferObject
Definition BufferObject:260
unsigned int _contextID
Definition BufferObject:249
void assign(BufferObject *bufferObject)
bool _dirty
Definition BufferObject:255
GLExtensions * _extensions
Definition BufferObject:270
GLuint getGLObjectID() const
Definition BufferObject:209
BufferObjectProfile _profile
Definition BufferObject:252
unsigned int getContextID() const
Definition BufferObject:206
bool isDirty() const
Definition BufferObject:222
GLBufferObjectSet * _set
Definition BufferObject:264
GLuint _glObjectID
Definition BufferObject:250
std::vector< BufferEntry > BufferEntries
Definition BufferObject:257
unsigned int computeBufferAlignment(unsigned int pos, unsigned int bufferAlignment) const
Definition BufferObject:244
GLBufferObject * _previous
Definition BufferObject:265
unsigned int _frameLastUsed
Definition BufferObject:267
BufferObject * getBufferObject()
Definition BufferObject:173
GLBufferObject * _next
Definition BufferObject:266
Definition GLExtensions:169
Definition GLObjects:57
Definition GLObjects:47
Definition Image:179
Definition Object:61
Definition BufferObject:668
void setImage(osg::Image *image)
const Image * getImage() const
PixelBufferObject(const PixelBufferObject &pbo, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
bool isPBOSupported(unsigned int contextID) const
Definition BufferObject:683
PixelBufferObject(osg::Image *image=0)
META_Object(osg, PixelBufferObject)
virtual ~PixelBufferObject()
Definition BufferObject:697
osg::buffered_value< unsigned int > ModeList
Definition BufferObject:743
void setDataSize(unsigned int size)
Set new size of the buffer object. This will reallocate the memory on the next compile.
Definition BufferObject:705
Mode
Definition BufferObject:726
virtual void resizeGLObjectBuffers(unsigned int maxSize)
unsigned int getDataSize() const
Get data size of the used buffer.
Definition BufferObject:708
virtual void compileBuffer(State &state) const
Compile the buffer (reallocate the memory if buffer is dirty)
PixelDataBufferObject(const PixelDataBufferObject &pbo, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
META_Object(osg, PixelDataBufferObject)
virtual void bindBufferInReadMode(State &state)
Bind the buffer in read mode, which means that data can be downloaded from the buffer (note: GL_PIXEL...
Mode getMode(unsigned int contextID) const
Definition BufferObject:737
virtual void unbindBuffer(unsigned int contextID) const
Unbind the buffer.
virtual void bindBufferInWriteMode(State &state)
Bind the buffer in write mode, which means following OpenGL instructions will write data into the buf...
ModeList _mode
Definition BufferObject:745
Definition PrimitiveSet:125
Definition Referenced:44
Definition BufferObject:779
ShaderStorageBufferObject(const ShaderStorageBufferObject &ubo, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
META_Object(osg, ShaderStorageBufferObject)
Definition State:80
Definition BufferObject:751
UniformBufferObject(const UniformBufferObject &ubo, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
META_Object(osg, UniformBufferObject)
Definition BufferObject:599
const Array * getArray(unsigned int i) const
void removeArray(osg::Array *array)
unsigned int addArray(osg::Array *array)
Array * getArray(unsigned int i)
void setArray(unsigned int i, Array *array)
META_Object(osg, VertexBufferObject)
VertexBufferObject(const VertexBufferObject &vbo, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
Definition buffered_value:79
Definition buffered_value:27
Definition ref_ptr:32
author: Julien Valentin 2017 (mp3butcher@hotmail.com)
Definition AlphaFunc:19
std::list< ref_ptr< GLBufferObject > > GLBufferObjectList
Definition BufferObject:274
unsigned int computeBufferAlignment(unsigned int pos, unsigned int bufferAlignment)
Definition BufferObject:155
ptrdiff_t GLsizeiptr
Definition GLDefines:691
#define NULL
Definition osg/Export:55
#define OSG_EXPORT
Definition osg/Export:39
Definition BufferObject:539
ModifiedCallback()
Definition BufferObject:540
ModifiedCallback(const ModifiedCallback &org, const CopyOp &copyop)
Definition BufferObject:542
META_Object(osg, ModifiedCallback)
virtual void modified(BufferData *) const
Definition BufferObject:547
Definition BufferObject:176
unsigned int modifiedCount
Definition BufferObject:200
BufferEntry(const BufferEntry &rhs)
Definition BufferObject:179
BufferEntry()
Definition BufferObject:177
unsigned int getNumClients() const
BufferData * dataSource
Definition BufferObject:203
unsigned int numRead
Definition BufferObject:199
unsigned int offset
Definition BufferObject:202
unsigned int dataSize
Definition BufferObject:201