From 44916d398f2fbbfa4708f68dc0de0cb852e1138b Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Thu, 10 Aug 2006 15:53:01 +0000 Subject: [PATCH] Moved all platform specific processor out of osgProducer and into OpenThreads --- src/osgProducer/OsgCameraGroup.cpp | 57 ++++++++++-------------------- 1 file changed, 18 insertions(+), 39 deletions(-) diff --git a/src/osgProducer/OsgCameraGroup.cpp b/src/osgProducer/OsgCameraGroup.cpp index 56ce4b04e..85debe9b1 100644 --- a/src/osgProducer/OsgCameraGroup.cpp +++ b/src/osgProducer/OsgCameraGroup.cpp @@ -29,10 +29,6 @@ #define WGL_SAMPLES_ARB 0x2042 #endif -#if defined (__linux__) - #include -#endif - using namespace Producer; using namespace osgProducer; @@ -46,18 +42,10 @@ class RenderSurfaceRealizeCallback : public Producer::RenderSurface::Callback { public: - RenderSurfaceRealizeCallback(OsgCameraGroup* cameraGroup,OsgSceneHandler* sceneHandler, bool enableProccessAffinityHint): + RenderSurfaceRealizeCallback(OsgCameraGroup* cameraGroup,OsgSceneHandler* sceneHandler): _cameraGroup(cameraGroup), - _sceneHandler(sceneHandler), - _numberOfProcessors(1), - _sceneHandlerNumber(0), - _enableProccessAffinityHint(enableProccessAffinityHint) + _sceneHandler(sceneHandler) { - #if defined (__linux__) - /* Determine the actual number of processors */ - _numberOfProcessors = sysconf(_SC_NPROCESSORS_CONF); - #endif - const OsgCameraGroup::SceneHandlerList& shl = _cameraGroup->getSceneHandlerList(); for(unsigned int i=0; i1) - { - cpu_set_t cpumask; - CPU_ZERO( &cpumask ); - CPU_SET( _sceneHandlerNumber % _numberOfProcessors, &cpumask ); - - if( sched_setaffinity( 0, sizeof(cpumask), &cpumask ) == -1 ) - { - osg::notify(osg::NOTICE)<<"WARNING: Could not set CPU Affinity for scene handler "<<_sceneHandlerNumber<0) + { + for( unsigned int i = 0; i < _cfg->getNumberOfCameras(); i++ ) + { + Producer::Camera *cam = _cfg->getCamera(i); + cam->setProcessorAffinity(i % numProcessors); + } + } + _shvec.clear(); osg::Node* node = getTopMostSceneData(); @@ -600,7 +579,7 @@ bool OsgCameraGroup::realize() if (stage) stage->setClearMask(clear_mask); // set the realize callback. - rs->setRealizeCallback( new RenderSurfaceRealizeCallback(this, sh, _enableProccessAffinityHint)); + rs->setRealizeCallback( new RenderSurfaceRealizeCallback(this, sh)); // set up the visual chooser. if (_ds.valid())