Commit Graph

100 Commits

Author SHA1 Message Date
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
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
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
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
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
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
1b3468413d Added ability to compile OpenGL objects via pbuffers in the DatabasePager/Viewer 2007-06-22 14:48:18 +00:00
Robert Osfield
ad3cac84e9 Moved Block, ReentrantMutex and ReadWriteMutex into OpenThreads. 2007-02-23 16:31:34 +00:00
Robert Osfield
3177494aa4 From Bryan Thrall, "Currently, the DatabasePager always loads requested Nodes using the
default Registry Options object, but it would be useful to be able to
request loading with a different Options object. The attached files
allow you to do that (based off the OSG 1.2 source).

For example, I'm implementing a loader that requires context information
when it pages in subgraphs, which becomes significantly complicated when
multiple scenegraphs are requesting subgraph loads with different
contexts (the loader needs to know which context to use, and the
Registry Options needs to be carefully managed so the context settings
don't clobber each other, especially in multithreaded situations). Being
able to pass an Options instance along with the Node request resolves
this problem."
2006-12-05 14:50:46 +00:00
Robert Osfield
f1c2694c17 Updated copyright years. 2006-07-18 15:21:48 +00:00
Robert Osfield
83add79c07 From Chris Hanson, added get methods for size of file request and data to compile lists. 2006-02-04 21:06:48 +00:00
Robert Osfield
f77b38ae9c Added DatabasePager::s/getDrawablePolicy() to allow the way that the display list/VBO settings
are applied to loaded databases.
2005-11-22 13:14:00 +00:00
Don BURNS
5f27216e7e made removeExpiredSubgraphs virtual. 2005-08-25 18:18:27 +00:00
Robert Osfield
51faa7e43a Various updates to support the new GraphicsThread class. 2005-08-18 20:17:51 +00:00
Robert Osfield
44b8b0177c Added ability to toggle on/off the pre compile of OpenGL objects in the
DatabasePager via the setDoPreCompile(bool) method or via the env var
OSG_DO_PRE_COMPILE=ON or OFF.
2005-05-31 05:37:13 +00:00
Robert Osfield
668aada787 From Marco Jez, fixes to/and for osgIntrospection. 2005-05-15 20:32:10 +00:00
Robert Osfield
678b22ce83 Updated Copyright notices to 1998-2005. 2005-04-14 21:41:28 +00:00
Robert Osfield
8bb4649cd5 Added extra controls into osgDB::DatabasePager for customizing how
much time is allocated to compiling and deleting OpenGL objects, also
added support into osgProducer::OsgSceneHandler.cpp for these new parameters.

The new cotrols are:

    DatabasePager::s/getTargetFrameRate(..)
    DatabasePager::s/getMinimumTimeAvailableForGLCompileAndDeletePerFrame()
    DatabasePager::s/getMaximumNumOfObjectsToCompilePerFrame()
2005-03-17 19:32:09 +00:00
Don BURNS
463b47f020 Fixes for SOlaris build 2004-11-29 03:05:27 +00:00
Robert Osfield
8cc9d650a1 Added friend usage for inner classes to try and get round compile problems
under Solaris.
2004-11-18 12:07:28 +00:00
Robert Osfield
70bb34af6a From Stephane Simon, compile fix for VS, change struct to class in forward declaration. 2004-11-18 09:09:22 +00:00
Robert Osfield
e9c403839d Made a few of the public methods virtual, and moved more of the class
methods to protected scope.
2004-11-17 14:25:17 +00:00
Robert Osfield
0c24cf48b8 Added a mutex and _numFramesActive count to track multiview usages of
the DatabasePager.
2004-09-28 08:39:46 +00:00
Robert Osfield
22bb35f4f1 Fixed typo 2004-09-23 20:13:16 +00:00
Robert Osfield
1b31024cd5 Clean up of new DatabasePager code, and change of osgProducer so that
DatabasePager support is now integrated into the OsgSceneHandler.
2004-09-23 18:50:38 +00:00
Robert Osfield
54b45ce3bc Updated to DatabasePager support 2004-09-21 21:33:52 +00:00
Robert Osfield
0d884d66eb Various improvements to database paing. 2004-09-21 17:26:08 +00:00
Robert Osfield
0750a19aa6 Added clear(), setDatabasePagerThreadPause() and setAcceptNewDatabaseRequests() methods
and new local implementation of cancel().
2004-09-19 20:09:54 +00:00
Robert Osfield
8bce22343b Various improvements to the DatabasePager with the aim to achieve
constant framerates and minimizing memory consumption.
2004-09-18 19:28:45 +00:00
Robert Osfield
aa833acfd3 Added support for releasing GLObjects, and renamed DisplayListVisitor the
GLObjectVisitor to better fit its function, and added support for releasing
objects as well as compiling them.
2004-07-20 05:37:59 +00:00
Robert Osfield
26f80f1341 From Marco Jez, replacement of local mutex lock/unlock with ScopedLock. 2004-05-07 19:55:12 +00:00
Robert Osfield
43df3b90ef Fixed problems with the DatabasePager free of texture objects and display
list before they are finished with.
2004-01-27 14:49:59 +00:00
Robert Osfield
edce2211fa From Romano Magacho, fixes to handle the subloading from Image when the
internal format changes requiring a rebuild of the texture object.
2004-01-23 13:25:45 +00:00
Robert Osfield
84737941e1 Added controls over the datatbase pager threading priority during and outwith the frame. 2004-01-22 10:42:32 +00:00
Robert Osfield
23443aa5db From Alberto Farre, added osgDB::SharedStateManager. Also a couple of
ammendments by Robert Osfield, adding get/setSharedStateManager()
methods into osgDB::Registry, and clean up fixes in SharedStateManager
for the StateSet arrays.
2004-01-10 17:13:20 +00:00
Robert Osfield
2f918d62d7 Added DatabasePager::setUseFrameBlock(bool) method 2004-01-07 12:37:44 +00:00
Robert Osfield
894537a016 Simplified the API for using the DatabasePager, by providing a single
DatabasePager::updateSceneGraph(..) method, and added a ref_ptr<> into
osDB::Registry for managing a single DatabasePager in a centralised way.
2004-01-06 21:18:36 +00:00
Robert Osfield
ea04f48251 Moved Producer::Block temporarily into osgDB to ensure that osgDB isn't dependent
on Producer.
2003-10-12 14:51:54 +00:00
Robert Osfield
42eb39ef37 Improvements to the DatabasePager 2003-10-12 12:13:58 +00:00
Robert Osfield
fad832425f Improvements to DatabasePager 2003-10-10 19:25:14 +00:00
Robert Osfield
1a68dd80d7 Added explicit calls cancel and wait until thread and no longer running to the
DatabasePager and TXP pager.
2003-08-20 12:52:33 +00:00
Robert Osfield
4b7bde1440 Removed the deprecated NodeVisitor::getLocalToWorld/WorldToLocal methods as
this are replaced by the osg::computeLocalToWorld/WorldToLocal() functions
found in osg/Transform.

Made the ReleaseTextureAndDisplayListsVisitor a public nested class of
osgDB::DatabasePager to allow it to be used in the TXP plugin, and added
usage of this visitor to the TXP plugin to make sure that textures and
display lists are released during the update thread.
2003-08-14 00:05:34 +00:00
Robert Osfield
325dc0f6b7 Moved DatabasePager into from osgProducer into osgDB. This means that osgDB
is now dependant on OpenThreads.
2003-07-21 08:19:36 +00:00