Commit Graph

230 Commits

Author SHA1 Message Date
Robert Osfield
37765805ff Fixed pedantic warning 2008-06-23 15:11:37 +00:00
Robert Osfield
1e5783ece7 Added a wrapString(const char*) which automatically handles null strings. 2008-06-18 16:45:21 +00:00
Robert Osfield
4e7dd7f0db Changed class to struct 2008-06-16 16:06:01 +00:00
Robert Osfield
68e750626a Checking in missing header changes 2008-06-16 09:32:22 +00:00
Robert Osfield
cf97035a45 Added OSGDB_EXPORT 2008-06-06 08:42:37 +00:00
Robert Osfield
0cc38108a5 Fixed cirular reference in DatabaseRequest 2008-05-30 11:43:04 +00:00
Robert Osfield
6a16cbfca4 Reorginaized the DatabaseQueue's to avoid warnings under Windows 2008-05-22 12:38:36 +00:00
Robert Osfield
7b003b24ea Refactored DatabasePager and related classes to introduce support for
multi-threaded paging, where the Pager manages threads of reading local
and http files via seperate threads.  This makes it possible to smoothly
browse large databases where parts of the data are locally cached while
others are on a remote server.  Previously with this type of dataset 
the pager would stall all paging while http requests were being served,
even when parts of the models are still loadable virtue of being in the 
local cache.

Also as part of the refactoring the DatabaseRequest are now stored in the
ProxyNode/PagedLOD nodes to facilitate quite updating in the cull traversal,
with the new code avoiding mutex locks and searches.  Previous on big 
databases the overhead involved in make database requests could accumulate
to a point where it'd cause the cull traversal to break frame.  The overhead
now is negligable.

Finally OSG_FILE_CACHE support has been moved from the curl plugin into
the DatabasePager.  Eventually this functionality will be moved out into
osgDB for more general usage.
2008-05-21 21:09:45 +00:00
Robert Osfield
646fc43747 Introduced preliminary support for asynchronous file read requests,
ReaderWriter::ReadResult now has a FILE_REQUEST enum.
  ReaderWriter::Options now has a s/getAsynchronousFileReadHint() parameter methods.

  libcurl based plugin now detects enabing of the AsynchronousFileReadHint, but
  as yet does not handle async requests - handling everything syncronously.
  
  DatabasePager now by default will enable AsynchronousFileReadHint for http
  based file requests
2008-05-14 17:03:57 +00:00
Robert Osfield
22c7699fa1 From Bob Kuehne, Added doxygen docs clarification of ReadResult enum values 2008-05-07 14:30:58 +00:00
Robert Osfield
c10acfcc47 From Bob Kuehne, "he attached are conversions of the 3 main places i found in osg where tokens are used to represent bitmasks with 'magic' numbers, like 32. i've changed these to a more representative bitshift representation, showing clearly in which bit you can expect this token to manifest. ie, converted things like:
from:            DEEP_COPY_STATESETS         = 8,
to:              DEEP_COPY_STATESETS         = 1<<3,

showing clearly that this isn't the _value_ 8, but the _bit_ 8. this is an old pattern i see (and like to promulgate) to make code a bit more readable and maintainable. 
"
2008-04-16 15:23:12 +00:00
Robert Osfield
c1e32ef742 Rewrote the DatabasePager::removeExpiredSubgraphs(double) routine as it
as not expiring subgraphs quick enough to enable reasonable load balancing.

New version isn't perfect and will need further work, but does at least reduce
the memory footprint by as much as half on test paths on big databases.

The rewritten method no longer uses the the MaximumNumOfRemovedChildPagedLODs
and MinimumNumOfInactivePagedLODs variables so these and associated methods
for accessing them have been removed.

-        /** Set the maximum number of PagedLOD child to remove per frame */
-        void setMaximumNumOfRemovedChildPagedLODs(unsigned int number) { _maximumNumOfRemovedChildPagedLODs = number; }
-
-        /** Get the maximum number of PagedLOD child to remove per frame */
-        unsigned int getMaximumNumOfRemovedChildPagedLODs() const { return _maximumNumOfRemovedChildPagedLODs; }
-
-        /** Set the minimum number of inactive PagedLOD child to keep */
-        void setMinimumNumOfInactivePagedLODs(unsigned int number) { _minimumNumOfInactivePagedLODs = number; }
-
-        /** Get the minimum number of inactive PagedLOD child to keep */
-        unsigned int getMinimumNumOfInactivePagedLODs() const { return _minimumNumOfInactivePagedLODs; }
2008-03-28 15:52:10 +00:00
Robert Osfield
c4d07194a2 From Art Trevs, add support for saving external shader files.
From Robert Osfield, adding missing member variable initializes and Output::getShaderFileNameForOutput() implementation
2008-03-04 14:04:48 +00:00
Robert Osfield
0f2797fc07 From Mike Weiblen, build fix for VS8. 2008-01-09 11:42:19 +00:00
Robert Osfield
11db24e6b3 From Colin McDonald, build fixes for Solaris. 2008-01-08 18:13:06 +00:00
Robert Osfield
256391c3b4 From Serge Lages, introduce readRef*File() methods which pass back ref_ptr<> rather than C pointers. 2007-12-12 17:04:48 +00:00
Robert Osfield
6ca74544bc Added const to operators. 2007-12-12 10:47:58 +00:00
Robert Osfield
1c2726fd07 From Paul Martz, "Function declaration returns a bool, function body was returning a pointer. Changed body to return (pointer != NULL)." 2007-12-12 09:45:29 +00:00
Robert Osfield
640999dea6 From Tim More, "This submission tries to optimize redundant compilation of StateSets and Drawables
in the DatabasePager. The practical effects of these are to greatly reduce startup time
and the time to load an individual scenery tile in FlightGear.

