]> git.mxchange.org Git - flightgear.git/commitdiff
Choose renderer from /sim/rendering/rembrandt property
authorFrederic Bouvier <fredfgfs01@free.fr>
Sun, 11 Mar 2012 14:50:18 +0000 (15:50 +0100)
committerFrederic Bouvier <fredfgfs01@free.fr>
Sun, 25 Mar 2012 12:39:22 +0000 (14:39 +0200)
src/Main/renderer.cxx
src/Main/renderer.hxx

index 25b4b9a6648cf530e4cc6163d226e5583a54e680..fe06b8430e8b7dfa83a55107503adc6fdda23bb9 100644 (file)
@@ -439,6 +439,7 @@ FGRenderer::splashinit( void ) {
 void
 FGRenderer::init( void )
 {
+       _classicalRenderer = !fgGetBool("/sim/rendering/rembrandt", false);
     _scenery_loaded   = fgGetNode("/sim/sceneryloaded", true);
     _scenery_override = fgGetNode("/sim/sceneryloaded-override", true);
     _panel_hotspots   = fgGetNode("/sim/panel-hotspots", true);
@@ -527,10 +528,23 @@ void installCullVisitor(Camera* camera)
     }
 }
 
-flightgear::CameraInfo* FGRenderer::buildRenderingPipeline(flightgear::CameraGroup* cgroup, unsigned flags, Camera* camera,
+flightgear::CameraInfo*
+FGRenderer::buildRenderingPipeline(flightgear::CameraGroup* cgroup, unsigned flags, Camera* camera,
                                    const Matrix& view,
                                    const Matrix& projection,
                                    bool useMasterSceneData)
+{
+       if (_classicalRenderer || (flags & (CameraGroup::GUI | CameraGroup::ORTHO)))
+               return buildClassicalPipeline( cgroup, flags, camera, view, projection, useMasterSceneData );
+       else
+               return buildDeferredPipeline( cgroup, flags, camera, view, projection );
+}
+
+flightgear::CameraInfo*
+FGRenderer::buildClassicalPipeline(flightgear::CameraGroup* cgroup, unsigned flags, osg::Camera* camera,
+                                const osg::Matrix& view,
+                                const osg::Matrix& projection,
+                                bool useMasterSceneData)
 {
     CameraInfo* info = new CameraInfo(flags);
     // The camera group will always update the camera
@@ -576,6 +590,26 @@ flightgear::CameraInfo* FGRenderer::buildRenderingPipeline(flightgear::CameraGro
     return info;
 }
 
+flightgear::CameraInfo*
+FGRenderer::buildDeferredPipeline(flightgear::CameraGroup* cgroup, unsigned flags, osg::Camera* camera,
+                                const osg::Matrix& view,
+                                const osg::Matrix& projection)
+{
+    CameraInfo* info = new CameraInfo(flags);
+    // The camera group will always update the camera
+    camera->setReferenceFrame(Transform::ABSOLUTE_RF);
+
+    Camera* farCamera = 0;
+    cgroup->getViewer()->addSlave(camera, projection, view, false);
+    installCullVisitor(camera);
+    info->camera = camera;
+    info->slaveIndex = cgroup->getViewer()->getNumSlaves() - 1;
+    camera->setRenderOrder(Camera::POST_RENDER, info->slaveIndex);
+    cgroup->addCamera(info);
+    return info;
+}
+
+
 void
 FGRenderer::setupView( void )
 {
index 97c8e3697e8fb48578f62d6650b6ecd7d983d7bd..5d0f68e01b76165b29268fca22759cc1fc84bfbd 100644 (file)
@@ -89,6 +89,19 @@ public:
                                    const osg::Matrix& projection,
                                    bool useMasterSceneData);
 
+       /**
+        */
+       flightgear::CameraInfo* buildClassicalPipeline(flightgear::CameraGroup* cgroup, unsigned flags, osg::Camera* camera,
+                                   const osg::Matrix& view,
+                                   const osg::Matrix& projection,
+                                   bool useMasterSceneData);
+
+       /**
+        */
+       flightgear::CameraInfo* buildDeferredPipeline(flightgear::CameraGroup* cgroup, unsigned flags, osg::Camera* camera,
+                                   const osg::Matrix& view,
+                                   const osg::Matrix& projection);
+
     SGSky* getSky() const { return _sky; }
     
     /**
@@ -108,6 +121,7 @@ protected:
     SGPropertyNode_ptr _virtual_cockpit;
     SGTimeStamp _splash_time;
     SGSky* _sky;
+       bool _classicalRenderer;
 };
 
 bool fgDumpSceneGraphToFile(const char* filename);