Updates to osgProducer to bring it up to speed with changes in Producer
This commit is contained in:
parent
e7a4ad287b
commit
a5d12c598a
@ -14,6 +14,8 @@
|
|||||||
#include <osgProducer/Viewer>
|
#include <osgProducer/Viewer>
|
||||||
#include <osg/CoordinateSystemNode>
|
#include <osg/CoordinateSystemNode>
|
||||||
|
|
||||||
|
#include <osgUtil/SceneView>
|
||||||
|
|
||||||
int main( int argc, char **argv )
|
int main( int argc, char **argv )
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -102,6 +104,16 @@ int main( int argc, char **argv )
|
|||||||
// create the windows and run the threads.
|
// create the windows and run the threads.
|
||||||
viewer.realize();
|
viewer.realize();
|
||||||
|
|
||||||
|
{
|
||||||
|
osgProducer::OsgSceneHandler *sh = viewer.getSceneHandlerList().front().get();
|
||||||
|
osgUtil::SceneView *sv = sh->getSceneView();
|
||||||
|
osg::CullStack::CullingMode cullingMode = sv->getCullingMode();
|
||||||
|
cullingMode &= ~(osg::CullStack::SMALL_FEATURE_CULLING);
|
||||||
|
sv->setCullingMode( cullingMode );
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
while( !viewer.done() )
|
while( !viewer.done() )
|
||||||
{
|
{
|
||||||
// wait for all cull and draw threads to complete.
|
// wait for all cull and draw threads to complete.
|
||||||
|
@ -36,7 +36,7 @@ class OSGPRODUCER_EXPORT OsgCameraGroup : public Producer::CameraGroup
|
|||||||
{
|
{
|
||||||
public :
|
public :
|
||||||
|
|
||||||
typedef Producer::CameraGroup::ThreadingModel ThreadingModel;
|
typedef Producer::CameraGroup::ThreadModel ThreadingModel;
|
||||||
|
|
||||||
OsgCameraGroup();
|
OsgCameraGroup();
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include <osgDB/FileUtils>
|
#include <osgDB/FileUtils>
|
||||||
|
|
||||||
#include <osgProducer/OsgCameraGroup>
|
#include <osgProducer/OsgCameraGroup>
|
||||||
|
#include <Producer/CameraConfig>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#define WGL_SAMPLE_BUFFERS_ARB 0x2041
|
#define WGL_SAMPLE_BUFFERS_ARB 0x2041
|
||||||
@ -226,14 +227,14 @@ void OsgCameraGroup::_init()
|
|||||||
if (_cfg.valid())
|
if (_cfg.valid())
|
||||||
{
|
{
|
||||||
// By default select ThreadPerCamera when we have multiple cameras.
|
// By default select ThreadPerCamera when we have multiple cameras.
|
||||||
_thread_model = (_cfg->getNumberOfCameras()>1) ? ThreadPerCamera : SingleThreaded;
|
_threadModel = (_cfg->getNumberOfCameras()>1) ? ThreadPerCamera : SingleThreaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* str = getenv("OSG_CAMERA_THREADING");
|
const char* str = getenv("OSG_CAMERA_THREADING");
|
||||||
if (str)
|
if (str)
|
||||||
{
|
{
|
||||||
if (strcmp(str,"SingleThreaded")==0) _thread_model = SingleThreaded;
|
if (strcmp(str,"SingleThreaded")==0) _threadModel = SingleThreaded;
|
||||||
else if (strcmp(str,"ThreadPerCamera")==0) _thread_model = ThreadPerCamera;
|
else if (strcmp(str,"ThreadPerCamera")==0) _threadModel = ThreadPerCamera;
|
||||||
}
|
}
|
||||||
|
|
||||||
str = getenv("OSG_SHARE_GRAPHICS_CONTEXTS");
|
str = getenv("OSG_SHARE_GRAPHICS_CONTEXTS");
|
||||||
@ -243,7 +244,7 @@ void OsgCameraGroup::_init()
|
|||||||
else if (strcmp(str,"OFF")==0) Producer::RenderSurface::shareAllGLContexts(false);
|
else if (strcmp(str,"OFF")==0) Producer::RenderSurface::shareAllGLContexts(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_thread_model==ThreadPerCamera && _cfg->getNumberOfCameras()>1)
|
if (_threadModel==ThreadPerCamera && _cfg->getNumberOfCameras()>1)
|
||||||
{
|
{
|
||||||
// switch on thread safe reference counting by default when running multi-threaded.
|
// switch on thread safe reference counting by default when running multi-threaded.
|
||||||
// osg::Referenced::setThreadSafeReferenceCounting(true);
|
// osg::Referenced::setThreadSafeReferenceCounting(true);
|
||||||
@ -390,7 +391,7 @@ void OsgCameraGroup::advance()
|
|||||||
bool OsgCameraGroup::realize( ThreadingModel thread_model )
|
bool OsgCameraGroup::realize( ThreadingModel thread_model )
|
||||||
{
|
{
|
||||||
if( _realized ) return _realized;
|
if( _realized ) return _realized;
|
||||||
_thread_model = thread_model;
|
_threadModel = thread_model;
|
||||||
return realize();
|
return realize();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -595,7 +596,7 @@ bool OsgCameraGroup::realize()
|
|||||||
|
|
||||||
// if we are multi-threaded check to see if particle exists in the scene
|
// if we are multi-threaded check to see if particle exists in the scene
|
||||||
// if so we need to disable multi-threading of cameras.
|
// if so we need to disable multi-threading of cameras.
|
||||||
if (_thread_model == Producer::CameraGroup::ThreadPerCamera)
|
if (_threadModel == Producer::CameraGroup::ThreadPerCamera)
|
||||||
{
|
{
|
||||||
if (getTopMostSceneData())
|
if (getTopMostSceneData())
|
||||||
{
|
{
|
||||||
@ -605,7 +606,7 @@ bool OsgCameraGroup::realize()
|
|||||||
{
|
{
|
||||||
osg::notify(osg::INFO)<<"Warning: disabling multi-threading of cull and draw"<<std::endl;
|
osg::notify(osg::INFO)<<"Warning: disabling multi-threading of cull and draw"<<std::endl;
|
||||||
osg::notify(osg::INFO)<<" to avoid threading problems in osgParticle."<<std::endl;
|
osg::notify(osg::INFO)<<" to avoid threading problems in osgParticle."<<std::endl;
|
||||||
_thread_model = Producer::CameraGroup::SingleThreaded;
|
_threadModel = Producer::CameraGroup::SingleThreaded;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -614,7 +615,7 @@ bool OsgCameraGroup::realize()
|
|||||||
// if we are still multi-thread check to make sure that no render surfaces
|
// if we are still multi-thread check to make sure that no render surfaces
|
||||||
// are shared and don't use shared contexts, if they do we need to
|
// are shared and don't use shared contexts, if they do we need to
|
||||||
// disable multi-threading of cameras.
|
// disable multi-threading of cameras.
|
||||||
if (_thread_model == Producer::CameraGroup::ThreadPerCamera)
|
if (_threadModel == Producer::CameraGroup::ThreadPerCamera)
|
||||||
{
|
{
|
||||||
std::set<RenderSurface*> renderSurfaceSet;
|
std::set<RenderSurface*> renderSurfaceSet;
|
||||||
for( unsigned int i = 0; i < _cfg->getNumberOfCameras(); i++ )
|
for( unsigned int i = 0; i < _cfg->getNumberOfCameras(); i++ )
|
||||||
@ -628,7 +629,7 @@ bool OsgCameraGroup::realize()
|
|||||||
// running single threaded, to avoid OpenGL threading issues.
|
// running single threaded, to avoid OpenGL threading issues.
|
||||||
osg::notify(osg::INFO)<<"Warning: disabling multi-threading of cull and draw to avoid"<<std::endl;
|
osg::notify(osg::INFO)<<"Warning: disabling multi-threading of cull and draw to avoid"<<std::endl;
|
||||||
osg::notify(osg::INFO)<<" threading problems when camera's share a RenderSurface."<<std::endl;
|
osg::notify(osg::INFO)<<" threading problems when camera's share a RenderSurface."<<std::endl;
|
||||||
_thread_model = Producer::CameraGroup::SingleThreaded;
|
_threadModel = Producer::CameraGroup::SingleThreaded;
|
||||||
}
|
}
|
||||||
else if (renderSurfaceSet.size()>1 && RenderSurface::allGLContextsAreShared())
|
else if (renderSurfaceSet.size()>1 && RenderSurface::allGLContextsAreShared())
|
||||||
{
|
{
|
||||||
@ -636,18 +637,18 @@ bool OsgCameraGroup::realize()
|
|||||||
// so need to disable multi-threading to prevent problems.
|
// so need to disable multi-threading to prevent problems.
|
||||||
osg::notify(osg::INFO)<<"Warning: disabling multi-threading of cull and draw to avoid"<<std::endl;
|
osg::notify(osg::INFO)<<"Warning: disabling multi-threading of cull and draw to avoid"<<std::endl;
|
||||||
osg::notify(osg::INFO)<<" threading problems when sharing graphics contexts within RenderSurface."<<std::endl;
|
osg::notify(osg::INFO)<<" threading problems when sharing graphics contexts within RenderSurface."<<std::endl;
|
||||||
_thread_model = Producer::CameraGroup::SingleThreaded;
|
_threadModel = Producer::CameraGroup::SingleThreaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_thread_model==Producer::CameraGroup::SingleThreaded)
|
if (_threadModel==Producer::CameraGroup::SingleThreaded)
|
||||||
{
|
{
|
||||||
osg::notify(osg::INFO)<<"OsgCameraGroup::realize() _thread_model==Producer::CameraGroup::SingleThreaded"<<std::endl;
|
osg::notify(osg::INFO)<<"OsgCameraGroup::realize() _threadModel==Producer::CameraGroup::SingleThreaded"<<std::endl;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
osg::notify(osg::INFO)<<"OsgCameraGroup::realize() _thread_model==Producer::CameraGroup::ThreadPerCamera"<<std::endl;
|
osg::notify(osg::INFO)<<"OsgCameraGroup::realize() _threadModel==Producer::CameraGroup::ThreadPerCamera"<<std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
_initialized = CameraGroup::realize();
|
_initialized = CameraGroup::realize();
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include <osgGA/UFOManipulator>
|
#include <osgGA/UFOManipulator>
|
||||||
#include <osgGA/StateSetManipulator>
|
#include <osgGA/StateSetManipulator>
|
||||||
|
|
||||||
|
#include <Producer/CameraConfig>
|
||||||
#include <osgProducer/Viewer>
|
#include <osgProducer/Viewer>
|
||||||
#include <osgProducer/ViewerEventHandler>
|
#include <osgProducer/ViewerEventHandler>
|
||||||
|
|
||||||
@ -498,7 +499,7 @@ void Viewer::setViewByMatrix( const Producer::Matrix & pm)
|
|||||||
bool Viewer::realize( ThreadingModel thread_model )
|
bool Viewer::realize( ThreadingModel thread_model )
|
||||||
{
|
{
|
||||||
if( _realized ) return _realized;
|
if( _realized ) return _realized;
|
||||||
_thread_model = thread_model;
|
_threadModel = thread_model;
|
||||||
return realize();
|
return realize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#include <Producer/CameraConfig>
|
||||||
#include <osgProducer/ViewerEventHandler>
|
#include <osgProducer/ViewerEventHandler>
|
||||||
#include <osgGA/AnimationPathManipulator>
|
#include <osgGA/AnimationPathManipulator>
|
||||||
#include <osgDB/WriteFile>
|
#include <osgDB/WriteFile>
|
||||||
|
Loading…
Reference in New Issue
Block a user