#include <algorithm>
#include <simgear/compiler.h>
+
+#include <plib/sg.h>
+
#include <Environment/environment_mgr.hxx>
#include <Environment/environment.hxx>
#include <simgear/misc/sg_path.hxx>
//cerr << "Nr of items to process: " << nrItems << endl;
if (nrItems > 0)
{
- for (int i = 0; i < start.size(); i++)
+ for (unsigned int i = 0; i < start.size(); i++)
{
//cerr << i << endl;
if ((dayStart >= start[i]) && (dayStart <= end[i]))
FGRunway rwy;
int activeRwys = rwyList.size(); // get the number of runways active
int nrOfPreferences;
- bool found = true;
- double heading;
+ // bool found = true;
+ // double heading;
double hdgDiff;
double crossWind;
double tailWind;
{
return;
}
- if (nrActive == rwyList.size())
+ if (nrActive == (int)rwyList.size())
{
*name = rwyList[i].getRwyList(active);
*type = rwyList[i].getType();
FGParking *FGAirport::getParking(int i)
{
- if (i < parkings.size())
+ if (i < (int)parkings.size())
return &(parkings[i]);
else
return 0;
}
string FGAirport::getParkingName(int i)
{
- if (i < parkings.size() && i >= 0)
+ if (i < (int)parkings.size() && i >= 0)
return (parkings[i].getName());
else
return string("overflow");
}
void FGAirport::startElement (const char * name, const XMLAttributes &atts) {
- const char * attval;
+ // const char *attval;
FGParking park;
//cout << "Start element " << name << endl;
string attname;
#include <Main/main.hxx>
#include <Main/fg_props.hxx>
+#include <Main/renderer.hxx>
#include <Aircraft/aircraft.hxx>
#include "environment.hxx"
#include <Main/fg_io.hxx>
#include <Main/globals.hxx>
#include <Main/fg_props.hxx>
+#include <Main/renderer.hxx>
#include <Main/viewmgr.hxx>
#if defined( WIN32 ) && !defined( __CYGWIN__ ) && !defined(__MINGW32__)
#include <Main/globals.hxx>
#include <Main/fg_init.hxx>
#include <Main/fg_props.hxx>
+#include <Main/renderer.hxx>
#include <Scenery/tilemgr.hxx>
#include <Time/light.hxx>
#include <simgear/misc/sg_path.hxx>
#include "globals.hxx"
+#include "renderer.hxx"
#include "viewmgr.hxx"
#include "fg_props.hxx"
typedef vector<string> string_list;
-#include "renderer.hxx"
-
// Forward declarations
// This file is included, directly or indirectly, almost everywhere in
class FGTileMgr;
class FGViewMgr;
class FGViewer;
+class FGRenderer;
/**
}
+
// Update all Visuals (redraws anything graphics related)
void
FGRenderer::update( bool refresh_camera_settings ) {
scene_farplane = 120000.0f;
}
- ssgSetNearFar( scene_nearplane, scene_farplane );
+ setNearFar( scene_nearplane, scene_farplane );
if ( draw_otw && skyblend ) {
// draw the sky backdrop
// draw the ssg scene
glEnable( GL_DEPTH_TEST );
- ssgSetNearFar( scene_nearplane, scene_farplane );
-
if ( fgGetBool("/sim/rendering/wireframe") ) {
// draw wire frame
glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
// the current view frustum will still be freed properly.
static int counter = 0;
counter++;
- if (counter == 200) {
+ if (counter >= 200) {
sgFrustum f;
f.setFOV(360, 360);
// No need to put the near plane too close;
// draw runway lighting
glFogf (GL_FOG_DENSITY, rwy_exp2_punch_through);
- ssgSetNearFar( scene_nearplane, scene_farplane );
+
+ // CLO - 02/25/2005 - DO WE NEED THIS extra fgSetNearFar()?
+ // fgSetNearFar( scene_nearplane, scene_farplane );
if ( enhanced_lighting ) {
set_aspect_ratio((float)view_h / (float)width);
}
- ssgSetFOV( viewmgr->get_current_view()->get_h_fov(),
- viewmgr->get_current_view()->get_v_fov() );
+ setFOV( viewmgr->get_current_view()->get_h_fov(),
+ viewmgr->get_current_view()->get_v_fov() );
#ifdef FG_USE_CLOUDS_3D
sgClouds3d->Resize( viewmgr->get_current_view()->get_h_fov(),
}
+// These are wrapper functions around ssgSetNearFar() and ssgSetFOV()
+// which will post process and rewrite the resulting frustum if we
+// want to do asymmetric view frustums.
+
+static void fgHackFrustum() {
+
+ /* experiment in assymetric view frustums */
+ sgFrustum *f = ssgGetFrustum();
+ cout << " l = " << f->getLeft()
+ << " r = " << f->getRight()
+ << " b = " << f->getBot()
+ << " t = " << f->getTop()
+ << " n = " << f->getNear()
+ << " f = " << f->getFar()
+ << endl;
+ static double incr = 0.0;
+ double factor = (sin(incr) + 1.0) / 2.0; // map to [0-1]
+ double w = (f->getRight() - f->getLeft()) / 2.0;
+ double l = f->getLeft() + w * factor;
+ double r = l + w;
+ ssgSetFrustum(l, r, f->getBot(), f->getTop(), f->getNear(), f->getFar());
+ incr += 0.001;
+}
+
+
+// we need some static storage space for these values. However, we
+// can't store it in a renderer class object because the functions
+// that manipulate these are static. They are static so they can
+// interface to the display callback system. There's probably a
+// better way, there has to be a better way, but I'm not seeing it
+// right now.
+static float width, height, near, far;
+
+
+/** FlightGear code should use this routine to set the FOV rather than
+ * calling the ssg routine directly
+ */
+void FGRenderer::setFOV( float w, float h ) {
+ width = w;
+ height = h;
+
+ // fully specify the view frustum before hacking it (so we don't
+ // accumulate hacked effects
+ ssgSetFOV( w, h );
+ ssgSetNearFar( near, far );
+
+ fgHackFrustum();
+}
+
+
+/** FlightGear code should use this routine to set the Near/Far clip
+ * planes rather than calling the ssg routine directly
+ */
+void FGRenderer::setNearFar( float n, float f ) {
+ near = n;
+ far = f;
+
+ // fully specify the view frustum before hacking it (so we don't
+ // accumulate hacked effects
+ ssgSetNearFar( n, f );
+ ssgSetFOV( width, height );
+
+ fgHackFrustum();
+}
+
// end of renderer.cxx
class FGRenderer {
public:
+
FGRenderer();
~FGRenderer();
// renderer which needs to set the view frustum itself.
static void update( bool refresh_camera_settings );
inline static void update() { update( true ); }
+
+
+ /** FlightGear code should use this routine to set the FOV rather
+ * than calling the ssg routine directly
+ */
+ static void setFOV( float w, float h );
+
+
+ /** FlightGear code should use this routine to set the Near/Far
+ * clip planes rather than calling the ssg routine directly
+ */
+ static void setNearFar( float n, float f );
};
#endif
#include <Main/globals.hxx>
#include <Main/fg_props.hxx>
+#include <Main/renderer.hxx>
#include <Main/viewmgr.hxx>
#include <Main/viewer.hxx>
#include <Scenery/scenery.hxx>
if (_aircraft->getVisible() && is_internal) {
glClearDepth(1);
glClear(GL_DEPTH_BUFFER_BIT);
- ssgSetNearFar(_nearplane, _farplane);
+ FGRenderer::setNearFar(_nearplane, _farplane);
ssgCullAndDraw(_scene);
_selector->select(0);
} else {
# include <fcntl.h>
#endif
+#include <errno.h>
+#include <math.h>
+
#include STL_STRING
#include <simgear/debug/logstream.hxx>
+#include <simgear/misc/sg_path.hxx>
#include <Main/fg_props.hxx>
#include <plib/netChat.h>
+#include <simgear/misc/sg_path.hxx>
+
#include <Main/fg_props.hxx>
#include "protocol.hxx"
# include <fcntl.h>
#endif
+#include <errno.h>
+#include <math.h>
+
#include STL_STRING
#include <simgear/debug/logstream.hxx>
+#include <simgear/misc/sg_path.hxx>
#include <Main/fg_props.hxx>
/////////////////////////////////////////////////////////////////////
bool FGATCOutput::do_lamps() {
-
if ( lamps_out_node != NULL ) {
for ( int i = 0; i < lamps_out_node->nChildren(); ++i ) {
// read the next config entry from the property tree
#include <simgear/compiler.h>
#include <vector>
-
SG_USING_STD(vector);
+#include <plib/ssg.h>
+
class ssgEntity;
class ssgBranch;
#include <Main/main.hxx>
#include <Main/globals.hxx>
#include <Main/fg_props.hxx>
+#include <Main/renderer.hxx>
#include <Main/viewer.hxx>
#include "light.hxx"