- From my log message:

   Minimize the number of StateSets and drawables that are compiled by checking
   if they have already been compiled or will be elminated by the
   SharedStateManager.

   Move the sorting of the dataToCompile queue out of compileGLObjects
   into the man pager run function.

   Change the SharedStateManager to use maps instead of vectors."
2007-12-11 12:32:31 +00:00
Robert Osfield
f4afa427a7 From Roland Smeenk, "Attached you will find a large set of small typo fixes (mainly in the comments)." 2007-12-10 17:30:18 +00:00
Robert Osfield
b7881943d4 From Serge Lages, "Here are some modifications to the DatabasePager, with the possibility to :
- Get or set the target number of PagedLOD children to remove per frame.
- Get or set the minimum number of inactive PagedLOD to keep.

Corresponding environment variables have been added too.
The default values reproduce the previous DatabasePager behavior."
2007-12-06 17:31:00 +00:00
Robert Osfield
38d33c7685 From Paul Martz, "here's the osgDB::Registry changes to add Options to the read*File() interface. As we discussed, this preserves the old interface for backwards compatibility.
osgconv also changed to use the new Registry::writeNode() interface. No other applications or examples were affected."
2007-09-30 19:53:02 +00:00
Robert Osfield
41ce67600e From Mattias Linde, "Nice, this almost gets the job done, one way communication into the plugin is possible.
I've done some additional small modification regarding constness in ReaderWriter and added
mutable on _pluginData so passing data back would be possible too.

Have updated the collada plugin (ReaderWriterDAE.cpp) to use the map to handle options and
have attached the changes.

The stuff in daeReader.h and daeWriter.h are just cosmetic changes to get rid of a warning."
2007-09-29 11:12:38 +00:00
Robert Osfield
9aab68b140 From Mattias Linde, "I've attached a modified ReaderWriter header which has some additions
to osgDB::ReaderWriter::Options to handle PluginData."
2007-09-28 13:35:51 +00:00
Robert Osfield
2640fd1456 Added IntensityMap reading in .view files 2007-09-26 14:02:40 +00:00
Robert Osfield
cf2c9da74d Made ReaderWriter and ReaderWriter::Options use thread safe ref counting. 2007-09-24 09:05:42 +00:00
Robert Osfield
7ea3632dfc Added support for bool in ArgumentParser::Parameter.
Added support for using Input::read(...) methods using ArgumentParser::Paramter
to adapter to multiple paramter types.
2007-09-19 15:29:57 +00:00
Robert Osfield
4c787abfd7 Added option for controlling whether output code should write out default values 2007-09-16 17:45:53 +00:00
Robert Osfield
69de74aedf Added TemplateRegisterDotOsgWrapperProxy. 2007-09-14 11:01:48 +00:00
Robert Osfield
b20d542317 From David Callu, improved consistency of Version strings and add version support
for osgIntrospection and osgManipulator.
2007-09-05 17:12:24 +00:00
Robert Osfield
54202aae0d Cleaned up the thread priority management in DatabasePager and added
support for paging stats.
2007-08-24 13:33:35 +00:00
Robert Osfield
0390243ed9 Changed ReadFileCallback and WriteFileCallback to use virtual inhertinace. 2007-08-22 09:05:34 +00:00
Robert Osfield
e3b7b2f617 Added new statc prototype() and create() methods to CullVisitor and DatabasePager to allow overriding of the default implementations 2007-08-08 08:10:38 +00:00
Robert Osfield
a28588a84c Introduce GraphicsOperation subclass from osg::Operation, and osgUtil::GLObjectOperation
for compiling subgraphs.
2007-07-13 17:25:35 +00:00
Robert Osfield
6931ae4878 Added include/osg/GLObjects + .cpp which provide osg::flush*DeletedGLObjects() methods.
Added and cleaned up DeleteHandler calls in osgViewer to help avoid crashes on exit.

Changed DatabasePager across to dynamically checcking osg::getCompileContext(..)

