From 94e3ae4c675463c358071e1d9da8de583cf56e15 Mon Sep 17 00:00:00 2001 From: Frederic Bouvier Date: Sun, 11 Mar 2012 15:50:18 +0100 Subject: [PATCH] Choose renderer from /sim/rendering/rembrandt property --- src/Main/renderer.cxx | 36 +++++++++++++++++++++++++++++++++++- src/Main/renderer.hxx | 14 ++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/Main/renderer.cxx b/src/Main/renderer.cxx index 25b4b9a66..fe06b8430 100644 --- a/src/Main/renderer.cxx +++ b/src/Main/renderer.cxx @@ -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 ) { diff --git a/src/Main/renderer.hxx b/src/Main/renderer.hxx index 97c8e3697..5d0f68e01 100644 --- a/src/Main/renderer.hxx +++ b/src/Main/renderer.hxx @@ -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);