Changeset 9527

Show
Ignore:
Timestamp:
01/21/09 19:23:55 (6 years ago)
Author:
robert
Message:

Replaced readImageFile() usage with readRefImageFile() to prevent threading issues with caching of imagery in the osgDB::Registry cache.

Location:
OpenSceneGraph/trunk/src/osgPlugins
Files:
21 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/src/osgPlugins/3ds/ReaderWriter3DS.cpp

    r8578 r9527  
    716716        osg::notify(osg::DEBUG_INFO) << "    LIB3DS_RGB_TINT     "<<((texture->flags)&LIB3DS_RGB_TINT)<< std::endl; 
    717717 
    718         osg::Image* osg_image = osgDB::readImageFile(fileName.c_str()); 
    719         if (osg_image==NULL) 
     718        osg::ref_ptr<osg::Image> osg_image = osgDB::readRefImageFile(fileName.c_str()); 
     719        if (!osg_image) 
    720720        { 
    721721            osg::notify(osg::NOTICE) << "Warning: Cannot create texture "<<texture->name<< std::endl; 
     
    724724 
    725725        osg::Texture2D* osg_texture = new osg::Texture2D; 
    726         osg_texture->setImage(osg_image); 
     726        osg_texture->setImage(osg_image.get()); 
    727727 
    728728        // does the texture support transparancy? 
  • OpenSceneGraph/trunk/src/osgPlugins/OpenFlight/PaletteRecords.cpp

    r9493 r9527  
    291291    osg::StateSet* readTexture(const std::string& filename, const Document& document) const 
    292292    { 
    293         osg::Image* image = osgDB::readImageFile(filename,document.getOptions()); 
     293        osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(filename,document.getOptions()); 
    294294        if (!image) return NULL; 
    295295 
     
    301301        texture->setWrap(osg::Texture2D::WRAP_T,osg::Texture2D::REPEAT); 
    302302        texture->setResizeNonPowerOfTwoHint(true); 
    303         texture->setImage(image); 
     303        texture->setImage(image.get()); 
    304304        stateset->setTextureAttributeAndModes(0, texture, osg::StateAttribute::ON); 
    305305 
  • OpenSceneGraph/trunk/src/osgPlugins/ac/ac3d.cpp

    r9475 r9527  
    352352            return false; 
    353353        } 
    354         mImage = osgDB::readImageFile(absFileName, options); 
     354        mImage = osgDB::readRefImageFile(absFileName, options); 
    355355        if (!mImage.valid()) 
    356356        { 
  • OpenSceneGraph/trunk/src/osgPlugins/bsp/Q3BSPReader.cpp

    r9426 r9527  
    449449      jpgExtendedName+=".jpg"; 
    450450 
    451       osg::Image* image = osgDB::readImageFile(tgaExtendedName); 
     451      osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(tgaExtendedName); 
    452452      if (!image) 
    453453        { 
    454           image = osgDB::readImageFile(jpgExtendedName); 
     454          image = osgDB::readRefImageFile(jpgExtendedName); 
    455455          if (!image) 
    456456            { 
     
    461461 
    462462      osg::Texture2D* texture= new osg::Texture2D; 
    463       texture->setImage(image); 
     463      texture->setImage(image.get()); 
    464464      texture->setDataVariance(osg::Object::DYNAMIC); // protect from being optimized away as static state. 
    465465      texture->setWrap(osg::Texture2D::WRAP_S, osg::Texture2D::REPEAT); 
  • OpenSceneGraph/trunk/src/osgPlugins/bsp/VBSPReader.cpp

    r9434 r9527  
    560560    std::string   texFile; 
    561561    std::string   texPath; 
    562     Image *       texImage; 
    563     Texture *     texture; 
     562    osg::ref_ptr<Image>       texImage; 
     563    osg::ref_ptr<Texture>     texture; 
    564564 
    565565    // Find the texture's image file 
     
    586586    if (!texPath.empty()) 
    587587    { 
    588         texImage = readImageFile(texPath); 
     588        texImage = readRefImageFile(texPath); 
    589589 
    590590        // If we got the image, create the texture attribute 
     
    594594            if (texImage->t() == 1) 
    595595            { 
    596                 texture = new Texture1D(); 
    597                 ((Texture1D *)texture)->setImage(texImage); 
     596                texture = new Texture1D(texImage.get()); 
    598597            } 
    599598            else if (texImage->r() == 1) 
    600599            { 
    601                 texture = new Texture2D(); 
    602                 ((Texture2D *)texture)->setImage(texImage); 
     600                texture = new Texture2D(texImage.get()); 
    603601            } 
    604602            else 
    605603            { 
    606                 texture = new Texture3D(); 
    607                 ((Texture3D *)texture)->setImage(texImage); 
     604                texture = new Texture3D(texImage.get()); 
    608605            } 
    609606 
  • OpenSceneGraph/trunk/src/osgPlugins/dae/daeRMaterials.cpp

    r9240 r9527  
    736736    } 
    737737    //Got a sampler and a surface and an imaged. Time to create the texture stuff for osg 
    738     osg::Image *img = NULL; 
     738    osg::ref_ptr<osg::Image> img; 
    739739    if ( dImg->getInit_from() != NULL ) 
    740740    { 
     
    766766            const char* filename = path.c_str(); 
    767767#endif 
    768             img = osgDB::readImageFile( filename ); 
     768            img = osgDB::readRefImageFile( filename ); 
    769769 
    770770            osg::notify(osg::INFO)<<"  processTexture(..) - readImage("<<filename<<")"<<std::endl; 
     
    787787    } 
    788788 
    789     osg::Texture2D *t2D = new osg::Texture2D( img ); 
     789    osg::Texture2D *t2D = new osg::Texture2D( img.get() ); 
    790790    //set texture parameters 
    791791    if ( sampler != NULL ) 
  • OpenSceneGraph/trunk/src/osgPlugins/dw/ReaderWriterDW.cpp

    r9475 r9527  
    5555            if (!ctx || !tx) { // new texture needed 
    5656                if (fname.length()>0) {  
    57                     ctx=osgDB::readImageFile(fname.c_str(),options); 
    58                     if (ctx) { 
     57                    ctx=osgDB::readRefImageFile(fname.c_str(),options); 
     58                    if (ctx.valid()) { 
    5959                        ctx->setFileName(fname); 
    60                         tx=new Texture2D; 
    61                         tx->setImage(ctx); 
     60                        tx=new Texture2D(ctx.get()); 
    6261                        tx->setWrap(Texture2D::WRAP_S, Texture2D::REPEAT); 
    6362                        tx->setWrap(Texture2D::WRAP_T, Texture2D::REPEAT); 
     
    6867                } 
    6968            } 
    70             if (ctx && tx) { // texture exists 
    71                 dstate->setTextureAttributeAndModes(0,tx,osg::StateAttribute::ON); 
     69            if (ctx.valid() && tx.valid()) { // texture exists 
     70                dstate->setTextureAttributeAndModes(0,tx.get(),osg::StateAttribute::ON); 
    7271            } 
    7372        } 
     
    176175    enum atten {NONE, INVERSE_DIST, INVERSE_SQUARE} atyp; 
    177176    float bright,halfIn,halfOut,falloff; // light brightness 
    178     Image *ctx; 
    179     Texture2D *tx; 
     177    osg::ref_ptr<osg::Image> ctx; 
     178    osg::ref_ptr<osg::Texture2D> tx; 
    180179    int _lightnum; 
    181180    StateSet *dstate; // used to represent the dw material in OSG 
  • OpenSceneGraph/trunk/src/osgPlugins/geo/ReaderWriterGEO.cpp

    r9459 r9527  
    667667            dstate->setAttribute(pt); 
    668668            if (txidx>=0 && (unsigned int)txidx<txlist.size()) { 
    669                 dstate->setTextureAttribute(0, txenvlist[txidx] ); 
    670                 dstate->setTextureAttributeAndModes(0,txlist[txidx],osg::StateAttribute::ON); 
     669                dstate->setTextureAttribute(0, txenvlist[txidx].get() ); 
     670                dstate->setTextureAttributeAndModes(0,txlist[txidx].get(),osg::StateAttribute::ON); 
    671671                const Image *txim=txlist[txidx]->getImage(); 
    672672                if (txim) { 
     
    685685                dstate->setMode(GL_COLOR_MATERIAL, osg::StateAttribute::ON); 
    686686            } 
    687             dstate->setAttribute(matlist[imat]); 
     687            dstate->setAttribute(matlist[imat].get()); 
    688688            Vec4 col=matlist[imat]->getAmbient(Material::FRONT); 
    689689            if (col[3]<0.99) { 
     
    14671467            const char *name = gfd->getChar(); 
    14681468            if (name) { 
    1469                 Texture2D *tx=new Texture2D; 
    1470                 Image *ctx=osgDB::readImageFile(name,options); 
    1471                 if (ctx) { 
     1469                osg::ref_ptr<osg::Texture2D> tx = new Texture2D; 
     1470                osg::ref_ptr<osg::Image> ctx = osgDB::readImageFile(name,options); 
     1471                if (ctx.valid()) { 
    14721472                    ctx->setFileName(name); 
    1473                     tx->setImage(ctx); 
     1473                    tx->setImage(ctx.get()); 
    14741474                } 
    14751475                gfd=gr->getField(GEO_DB_TEX_WRAPS); 
     
    14871487                } 
    14881488                tx->setWrap(Texture2D::WRAP_T, wm); 
    1489                 txlist.push_back(tx); 
     1489                txlist.push_back(tx.get()); 
    14901490                osg::TexEnv* texenv = new osg::TexEnv; 
    14911491                osg::TexEnv::Mode md=osg::TexEnv::MODULATE; 
     
    20152015    std::vector<georecord *> geotxlist; // list of geo::textures for this model 
    20162016    std::vector<georecord *> geomatlist; // list of geo::materials for this model 
    2017     std::vector<osg::Texture2D *> txlist; // list of osg::textures for this model 
    2018     std::vector<osg::TexEnv *> txenvlist; // list of texture environments for the textures 
    2019     std::vector<osg::Material *> matlist; // list of materials for current model 
     2017    std::vector< osg::ref_ptr<osg::Texture2D> > txlist; // list of osg::textures for this model 
     2018    std::vector< osg::ref_ptr<osg::TexEnv> > txenvlist; // list of texture environments for the textures 
     2019    std::vector< osg::ref_ptr<osg::Material> > matlist; // list of materials for current model 
    20202020    georecord *cpalrec; // colour palette record 
    20212021}; 
  • OpenSceneGraph/trunk/src/osgPlugins/ive/DataInputStream.cpp

    r9199 r9527  
    11291129    // Image is not in list. 
    11301130    // Read it from disk, 
    1131     osg::Image* image = osgDB::readImageFile(filename.c_str(),_options.get()); 
     1131    osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(filename.c_str(),_options.get()); 
    11321132 
    11331133    // add it to the imageList, 
     
    11371137    if (_verboseOutput) std::cout<<"read/writeImage() ["<<image<<"]"<<std::endl; 
    11381138 
    1139     return image; 
     1139    return image.release(); 
    11401140} 
    11411141 
  • OpenSceneGraph/trunk/src/osgPlugins/logo/ReaderWriterLOGO.cpp

    r9397 r9527  
    159159        void addLogo( RelativePosition pos, std::string name ) 
    160160        { 
    161             osg::Image *image = osgDB::readImageFile( name.c_str() ); 
    162             if( image != NULL ) 
    163                 logos[pos].push_back( image );  
     161            osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile( name.c_str() ); 
     162            if( image.valid()) 
     163                logos[pos].push_back( image.get() );  
    164164            else 
    165165                osg::notify(osg::WARN)<< "Logos::addLogo image file not found : " << name << ".\n"; 
  • OpenSceneGraph/trunk/src/osgPlugins/lwo/ReaderWriterLWO.cpp

    r9343 r9527  
    243243                { 
    244244                    osg::notify(osg::INFO) << "ctex " << lw_material.ctex.name << std::endl; 
    245                     osg::Image* image = osgDB::readImageFile(lw_material.ctex.name); 
    246                     if (image) 
     245                    osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(lw_material.ctex.name); 
     246                    if (image.valid()) 
    247247                    { 
    248248                        // create state 
     
    251251                        // create texture 
    252252                        osg::Texture2D* texture = new osg::Texture2D; 
    253                         texture->setImage(image); 
     253                        texture->setImage(image.get()); 
    254254 
    255255                        // texture wrap mode 
  • OpenSceneGraph/trunk/src/osgPlugins/lwo/Surface.cpp

    r8648 r9527  
    196196                                break; 
    197197                            } 
     198                 
     199                            osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(image_file, db_options); 
     200                            if (!image) break; 
    198201 
    199202                            osg::ref_ptr<osg::Texture2D> texture = new osg::Texture2D; 
    200203                            if (force_arb_compression) 
    201204                                texture->setInternalFormatMode(osg::Texture::USE_ARB_COMPRESSION); 
    202                             texture->setImage(osgDB::readImageFile(image_file, db_options)); 
     205                            texture->setImage(image.get()); 
    203206                            texture->setWrap(osg::Texture::WRAP_S, osg_wrap_mode(block.get_image_map().width_wrap)); 
    204207                            texture->setWrap(osg::Texture::WRAP_T, osg_wrap_mode(block.get_image_map().height_wrap)); 
  • OpenSceneGraph/trunk/src/osgPlugins/lwo/old_Lwo2.cpp

    r9397 r9527  
    708708        if (surface->image_index >= 0)  
    709709        { 
    710             Image* image = osgDB::readImageFile(_images[surface->image_index]); 
     710            osg::ref_ptr<Image> image = osgDB::readRefImageFile(_images[surface->image_index]); 
    711711            notify(DEBUG_INFO) << "\tloaded image '" << _images[surface->image_index] << "'" << std::endl; 
    712712            notify(DEBUG_INFO) << "\tresult - " << image << std::endl; 
    713             if (image) 
     713            if (image.valid()) 
    714714            { 
    715715                // create texture 
    716716                Texture2D* texture = new osg::Texture2D; 
    717                 texture->setImage(image); 
     717                texture->setImage(image.get()); 
    718718                state_set->setTextureAttributeAndModes(0, texture, StateAttribute::ON);         
    719719 
  • OpenSceneGraph/trunk/src/osgPlugins/md2/ReaderWriterMD2.cpp

    r9475 r9527  
    225225    std::vector<osg::Texture2D*> skin_textures; 
    226226 
    227     for (int si = 0; si < md2_header->numSkins; si++) { 
    228         osg::Image *img; 
    229         osg::Texture2D *tex; 
     227    for (int si = 0; si < md2_header->numSkins; si++) 
     228    { 
     229        osg::ref_ptr<osg::Image> img; 
     230        osg::ref_ptr<osg::Texture2D> tex; 
    230231        std::string imgname (md2_skins[si].name); 
    231232 
    232233        // first try loading the imgname straight 
    233         img = osgDB::readImageFile (imgname, options); 
    234         if (img) { 
     234        img = osgDB::readRefImageFile (imgname, options); 
     235        if (img.valid()) { 
    235236            tex = new osg::Texture2D; 
    236237            tex->setImage (img); 
     
    245246            // it's a pcx, so try bmp and tga, since pcx sucks 
    246247            std::string basename = imgname.substr (0, imgname.size() - 3); 
    247             img = osgDB::readImageFile (basename + "bmp", options); 
    248             if (img) { 
     248            img = osgDB::readRefImageFile (basename + "bmp", options); 
     249            if (img.valid()) { 
    249250                tex = new osg::Texture2D; 
    250                 tex->setImage (img); 
     251                tex->setImage (img.get()); 
    251252                skin_textures.push_back (tex); 
    252253                continue; 
    253254            } 
    254255 
    255             img = osgDB::readImageFile (basename + "tga", options); 
    256             if (img) { 
     256            img = osgDB::readRefImageFile (basename + "tga", options); 
     257            if (img.valid()) { 
    257258                tex = new osg::Texture2D; 
    258                 tex->setImage (img); 
     259                tex->setImage (img,get()); 
    259260                skin_textures.push_back (tex); 
    260261                continue; 
     
    268269#else 
    269270    // load the single skin 
    270     osg::Image *skin_image = NULL; 
    271     osg::Texture2D *skin_texture = NULL; 
     271    osg::ref_ptr<osg::Image> skin_image; 
     272    osg::ref_ptr<osg::Texture2D> skin_texture = NULL; 
    272273 
    273274    if (md2_header->numSkins > 0) { 
     
    276277        do { 
    277278            // first try loading the imgname straight 
    278             skin_image = osgDB::readImageFile (imgname, options); 
    279             if (skin_image) break; 
     279            skin_image = osgDB::readRefImageFile(imgname, options); 
     280            if (skin_image.valid()) break; 
    280281 
    281282            // we failed, so check if it's a PCX image 
     
    285286                // it's a pcx, so try bmp and tga, since pcx sucks 
    286287                std::string basename = imgname.substr (0, imgname.size() - 3); 
    287                 skin_image = osgDB::readImageFile (basename + "bmp", options); 
    288                 if (skin_image) break; 
    289  
    290                 skin_image = osgDB::readImageFile (basename + "tga", options); 
    291                 if (skin_image) break; 
     288                skin_image = osgDB::readRefImageFile (basename + "bmp", options); 
     289                if (skin_image.valid()) break; 
     290 
     291                skin_image = osgDB::readRefImageFile (basename + "tga", options); 
     292                if (skin_image.valid()) break; 
    292293            } 
    293294        } while (0); 
    294295 
    295         if (skin_image) { 
     296        if (skin_image.valid()) { 
    296297            skin_texture = new osg::Texture2D; 
    297             skin_texture->setImage (skin_image); 
     298            skin_texture->setImage (skin_image.get()); 
    298299            skin_texture->setFilter (osg::Texture2D::MAG_FILTER, osg::Texture2D::NEAREST); 
    299300        } else { 
     
    408409 
    409410    if (skin_texture != NULL) { 
    410         state->setTextureAttributeAndModes (0, skin_texture, osg::StateAttribute::ON); 
     411        state->setTextureAttributeAndModes (0, skin_texture.get(), osg::StateAttribute::ON); 
    411412    } 
    412413    base_switch->setStateSet (state); 
  • OpenSceneGraph/trunk/src/osgPlugins/mdl/MDLReader.cpp

    r9459 r9527  
    8585ref_ptr<Texture> MDLReader::readTextureFile(std::string textureName) 
    8686{ 
    87     std::string   texFile; 
    88     std::string   texPath; 
    89     Image *       texImage; 
    90     Texture *     texture; 
     87    std::string             texFile; 
     88    std::string             texPath; 
     89    osg::ref_ptr<Image>     texImage; 
     90    osg::ref_ptr<Texture>   texture; 
    9191 
    9292    // Find the texture's image file 
     
    125125    if (!texPath.empty()) 
    126126    { 
    127         texImage = readImageFile(texPath); 
     127        texImage = readRefImageFile(texPath); 
    128128 
    129129        // If we got the image, create the texture attribute 
    130         if (texImage != NULL) 
     130        if (texImage.valid()) 
    131131        { 
    132132            // Create the texture 
    133133            if (texImage->t() == 1) 
    134134            { 
    135                 texture = new Texture1D(); 
    136                 ((Texture1D *)texture)->setImage(texImage); 
     135                texture = new Texture1D(texImage.get()); 
    137136            } 
    138137            else if (texImage->r() == 1) 
    139138            { 
    140                 texture = new Texture2D(); 
    141                 ((Texture2D *)texture)->setImage(texImage); 
     139                texture = new Texture2D(texImage.get()); 
    142140            } 
    143141            else 
    144142            { 
    145                 texture = new Texture3D(); 
    146                 ((Texture3D *)texture)->setImage(texImage); 
     143                texture = new Texture3D(texImage.get()); 
    147144            } 
    148145 
  • OpenSceneGraph/trunk/src/osgPlugins/obj/ReaderWriterOBJ.cpp

    r9475 r9527  
    198198        { 
    199199            // first try with database path of parent.  
    200             image = osgDB::readImageFile(model.getDatabasePath()+'/'+filename); 
     200            image = osgDB::readRefImageFile(model.getDatabasePath()+'/'+filename); 
    201201        } 
    202202         
     
    204204        { 
    205205            // if not already set then try the filename as is. 
    206             image = osgDB::readImageFile(filename); 
     206            image = osgDB::readRefImageFile(filename); 
    207207        } 
    208208 
  • OpenSceneGraph/trunk/src/osgPlugins/osgViewer/View.cpp

    r9389 r9527  
    186186        if (!filename.empty()) 
    187187        { 
    188             intensityMap = osgDB::readImageFile(filename); 
     188            intensityMap = osgDB::readRefImageFile(filename); 
    189189        } 
    190190 
  • OpenSceneGraph/trunk/src/osgPlugins/osgVolume/ImageLayer.cpp

    r9501 r9527  
    5858                if (fileType == osgDB::DIRECTORY) 
    5959                { 
    60                     image = osgDB::readImageFile(filename+".dicom"); 
     60                    image = osgDB::readRefImageFile(filename+".dicom"); 
    6161                     
    6262                } 
    6363                else if (fileType == osgDB::REGULAR_FILE) 
    6464                { 
    65                     image = osgDB::readImageFile( filename ); 
     65                    image = osgDB::readRefImageFile( filename ); 
    6666                } 
    6767 
  • OpenSceneGraph/trunk/src/osgPlugins/txp/TXPArchive.cpp

    r9392 r9527  
    392392         
    393393        std::string theFile = path + filename ; 
    394         osg::Image* image = osgDB::readImageFile(theFile); 
    395         if (image) 
    396         { 
    397             osg_texture->setImage(image); 
     394        osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(theFile); 
     395        if (image.valid()) 
     396        { 
     397            osg_texture->setImage(image.get()); 
    398398        } 
    399399        else 
  • OpenSceneGraph/trunk/src/osgPlugins/vrml/ReaderWriterVRML2.cpp

    r8442 r9527  
    297297                    const std::string &url = mfs.value[0]; 
    298298 
    299                     osg::ref_ptr<osg::Image> image = osgDB::readImageFile(url); 
     299                    osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(url); 
    300300 
    301301                    if (image != 0) { 
  • OpenSceneGraph/trunk/src/osgPlugins/x/ReaderWriterDirectX.cpp

    r8624 r9527  
    228228            osg::Texture2D* texture = texForImage[mtl.texture[j]]; 
    229229            if (!texture) { 
    230                 osg::Image* image = osgDB::readImageFile(mtl.texture[j],options); 
     230                osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(mtl.texture[j],options); 
    231231                if (!image) 
    232232                    continue; 
     
    236236                texForImage[mtl.texture[j]] = texture; 
    237237 
    238                 texture->setImage(image); 
     238                texture->setImage(image.get()); 
    239239                texture->setWrap(osg::Texture2D::WRAP_S, osg::Texture2D::REPEAT); 
    240240                texture->setWrap(osg::Texture2D::WRAP_T, osg::Texture2D::REPEAT);