Updated wrappers.
2007-07-06 13:08:51 +00:00
Robert Osfield
eac3dc1963 From Paul Melis, "Here is a list of fixes to misspelled APIs. Unfortunately, more than one
of these are public APIs and therefore will break linkage to existing
shared libraries."

Note from Robert Osfield, updated wrappers.
2007-06-27 20:36:16 +00:00
Robert Osfield
1b3468413d Added ability to compile OpenGL objects via pbuffers in the DatabasePager/Viewer 2007-06-22 14:48:18 +00:00
Robert Osfield
b48ed1a4d4 Improved the set up of static build, added freetype plugin to plugins that support static usage 2007-06-10 09:51:29 +00:00
Robert Osfield
3b1c5c3b96 Introduced a destruct method to help clean up the Registry. 2007-06-07 11:19:02 +00:00
Robert Osfield
c072e4adac Updated wrappers 2007-05-27 19:35:50 +00:00
Robert Osfield
8a1ac890f3 Introduce C entry point support for plugin setup for better static build support 2007-05-25 15:27:06 +00:00
Robert Osfield
5d23bf7739 From Mike Weiblen, with mods of using references by Robert Osfield for efficiency. Submission notes from Mike:
"By repurpose, I'm creating a new plugin that uses much of the .osg fileformat,
but with some changes.  Specifically, I'm creating a ".osgfs" plugin, which
represents the scenegraph hierarchy as a filesystem of nested subdirectories and
individual files for each node, rather than nested braces with everything in a
single monolithic file.  I intend to incorporate file alteration monitor events
to watch the filesystem for modifications and automatically reload.

The problem I'm running into is osgDB is too tightly coupled to the .osg format.
osgDB::Output::writeObject() contains literal .osg format-specific strings like
"{" to represent the Object hierarchy at too low a semantic level.  I propose
using virtual methods; my plugin can then derive from osgDB::Output and
represent Object hiearchy differently.
"
2007-05-09 10:01:15 +00:00
Robert Osfield
790a1ea66f From Alan Harris, "Registry and Archive
~~~~~~~~~~~~~~~~~~~~~~~~~
This is a simple change to permit databases other than those named
"*.osga" to be used. It is hardcoded in read() at present.

It is non-critical and does not affect existing program functionality.

Registry and Registry.cpp
~~~~~~~~~~~~~~~~~~~~~~~~~
Added a new typedef:      typedef std::vector< std::string>
ArchiveExtensionList;

a list of extensions:     ArchiveExtensionList  _archiveExtList;

and an "add" method:      addArchiveExtension(const std::string ext)

This is initialised by adding "osga" in Registry() and used in
Registry::read() where the list is searched for the extension used.

Archive.cpp
~~~~~~~~~~~
This submission is a little more tentative. openArchive() is modified to
automatically add the filename extension to the Registry extension list.
"
2007-05-09 09:43:18 +00:00
Robert Osfield
5954722c07 From Mike Wittman, fix to CopyOp&. 2007-04-12 09:32:34 +00:00
Robert Osfield
5ba0e5b930 Fixed missing initializer in Options constrctor 2007-03-29 19:39:20 +00:00
Robert Osfield
ad3cac84e9 Moved Block, ReentrantMutex and ReadWriteMutex into OpenThreads. 2007-02-23 16:31:34 +00:00
Robert Osfield
4914d3974a From Paul Martz, "Here's my changes to Registry to allow extension alias mapping via a config file. I also attached a sample file that tests the parsing, but this is just FYI and not for inclusion in CVS.
To set up extension aliases using a config file, an app calls:
osgDB::Registry::instance()->readPluginAliasConfigurationFile(), passing in the file name as the parameter. (Of course this should be done before loading any files whose names depend on the mapping.) osgDB will search for the file using OSG_FILE_PATH.

The file should contain a line for each mapping, with the "map" extension first, followed by a space or tab, then the plugin identifier. For example, a file containing this line:

flt OpenFlight

would map the ".flt" extension to the OpenFlight plugin."
2007-02-05 10:44:10 +00:00
Robert Osfield
35c720420e From Bryan Thrall, "The osgDB::ReaderWriter and osgDB::ReaderWriter::Options classes have
copy constructors that take a const osg::CopyOp rather than a
osg::CopyOp&, forcing an unnecessary copy. The attached header fixes
this, based off OSG 1.2.

Also fixed duplicate "or" openArchive()'s comment."
2007-01-30 14:18:39 +00:00
Robert Osfield
3ebc5efe05 From Joakim Simonsson, added osgDB::concateFile and osgDB::getRealPath.
Tweaks by Robert Osfield - Moved methods to FileNameUtils, added unix
implementation of getRealPath add extern and OSGDB_EXPORT to function declarations.
2007-01-17 15:59:29 +00:00
Robert Osfield
733c6e9e62 Changed the ReadWriteMutex to use standard OpenThreads::Mutex to fix
crashes in osgcatch.
2007-01-04 21:14:29 +00:00