#include <simgear/scene/model/animation.hxx>
#include <simgear/scene/model/placement.hxx>
#include <simgear/scene/sky/sky.hxx>
+#include <simgear/scene/util/DeletionManager.hxx>
#include <simgear/scene/util/SGUpdateVisitor.hxx>
#include <simgear/scene/util/RenderConstants.hxx>
#include <simgear/scene/util/SGSceneUserData.hxx>
#include "CameraGroup.hxx"
#include "FGEventHandler.hxx"
+#include <plib/pu.h>
+
using namespace osg;
using namespace simgear;
using namespace flightgear;
if (!_classicalRenderer)
_pipeline = makeRenderingPipeline(_renderer, 0);
_scenery_loaded = fgGetNode("/sim/sceneryloaded", true);
- _scenery_override = fgGetNode("/sim/sceneryloaded-override", true);
_panel_hotspots = fgGetNode("/sim/panel-hotspots", true);
_virtual_cockpit = fgGetNode("/sim/virtual-cockpit", true);
osg::Geometry* g = osg::createTexturedQuadGeometry( osg::Vec3(-1.,-1.,0.), osg::Vec3(2.,0.,0.), osg::Vec3(0.,2.,0.) );
g->setUseDisplayList(false);
simgear::EffectGeode* eg = new simgear::EffectGeode;
- simgear::Effect* effect = simgear::makeEffect(pass->effect, true);
+ osg::ref_ptr<SGReaderWriterOptions> opt;
+ opt = SGReaderWriterOptions::fromPath(globals->get_fg_root());
+ opt->setPropertyNode(globals->get_props());
+ simgear::Effect* effect = simgear::makeEffect(pass->effect, true, opt.get());
if (effect) {
eg->setEffect( effect );
}
osg::Geometry* g = osg::createTexturedQuadGeometry( osg::Vec3(-1.,-1.,0.), osg::Vec3(2.,0.,0.), osg::Vec3(0.,2.,0.) );
g->setUseDisplayList(false); //DEBUG
simgear::EffectGeode* eg = new simgear::EffectGeode;
- simgear::Effect* effect = simgear::makeEffect(stage->effect, true);
+ osg::ref_ptr<SGReaderWriterOptions> opt;
+ opt = SGReaderWriterOptions::fromPath(globals->get_fg_root());
+ opt->setPropertyNode(globals->get_props());
+ simgear::Effect* effect = simgear::makeEffect(stage->effect, true, opt.get());
if (!effect) {
SG_LOG(SG_VIEW, SG_ALERT, stage->effect + " not found");
return;
osg::StateSet* ss = camera->getOrCreateStateSet();
ss->addUniform( _depthInColor );
+ ss->addUniform( info->projInverse );
+ ss->addUniform( info->viewInverse );
+ ss->addUniform( info->view );
ss->addUniform( info->bufferSize );
+ ss->addUniform( info->worldPosCart );
+ ss->addUniform( info->worldPosGeod );
+ ss->addUniform( info->shadowMatrix[0] );
+ ss->addUniform( info->shadowMatrix[1] );
+ ss->addUniform( info->shadowMatrix[2] );
+ ss->addUniform( info->shadowMatrix[3] );
+ ss->addUniform( _ambientFactor );
+ ss->addUniform( _sunDiffuse );
+ ss->addUniform( _sunSpecular );
+ ss->addUniform( _sunDirection );
+ ss->addUniform( _planes );
+ ss->addUniform( _shadowNumber );
+ ss->addUniform( _shadowDistances );
+ ss->addUniform( _fogColor );
+ ss->addUniform( _fogDensity );
}
void
FGRenderer::buildLightingSkyCloudsPass(FGRenderingPipeline::Pass* pass)
{
Group* group = new Group;
+ StateSet* ss = group->getOrCreateStateSet();
+ ss->setAttributeAndModes( new osg::ColorMask( true, true, true, false ), osg::StateAttribute::ON );
group->addChild( _sky->getPreRoot() );
group->addChild( _sky->getCloudRoot() );
return group;
osg::PolygonOffset::setUnitsMultiplier(1);
osg::PolygonOffset::setFactorMultiplier(1);
- // Go full screen if requested ...
- if ( fgGetBool("/sim/startup/fullscreen") )
- fgOSFullScreen();
-
// build the sky
// The sun and moon diameters are scaled down numbers of the
// actual diameters. This was needed to fit both the sun and the
// moon within the distance to the far clip plane.
// Moon diameter: 3,476 kilometers
// Sun diameter: 1,390,000 kilometers
+ osg::ref_ptr<SGReaderWriterOptions> opt;
+ opt = SGReaderWriterOptions::fromPath(globals->get_fg_root());
+ opt->setPropertyNode(globals->get_props());
_sky->build( 80000.0, 80000.0,
463.3, 361.8,
*globals->get_ephem(),
- fgGetNode("/environment", true));
+ fgGetNode("/environment", true),
+ opt.get());
viewer->getCamera()
->setComputeNearFarMode(osg::CullSettings::DO_NOT_COMPUTE_NEAR_FAR);
stateSet = mRealRoot->getOrCreateStateSet();
stateSet->setAttributeAndModes(new osg::Program, osg::StateAttribute::ON);
- mDeferredRealRoot->addChild( mRealRoot.get() );
+ mDeferredRealRoot->addChild( mRealRoot.get() );
+
+ DeletionManager::install(mRealRoot.get());
}
-
+
// Update all Visuals (redraws anything graphics related)
void
FGRenderer::update( ) {
- if (!(_scenery_loaded->getBoolValue() ||
- _scenery_override->getBoolValue()))
+ if (!_scenery_loaded->getBoolValue())
{
_splash_alpha->setDoubleValue(1.0);
return;