Robert Osfield wrote:
> I can't help but feel that you are trying to making this more complex
> than it needs to be.

  Well, not _trying_. ;) Sometimes I am through ignorance. I did not know you 
could force
preload that way without

> First up pre-loading a plugin to handle extensions is easy, as it's
>   osgconv -e ModifyTerrain model-in.ive model-out.ive
> Another aspect of the way the plugin mechanism works is that if you
> just added the extension directly to the osgconv line the
> ModifyTerrain plugin would be loaded first automatically anyway,

  Ok, that definitely addresses one of the major issues. I can perhaps just 
rely on
MODIFYTERRAIN intercepting all loads, and selecting which ones it wants to 
apply to.

> Finally, changing osgconv's to add support recursion and adding your
> optional extension on to internal should be trivial.  I really can't
> see a need or great value in adding the extra complexity of a
> getCombinedFilename() or a osgDB::ModifyFilenameCallback. 

  I'm not sure we're talking on exactly the same wavelength, but I was pretty 
sure that
any approach I came up involving osgconv and suffixes would be frowned upon as 
adding
extraneous application-specific functionality to osgconv. Which, obviously we 
both wish to
avoid. Let me clarify what the issue really is, as I see it (since by 
necessity, you're
not as immersed in the problems and requirements of this design as I have to 
be).


  The part that is still left unspecified is this. the pseudoloader has to 
"mark" the
PagedLOD nodes (or their child filenames, either one works) to indicate which 
ones should
be modified by MODIFYTERRAIN. If MT intercepts all load requests, it needs to 
know which
ones it should actually modify, and skip the others (both for performance 
reasons, and you
might want some data loaded unmodified).

  Additionally, in order for this flagging to work (and then disappear) during 
an osgconv
conversion where the modifyterrain is being applied via the loader, the 
"marking" has to
disappear and not be present in the re-saved PagedLOD nodes or their child 
filenames.
Otherwise MT would RE-applied when the converted (and already modified) 
database was
reloaded, which is undesirable. The point of conversion is to apply the 
modification and
then be rid of the runtime modification overhead.

  This is why the original suffix was designed not to be saved as part of the 
PagedLOD,
and why I am avoiding tinkering with the actual child filename in the 
PerRangeData. Those
changes would "stick" with the converted database. One might think I could 
manually stick
the suffix on the child filename, and strip it off once the child loaded. 
However, if the
child unloaded and then reloaded during one osgViewer run, the modifyterrain 
effect would
disappear on subsequent loads after the first.



  However, I think I have a solution that can work without modifying any core 
OSG code,
and still meet all the transparency requirements.

  I'll use the plugin pre-loading technique to allow MODIFYTERRAIN to intercept 
all loads.
When MT loads a subgraph, it will (at your suggestion, and similar to how it 
does now
setting the database suffix) go through the subgraph and mark each candidate 
PagedLOD by
attaching a custom osgDB::Options. It is my understanding from a brief review 
of the .osg
saver (PagedLOD_writeLocalData) that the osgDB::Options field is not stored 
when the .osg
file format is written, and this is by intention.

  So, I will use the osgDB::Options to indicate which PagedLODs should receive 
MT
treatment. I plan to do this by adding a plugin string data to the Options 
object via
setPluginStringData with a key/value of "PSEUDOLOADERSUFFIX", ".modifyterrain". 
I believe
this is within the intended use of the plugin string data.

  When modifyterrain intercepts the load call, it appears to be provided the
osgDB::Options object (from the PagedLOD object), so the pseudoloader can check 
for the
presence of the PSEUDOLOADERSUFFIX=modifyterrain key/value on the Options, and 
decide
whether to post-load-process the subgraph or not.

  (The alternative to not tracking the pseudoloader-marking state directly on 
the PagedLOD
via the Options is to keep a list of child filenames needing the treatment as a 
singleton
within the MT pseudoloader, but then ModifyTerrain would have to search that 
list for each
load, which could have dire performance on large filename collections, 
depending on which
container type was used.)


  I think this is practical. Do you have any comments or suggestions on this 
method before
I code it? It should allow osgconv and osgviewer to be completely naive and 
oblivious to
the presence of a pseudoloader using this technique, which is my goal.



-- 
Chris 'Xenon' Hanson, omo sanza lettere                  Xenon AlphaPixel.com
PixelSense Landsat processing now available! http://www.alphapixel.com/demos/
"There is no Truth. There is only Perception. To Perceive is to Exist." - Xen
_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to