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/src/osg/Texture.cpp

    r10598 r10600  
    4747#endif 
    4848 
    49 //#define DO_TIMING 
     49// #define DO_TIMING 
    5050 
    5151namespace osg { 
     
    17781778    bool useGluBuildMipMaps = mipmappingRequired && (!useHardwareMipMapGeneration && !image->isMipmap()); 
    17791779 
    1780     unsigned char* dataMinusOffset = 0; 
    1781     unsigned char* dataPlusOffset = 0; 
    1782  
    1783     const PixelBufferObject* pbo = image->getPixelBufferObject(); 
    1784     if (pbo && pbo->isPBOSupported(contextID) && !needImageRescale && !useGluBuildMipMaps) 
     1780    const unsigned char* dataPtr = image->data(); 
     1781    GLBufferObject* pbo = image->getOrCreateGLBufferObject(contextID); 
     1782    if (pbo && !needImageRescale && !useGluBuildMipMaps) 
    17851783    { 
    17861784        state.bindPixelBufferObject(pbo); 
    1787         dataMinusOffset = data; 
    1788         dataPlusOffset = reinterpret_cast<unsigned char*>(pbo->offset()); 
     1785        dataPtr = reinterpret_cast<const unsigned char*>(pbo->getOffset(image->getBufferIndex())); 
    17891786#ifdef DO_TIMING 
    17901787        osg::notify(osg::NOTICE)<<"after PBO "<<osg::Timer::instance()->delta_m(start_tick,osg::Timer::instance()->tick())<<"ms"<<std::endl; 
     
    18091806                (GLenum)image->getPixelFormat(), 
    18101807                (GLenum)image->getDataType(), 
    1811                 data -dataMinusOffset+dataPlusOffset); 
     1808                dataPtr); 
    18121809 
    18131810        } 
     
    18221819                inwidth, inheight,0,  
    18231820                size,  
    1824                 data-dataMinusOffset+dataPlusOffset);                 
     1821                dataPtr); 
    18251822        } 
    18261823 
     
    18541851                        (GLenum)image->getPixelFormat(), 
    18551852                        (GLenum)image->getDataType(), 
    1856                         image->getMipmapData(k)-dataMinusOffset+dataPlusOffset); 
     1853                        dataPtr + image->getMipmapOffset(k)); 
    18571854 
    18581855                    width >>= 1; 
     
    18751872                    extensions->glCompressedTexImage2D(target, k, _internalFormat,  
    18761873                                                       width, height, _borderWidth,  
    1877                                                        size, image->getMipmapData(k)-dataMinusOffset+dataPlusOffset);                 
     1874                                                       size, dataPtr + image->getMipmapOffset(k)); 
    18781875 
    18791876                    width >>= 1; 
     
    20282025    unsigned char* dataPlusOffset = 0; 
    20292026     
    2030     const PixelBufferObject* pbo = image->getPixelBufferObject(); 
    2031     if (pbo && pbo->isPBOSupported(contextID) && !needImageRescale && !useGluBuildMipMaps) 
     2027    const unsigned char* dataPtr = image->data(); 
     2028    GLBufferObject* pbo = image->getOrCreateGLBufferObject(contextID); 
     2029    if (pbo && !needImageRescale && !useGluBuildMipMaps) 
    20322030    { 
    20332031        state.bindPixelBufferObject(pbo); 
    2034         dataMinusOffset = data; 
    2035         dataPlusOffset = reinterpret_cast<unsigned char*>(pbo->offset()); 
     2032        dataPtr = reinterpret_cast<unsigned char*>(pbo->getOffset(image->getBufferIndex())); 
    20362033#ifdef DO_TIMING 
    20372034        osg::notify(osg::NOTICE)<<"after PBO "<<osg::Timer::instance()->delta_m(start_tick,osg::Timer::instance()->tick())<<"ms"<<std::endl;