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/State

    r10588 r10600  
    406406 
    407407 
    408         void setCurrentVertexBufferObject(osg::VertexBufferObject* vbo) { _currentVBO = vbo; } 
    409         const VertexBufferObject* getCurrentVertexBufferObject() { return _currentVBO; } 
    410         inline void bindVertexBufferObject(const osg::VertexBufferObject* vbo) 
     408        void setCurrentVertexBufferObject(osg::GLBufferObject* vbo) { _currentVBO = vbo; } 
     409        const GLBufferObject* getCurrentVertexBufferObject() { return _currentVBO; } 
     410        inline void bindVertexBufferObject(osg::GLBufferObject* vbo) 
    411411        { 
    412412            if (vbo == _currentVBO) return; 
    413             if (vbo->isDirty(_contextID)) vbo->compileBuffer(*this); 
    414             else _glBindBuffer(GL_ARRAY_BUFFER_ARB,vbo->buffer(_contextID)); 
     413            if (vbo->isDirty()) vbo->compileBuffer(); 
     414            else _glBindBuffer(GL_ARRAY_BUFFER_ARB,vbo->getGLObjectID()); 
    415415            _currentVBO = vbo; 
    416416        } 
     
    423423        } 
    424424 
    425         void setCurrentElementBufferObject(osg::ElementBufferObject* ebo) { _currentEBO = ebo; } 
    426         const ElementBufferObject* getCurrentElementBufferObject() { return _currentEBO; } 
    427  
    428         inline void bindElementBufferObject(const osg::ElementBufferObject* ebo) 
     425        void setCurrentElementBufferObject(osg::GLBufferObject* ebo) { _currentEBO = ebo; } 
     426        const GLBufferObject* getCurrentElementBufferObject() { return _currentEBO; } 
     427 
     428        inline void bindElementBufferObject(osg::GLBufferObject* ebo) 
    429429        { 
    430430            if (ebo == _currentEBO) return; 
    431             if (ebo->isDirty(_contextID)) ebo->compileBuffer(*this); 
    432             else _glBindBuffer(GL_ELEMENT_ARRAY_BUFFER_ARB,ebo->buffer(_contextID)); 
     431            if (ebo->isDirty()) ebo->compileBuffer(); 
     432            else _glBindBuffer(GL_ELEMENT_ARRAY_BUFFER_ARB,ebo->getGLObjectID()); 
    433433            _currentEBO = ebo; 
    434434        } 
     
    441441        } 
    442442 
    443         void setCurrentPixelBufferObject(osg::PixelBufferObject* pbo) { _currentPBO = pbo; } 
    444         const PixelBufferObject* getCurrentPixelBufferObject() { return _currentPBO; } 
    445  
    446         inline void bindPixelBufferObject(const osg::PixelBufferObject* pbo) 
     443        void setCurrentPixelBufferObject(osg::GLBufferObject* pbo) { _currentPBO = pbo; } 
     444        const GLBufferObject* getCurrentPixelBufferObject() { return _currentPBO; } 
     445 
     446        inline void bindPixelBufferObject(osg::GLBufferObject* pbo) 
    447447        { 
    448448            if (pbo == _currentPBO) return; 
    449449 
    450             if (pbo->isDirty(_contextID)) pbo->compileBuffer(*this); 
    451             else _glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB,pbo->buffer(_contextID)); 
     450            if (pbo->isDirty()) pbo->compileBuffer(); 
     451            else _glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB,pbo->getGLObjectID()); 
    452452 
    453453            _currentPBO = pbo; 
     
    486486            if (array) 
    487487            { 
    488                 const VertexBufferObject* vbo = array->getVertexBufferObject(); 
     488                GLBufferObject* vbo = array->getOrCreateGLBufferObject(_contextID); 
    489489                if (vbo) 
    490490                { 
    491491                    bindVertexBufferObject(vbo); 
    492                     setVertexPointer(array->getDataSize(),array->getDataType(),0,array->getVertexBufferObjectOffset()); 
     492                    setVertexPointer(array->getDataSize(),array->getDataType(),0,(const GLvoid *)(vbo->getOffset(array->getBufferIndex()))); 
    493493                } 
    494494                else 
     
    543543            if (array) 
    544544            { 
    545                 const VertexBufferObject* vbo = array->getVertexBufferObject(); 
     545                GLBufferObject* vbo = array->getOrCreateGLBufferObject(_contextID); 
    546546                if (vbo) 
    547547                { 
    548548                    bindVertexBufferObject(vbo); 
    549                 setNormalPointer(array->getDataType(),0,array->getVertexBufferObjectOffset()); 
     549                    setNormalPointer(array->getDataType(),0,(const GLvoid *)(vbo->getOffset(array->getBufferIndex()))); 
    550550                } 
    551551                else 
     
    599599            if (array) 
    600600            { 
    601                 const VertexBufferObject* vbo = array->getVertexBufferObject(); 
     601                GLBufferObject* vbo = array->getOrCreateGLBufferObject(_contextID); 
    602602                if (vbo) 
    603603                { 
    604604                    bindVertexBufferObject(vbo); 
    605                     setColorPointer(array->getDataSize(),array->getDataType(),0,array->getVertexBufferObjectOffset()); 
     605                    setColorPointer(array->getDataSize(),array->getDataType(),0,(const GLvoid *)(vbo->getOffset(array->getBufferIndex()))); 
    606606                } 
    607607                else 
     
    660660            if (array) 
    661661            { 
    662                 const VertexBufferObject* vbo = array->getVertexBufferObject(); 
     662                GLBufferObject* vbo = array->getOrCreateGLBufferObject(_contextID); 
    663663                if (vbo) 
    664664                { 
    665665                    bindVertexBufferObject(vbo); 
    666 #if 0 
    667                     setSecondaryColorPointer(array->getDataSize(),array->getDataType(),0,vbo->getOffset(array->getVertexBufferObjectIndex())); 
    668 #else 
    669                     setSecondaryColorPointer(array->getDataSize(),array->getDataType(),0,array->getVertexBufferObjectOffset()); 
    670 #endif 
     666                    setSecondaryColorPointer(array->getDataSize(),array->getDataType(),0,(const GLvoid *)(vbo->getOffset(array->getBufferIndex()))); 
    671667                } 
    672668                else 
     
    746742            if (array) 
    747743            { 
    748                 const VertexBufferObject* vbo = array->getVertexBufferObject(); 
     744                GLBufferObject* vbo = array->getOrCreateGLBufferObject(_contextID); 
    749745                if (vbo) 
    750746                { 
    751747                    bindVertexBufferObject(vbo); 
    752 #if 0 
    753                     setFogCoordPointer(array->getDataType(),0,vbo->getOffset(array->getVertexBufferObjectIndex())); 
    754 #else 
    755                     setFogCoordPointer(array->getDataType(),0,array->getVertexBufferObjectOffset()); 
    756 #endif 
     748                    setFogCoordPointer(array->getDataType(),0,(const GLvoid *)(vbo->getOffset(array->getBufferIndex()))); 
    757749                } 
    758750                else 
     
    795787            if (array) 
    796788            { 
    797                 const VertexBufferObject* vbo = array->getVertexBufferObject(); 
     789                GLBufferObject* vbo = array->getOrCreateGLBufferObject(_contextID); 
    798790                if (vbo) 
    799791                { 
    800792                    bindVertexBufferObject(vbo); 
    801 #if 0 
    802                     setTexCoordPointer(unit, array->getDataSize(),array->getDataType(),0,vbo->getOffset(array->getVertexBufferObjectIndex())); 
    803 #else 
    804                     setTexCoordPointer(unit, array->getDataSize(),array->getDataType(),0,array->getVertexBufferObjectOffset()); 
    805 #endif 
     793                    setTexCoordPointer(unit, array->getDataSize(),array->getDataType(),0, (const GLvoid *)(vbo->getOffset(array->getBufferIndex()))); 
    806794                } 
    807795                else 
     
    917905            if (array) 
    918906            { 
    919                 const VertexBufferObject* vbo = array->getVertexBufferObject(); 
     907                GLBufferObject* vbo = array->getOrCreateGLBufferObject(_contextID); 
    920908                if (vbo) 
    921909                { 
    922910                    bindVertexBufferObject(vbo); 
    923 #if 0 
    924                     setVertexAttribPointer(unit, array->getDataSize(),array->getDataType(),normalized,0,vbo->getOffset(array->getVertexBufferObjectIndex())); 
    925 #else 
    926                     setVertexAttribPointer(unit, array->getDataSize(),array->getDataType(),normalized,0,array->getVertexBufferObjectOffset()); 
    927 #endif 
     911                    setVertexAttribPointer(unit, array->getDataSize(),array->getDataType(),normalized,0,(const GLvoid *)(vbo->getOffset(array->getBufferIndex()))); 
    928912                } 
    929913                else 
     
    12801264        unsigned int                    _currentActiveTextureUnit; 
    12811265        unsigned int                    _currentClientActiveTextureUnit; 
    1282         const VertexBufferObject*       _currentVBO; 
    1283         const ElementBufferObject*      _currentEBO; 
    1284         const PixelBufferObject*        _currentPBO; 
     1266        GLBufferObject*                 _currentVBO; 
     1267        GLBufferObject*                 _currentEBO; 
     1268        GLBufferObject*                 _currentPBO; 
    12851269 
    12861270