Hi James, You are welcome to dive and look a full solution. Exactly what this might look like I can't say right now, my hunch is that we'll need to refactor the cache management such as making it state of ReaderWriter::Options object. If you don't feel comfortable with having a bash then you'll need to wait for me to have a free slot in which to tackle it.
Robert. On Mon, Mar 23, 2009 at 1:58 PM, James Killian <[email protected]>wrote: > > Robert, > Is there enough information in the previous email to know what direction I > wanted to address this issue? > > If you want I can make the fixes and submit it... Ideally I'd like to know > if this sounds like it should work or if you wanted to pursue managing the > cache differently (i.e. attached to the ReaderWriter::Options object). > > Please let me know when you have a chance... Thanks. > > > ----- Original Message ----- > From: "James Killian" <[email protected]> > To: "OpenSceneGraph Submissions" <[email protected] > > > Sent: Thursday, March 19, 2009 1:44 PM > Subject: Re: [osg-submissions] Text3D fix > > > > Is the read implementation's useObjectCache = false suppose to override > all > > cache hints that were provided by the options? I'm assuming not but just > > the cache hint of that type... if so... > > > > Seems like instead of passing a bool we could be passing the > > CacheHintOptions type and do an if with that against the > readFunctor.options > > something like: > > > > readImplementation (readFunctor, CacheHintType) > > { > > bool useObjectCache= readfunctor._options->getObjectCacheHint() & > > CacheHintType; > > if (useObjectCache) > > { > > } > > else > > { > > read(); > > } > > } > > > > That should be thread safe since everything is protected within the > > parameters > > What do you think? > > > > On a side note it appears all the derived functor types construct the > bool > > using cachehints & the type they represent. > > > > > > ----- Original Message ----- > > From: "Robert Osfield" <[email protected]> > > To: "OpenSceneGraph Submissions" > <[email protected]> > > Sent: Thursday, March 19, 2009 11:34 AM > > Subject: Re: [osg-submissions] Text3D fix > > > > > > > Hi James, > > > > > > The swaps are in their to prevent the local object cache from being > > > populated for the case when useObjectCache is false. > > > > > > Reviewing the code now it's clear that the code isn't robust in the > > presence > > > of multi-threading. Removing the local cache and the swaps wouldn't > solve > > > anything as it would simple may that the cache is used even when you've > > > asked for it not to be used. > > > > > > As to solution it's not going to be straight forward, it'll require the > > > cache to be managed differently, and most likely attached to the > > > ReaderWriter::Options object. > > > > > > Robert. > > > > > > On Thu, Mar 19, 2009 at 2:38 PM, James Killian > > <[email protected]>wrote: > > > > > > > > Behaviours: > > > > > Cache management is delegate to osgDB::Registry, but cache > > > > > coherence (load a file with option then reuse it, deactivate > the > > > > > cache when load a specific file or don't cached the loaded > file) > > > > > is user's responsibility. > > > > > > > > I actually ran into a similar issue... let me explain here: > > > > > > > > Looking at the latest rev 9884 of Registry.cpp around line 1641 in > the > > > > readImplementation() we see > > > > else > > > > { > > > > ObjectCache tmpObjectCache > > > > swap > > > > read > > > > swap > > > > return > > > > } > > > > > > > > I would dare to submit to remove the swaps, but first ask if they > were > > > > removed what would be broken as this has been this way for a long > time. > > > > > > > > Stress that breaks _objectCache: > > > > As of now if I have 2 threads loading where some object types are > cached > > > > and > > > > others are not (e.g. cached images but not nodes)... what happens is > > that > > > > the line 1631 addEntry() adds to the tmpOjectCache, and therefore the > > real > > > > _objectCache never gets populated. :( > > > > > > > > If someone can at least explain why the swaps were added I would be > > > > eternally grateful. > > > > > > > > > > > > > > > > ----- Original Message ----- > > > > From: "David Callu" <[email protected]> > > > > To: "OpenSceneGraph Submissions" > > <[email protected] > > > > > > > > > Sent: Friday, February 27, 2009 8:47 AM > > > > Subject: [osg-submissions] Text3D fix > > > > > > > > > > > > > Hi Robert > > > > > > > > > > Problem: > > > > > osgText::Text and osgText::Text3D use the same font file. > > > > > The first really load the file and obtain an osgText::Font > > object, > > > > > the second use the cache created during the first load of the > > > > > font file, and so obtain an osgText::Font object instead of > > > > > osgText::Font3D object. To obtain an osgText::Font3D object, > > > > > osgText::Text3D call osgDB::readObjectFile(...) with an option > > > > > to specify the plugin we want an osgText::Font3D instead of > > > > > osgText::Font. > > > > > > > > > > Generalised Problem: > > > > > In osgDB::Registry, loaded file cache is referenced by the name > > > > > of this file, so if I load a file with some options, and the > cache > > > > > already contain object for this filename, I obtain an object > > > > > potentially not loaded with my options. > > > > > > > > > > Behaviours: > > > > > Cache management is delegate to osgDB::Registry, but cache > > > > > coherence (load a file with option then reuse it, deactivate > the > > > > > cache when load a specific file or don't cached the loaded > file) > > > > > is user's responsibility. > > > > > > > > > > Text3D solution: > > > > > Postfix the font file name by .text3d or something similar and > > then > > > > have > > > > > the freetype plugin return > > > > > osgText::Font3D when it detects this. > > > > > This operation is done by osgText::readFont3DFile() which > unsure > > the > > > > > filename have .text3d as extension. > > > > > This is totaly transparent for user, and backward compatible. > > > > > > > > > > > > > > > BTW, I fix the bug about the Normal of 3D text. Currently, the > front > > and > > > > > wall face have > > > > > the same normal (0,0,1) in the Text3D object coordinate. Now the > wall > > > > face > > > > > have its own > > > > > normal array computed by the plugin. > > > > > > > > > > BTW 2, I implement > > > > > - void Text3D::accept(osg::Drawable::ConstAttributeFunctor& af) > const > > > > > - void Text3D::accept(osg::PrimitiveFunctor& pf) const > > > > > so now statistics are well reported. > > > > > > > > > > I join modified file in osgText3D.tgz and a the original test in > > > > > testText3D.tgz > > > > > > > > > > Cheers > > > > > David Callu > > > > > > > > > > > > > > > > > > > > > > > > > -------------------------------------------------------------------------- > > -- > > > > ---- > > > > > > > > > > > > > _______________________________________________ > > > > > osg-submissions mailing list > > > > > [email protected] > > > > > > > > > > > > > > > > > http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org > > > > > > > > > > > > > _______________________________________________ > > > > osg-submissions mailing list > > > > [email protected] > > > > > > > > > > > > http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org > > > > > > > > > > > > > > -------------------------------------------------------------------------- > -- > > ---- > > > > > > > _______________________________________________ > > > osg-submissions mailing list > > > [email protected] > > > > > > > http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org > > > > > > > _______________________________________________ > > osg-submissions mailing list > > [email protected] > > > > http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org > > > > _______________________________________________ > osg-submissions mailing list > [email protected] > > http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org >
_______________________________________________ osg-submissions mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
