Show
Ignore:
Timestamp:
10/01/09 22:19:42 (5 years ago)
Author:
robert
Message:

Introduced new BufferObject? design + implementation in preperation of implementing a pool system for buffer objects

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/include/osg/Array

    r10061 r10600  
    4444class ConstValueVisitor; 
    4545 
    46 class OSG_EXPORT Array : public Object 
     46class OSG_EXPORT Array : public BufferData 
    4747{ 
    4848 
     
    7878            _arrayType(arrayType), 
    7979            _dataSize(dataSize), 
    80             _dataType(dataType), 
    81             _modifiedCount(0), 
    82             _vboOffset(0) {} 
     80            _dataType(dataType) {} 
    8381     
    8482        Array(const Array& array,const CopyOp& copyop=CopyOp::SHALLOW_COPY): 
    85             Object(array,copyop), 
     83            BufferData(array,copyop), 
    8684            _arrayType(array._arrayType), 
    8785            _dataSize(array._dataSize), 
    88             _dataType(array._dataType), 
    89             _modifiedCount(0), 
    90             _vboOffset(0) {} 
     86            _dataType(array._dataType) {} 
    9187 
    9288        virtual bool isSameKindAs(const Object* obj) const { return dynamic_cast<const Array*>(obj)!=NULL; } 
     
    114110        virtual void trim() {} 
    115111 
    116         /** Dirty the primitive, which increments the modified count, to force buffer objects to update. */ 
    117         inline void dirty() { ++_modifiedCount; if (_vbo.valid()) _vbo->dirty(); } 
    118        
    119         /** Set the modified count value.*/ 
    120         inline void setModifiedCount(unsigned int value) { _modifiedCount=value; } 
    121  
    122         /** Get modified count value.*/ 
    123         inline unsigned int getModifiedCount() const { return _modifiedCount; } 
    124  
    125112        /** Set the VertexBufferObject.*/ 
    126         inline void setVertexBufferObject(osg::VertexBufferObject* vbo) 
    127         { 
    128             if (_vbo == vbo) return; 
    129              
    130             if (_vbo.valid()) 
    131             { 
    132                 _vbo->removeArray(this); 
    133             } 
    134              
    135             _vbo = vbo; 
    136              
    137             if (_vbo.valid()) 
    138             { 
    139                 _vbo->addArray(this); 
    140             } 
    141         } 
    142          
     113        inline void setVertexBufferObject(osg::VertexBufferObject* vbo) { setBufferObject(vbo); } 
     114 
    143115        /** Get the VertexBufferObject. If no VBO is assigned returns NULL*/ 
    144         inline osg::VertexBufferObject* getVertexBufferObject() { return _vbo.get(); } 
     116        inline osg::VertexBufferObject* getVertexBufferObject() { return dynamic_cast<osg::VertexBufferObject*>(_bufferObject.get()); } 
    145117 
    146118        /** Get the const VertexBufferObject. If no VBO is assigned returns NULL*/ 
    147         inline const osg::VertexBufferObject* getVertexBufferObject() const { return _vbo.get(); } 
    148  
    149         /** Set the offset into the VertexBufferObject, if used.*/ 
    150         void setVertexBufferObjectOffset(const GLvoid* offset ) const { _vboOffset = offset; } 
    151  
    152         /** Get the offset into the VertexBufferObject, if used.*/ 
    153         const GLvoid* getVertexBufferObjectOffset() const { return _vboOffset; } 
     119        inline const osg::VertexBufferObject* getVertexBufferObject() const { return dynamic_cast<const osg::VertexBufferObject*>(_bufferObject.get());  } 
    154120 
    155121    protected: 
    156      
    157         virtual ~Array() 
    158         { 
    159             if (_vbo.valid()) 
    160             { 
    161                 _vbo->removeArray(this); 
    162             } 
    163         } 
     122 
     123        virtual ~Array() {} 
    164124 
    165125        Type                                    _arrayType; 
    166126        GLint                                   _dataSize; 
    167127        GLenum                                  _dataType; 
    168         unsigned int                            _modifiedCount; 
    169         osg::ref_ptr<osg::VertexBufferObject>   _vbo; 
    170         mutable const GLvoid*                   _vboOffset; 
    171128}; 
    172129