#include <simgear/timing/timestamp.hxx>
#include <osg/ref_ptr>
+#include <osg/Matrix>
+#include <osg/Vec3>
namespace osg
{
class Camera;
class Group;
+class GraphicsContext;
}
namespace osgGA
namespace flightgear
{
class FGEventHandler;
+struct CameraInfo;
+class CameraGroup;
}
class SGSky;
void setEventHandler(flightgear::FGEventHandler* manipulator);
/** Add a top level camera.
- */
+ */
void addCamera(osg::Camera* camera, bool useSceneData);
+ void removeCamera(osg::Camera* camera);
+
+ /** Add a camera to the group. The camera is added to the viewer
+ * as a slave. See osgViewer::Viewer::addSlave.
+ * @param flags properties of the camera; see CameraGroup::Flags
+ * @param projection slave projection matrix
+ * @param view slave view matrix
+ * @param useMasterSceneData whether the camera displays the
+ * viewer's scene data.
+ * @return a CameraInfo object for the camera.
+ */
+ flightgear::CameraInfo* buildRenderingPipeline(flightgear::CameraGroup* cgroup, unsigned flags, osg::Camera* camera,
+ const osg::Matrix& view,
+ const osg::Matrix& projection,
+ osg::GraphicsContext* gc,
+ 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, osg::GraphicsContext* gc);
+
+ void updateShadowCamera(const flightgear::CameraInfo* info, const osg::Vec3d& position);
+ void updateShadowMapSize(int mapSize);
+ void enableShadows(bool enabled);
+ void updateCascadeFar(int index, float far_m);
+ void updateCascadeNumber(size_t num);
+
SGSky* getSky() const { return _sky; }
+
+ void setPlanes( double zNear, double zFar );
/**
* inform the renderer when the global (2D) panel is changed
SGPropertyNode_ptr _virtual_cockpit;
SGTimeStamp _splash_time;
SGSky* _sky;
+ bool _classicalRenderer;
+ int _shadowMapSize;
+ size_t _numCascades;
+ float _cascadeFar[4];
+
+ osg::Camera* buildDeferredGeometryCamera( flightgear::CameraInfo* info, osg::GraphicsContext* gc );
+ osg::Camera* buildDeferredShadowCamera( flightgear::CameraInfo* info, osg::GraphicsContext* gc );
+ osg::Camera* buildDeferredLightingCamera( flightgear::CameraInfo* info, osg::GraphicsContext* gc );
+ void updateShadowCascade(const flightgear::CameraInfo* info, osg::Camera* camera, osg::Group* grp, int idx, double left, double right, double bottom, double top, double zNear, double f1, double f2);
+ osg::Vec3 getSunDirection() const;
+ osg::ref_ptr<osg::Uniform> _ambientFactor;
+ osg::ref_ptr<osg::Uniform> _sunDiffuse;
+ osg::ref_ptr<osg::Uniform> _sunSpecular;
+ osg::ref_ptr<osg::Uniform> _sunDirection;
+ osg::ref_ptr<osg::Uniform> _planes;
+ osg::ref_ptr<osg::Uniform> _fogColor;
+ osg::ref_ptr<osg::Uniform> _fogDensity;
+ osg::ref_ptr<osg::Uniform> _shadowNumber;
+ osg::ref_ptr<osg::Uniform> _shadowDistances;
};
bool fgDumpSceneGraphToFile(const char* filename);