]> git.mxchange.org Git - flightgear.git/commitdiff
Now use plib in native install mode.
authorcurt <curt>
Fri, 18 Jun 1999 03:42:54 +0000 (03:42 +0000)
committercurt <curt>
Fri, 18 Jun 1999 03:42:54 +0000 (03:42 +0000)
Preparations for unstable development version 0.7.0
Some reorganizational changes.
Beginning to test the use of ssg (part of plib)

src/GUI/gui.h
src/Joystick/joystick.cxx
src/Main/Makefile.am
src/Main/fg_init.cxx
src/Main/fg_init.hxx
src/Main/keyboard.cxx
src/Main/keyboard.hxx
src/Main/main.cxx
src/Main/views.cxx
src/Scenery/tileentry.hxx

index 44366a13981be06084af91f2a658692dea59ff0f..8a592de0f4e13406670213af0c31956e553e0db6 100644 (file)
@@ -25,7 +25,7 @@
 #ifndef _GUI_H_
 #define _GUI_H_
 
-#include <plib/pu.h>
+#include <pu.h>                        // plib include
 
 extern void guiInit();
 extern void guiMotionFunc ( int x, int y );
index 856e0a7fe86579ed291a2566cb2ae0e49eb6ebf2..dcad3f78acd11e217ba9f44353749b54821a7d07 100644 (file)
@@ -2,7 +2,7 @@
 //
 // Written by Curtis Olson, started October 1998.
 //
-// Copyright (C) 1998  Curtis L. Olson - curt@me.umn.edu
+// Copyright (C) 1998 - 1999  Curtis L. Olson - curt@flightgear.org
 //
 // This program is free software; you can redistribute it and/or
 // modify it under the terms of the GNU General Public License as
@@ -33,7 +33,7 @@
 #include <Debug/logstream.hxx>
 
 #if defined( ENABLE_PLIB_JOYSTICK )
-#  include <plib/js.h>
+#  include <js.h>              // plib include
 #elif defined( ENABLE_GLUT_JOYSTICK )
 #  include <GL/glut.h>
 #  include <XGL/xgl.h>
index 58d5d55e8f16452836bad84a5f86ebefde5642ba..d0af569d8231b5b314e1a129aa9408c097e0841f 100644 (file)
@@ -36,9 +36,10 @@ bin_PROGRAMS = fgfs
 bin_SCRIPTS = runfgfs runfgfs.bat
 
 fgfs_SOURCES = \
-       GLUTkey.cxx GLUTkey.hxx GLUTmain.cxx \
        fg_init.cxx fg_init.hxx \
        fg_serial.cxx fg_serial.hxx \
+       keyboard.cxx keyboard.hxx \
+       main.cxx \
        options.cxx options.hxx \
        splash.cxx splash.hxx \
        views.cxx views.hxx
@@ -66,7 +67,7 @@ fgfs_LDADD = \
        $(top_builddir)/Lib/Math/libMath.a \
        $(top_builddir)/Lib/Bucket/libBucket.a \
        $(top_builddir)/Lib/Debug/libDebug.a \
-       -lpu -lfnt \
+       -lpu -lfnt -lssg -lsg \
        $(top_builddir)/Lib/Misc/libMisc.a \
        $(top_builddir)/Lib/zlib/libz.a \
        $(opengl_LIBS)
index 149eebb780cd897189562efec1866ce66156367b..cecf5d65474d6431922898ed38e37b7b43f195f8 100644 (file)
@@ -62,6 +62,7 @@
 #include <Math/fg_geodesy.hxx>
 #include <Math/point3d.hxx>
 #include <Math/polar3d.hxx>
+#include <Misc/fgpath.hxx>
 #include <Scenery/scenery.hxx>
 #include <Scenery/tilemgr.hxx>
 #include <Time/event.hxx>
@@ -85,8 +86,40 @@ FG_USING_STD(string);
 extern const char *default_root;
 
 
+// Read in configuration (file and command line)
+bool fgInitConfig ( int argc, char **argv ) {
+    // Attempt to locate and parse a config file
+    // First check fg_root
+    FGPath config( current_options.get_fg_root() );
+    config.append( "system.fgfsrc" );
+    current_options.parse_config_file( config.str() );
+
+    // Next check home directory
+    char* envp = ::getenv( "HOME" );
+    if ( envp != NULL ) {
+       config.set( envp );
+       config.append( ".fgfsrc" );
+       current_options.parse_config_file( config.str() );
+    }
+
+    // Parse remaining command line options
+    // These will override anything specified in a config file
+    if ( current_options.parse_command_line(argc, argv) !=
+        fgOPTIONS::FG_OPTIONS_OK )
+    {
+       // Something must have gone horribly wrong with the command
+       // line parsing or maybe the user just requested help ... :-)
+       current_options.usage();
+       FG_LOG( FG_GENERAL, FG_ALERT, "\nExiting ...");
+       return false;
+    }
+
+    return true;
+}
+
+
 // Set initial position and orientation
-int fgInitPosition( void ) {
+bool fgInitPosition( void ) {
     string id;
     FGInterface *f;
 
@@ -132,12 +165,12 @@ int fgInitPosition( void ) {
            << (f->get_Latitude() * RAD_TO_DEG) << ", "
            << (f->get_Altitude() * FEET_TO_METER) << ")" );
 
-    return(1);
+    return true;
 }
 
 
 // General house keeping initializations
-int fgInitGeneral( void ) {
+bool fgInitGeneral( void ) {
     string root;
     char *mesa_win_state;
 
@@ -169,7 +202,7 @@ int fgInitGeneral( void ) {
     }
 #endif
 
-    return 1;
+    return true;
 }
 
 
@@ -177,8 +210,7 @@ int fgInitGeneral( void ) {
 // initialization routines.  If you are adding a subsystem to flight
 // gear, its initialization call should located in this routine.
 // Returns non-zero if a problem encountered.
-int fgInitSubsystems( void )
-{
+bool fgInitSubsystems( void ) {
     FGTime::cur_time_params = new FGTime();
 
     FGInterface *f; // assigned later
@@ -422,7 +454,7 @@ int fgInitSubsystems( void )
 
     FG_LOG( FG_GENERAL, FG_INFO, endl);
 
-    return(1);
+    return true;
 }
 
 
index cee62e05f31345cfb35ee038ce575e28400104be..2f4399e4b6204416f1d096638951c5f0b459b47a 100644 (file)
 #endif                                   
 
 
+// Read in configuration (file and command line)
+bool fgInitConfig ( int argc, char **argv );
+
+
 // General house keeping initializations
-int fgInitGeneral ( void );
+bool fgInitGeneral ( void );
 
 
 // This is the top level init routine which calls all the other
 // initialization routines.  If you are adding a subsystem to flight
 // gear, its initialization call should located in this routine.
-int fgInitSubsystems( void );
+bool fgInitSubsystems( void );
 
 
 // Reset
index 58b72be812caaf6f7c3b70433e6413cdd34774b3..d4e4e8b6c5a21d8ec401cefe6cc5034cdb243272 100644 (file)
@@ -1,8 +1,8 @@
-// GLUTkey.cxx -- handle GLUT keyboard events
+// keyboard.cxx -- handle GLUT keyboard events
 //
 // Written by Curtis Olson, started May 1997.
 //
-// Copyright (C) 1997  Curtis L. Olson  - curt@me.umn.edu
+// Copyright (C) 1997 - 1999  Curtis L. Olson  - curt@flightgear.org
 //
 // This program is free software; you can redistribute it and/or
 // modify it under the terms of the GNU General Public License as
@@ -39,6 +39,8 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+#include <pu.h>                        // plib include
+
 #include <Debug/logstream.hxx>
 #include <Aircraft/aircraft.hxx>
 #include <Astro/solarsystem.hxx>
 #include <Include/fg_constants.h>
 #include <Scenery/tilemgr.hxx>
 #include <Objects/materialmgr.hxx>
-#include <plib/pu.h>
 #include <Time/fg_time.hxx>
 #include <Time/light.hxx>
 #include <Weather/weather.hxx>
 
-#include "GLUTkey.hxx"
+#include "keyboard.hxx"
 #include "options.hxx"
 #include "views.hxx"
 
index 84e86f84f0af36121392ea4db42165c9069f12f3..ce984582295dcecb72a659e362b10ebd1185b0cb 100644 (file)
@@ -1,8 +1,8 @@
-// GLUTkey.hxx -- handle GLUT keyboard events
+// keyboard.hxx -- handle GLUT keyboard events
 //
 // Written by Curtis Olson, started May 1997.
 //
-// Copyright (C) 1997  Curtis L. Olson  - curt@infoplane.com
+// Copyright (C) 1997 - 1999  Curtis L. Olson  - curt@flightgear.org
 //
 // This program is free software; you can redistribute it and/or
 // modify it under the terms of the GNU General Public License as
@@ -21,8 +21,8 @@
 // $Id$
 
 
-#ifndef _GLUTKEY_HXX
-#define _GLUTKEY_HXX
+#ifndef _KEYBOARD_HXX
+#define _KEYBOARD_HXX
 
 
 #ifndef __cplusplus                                                          
@@ -47,6 +47,6 @@ void GLUTkey(unsigned char k, int x, int y);
 void GLUTspecialkey(int k, int x, int y);
 
 
-#endif // _GLUTKEY_HXX
+#endif // _KEYBOARD_HXX
 
 
index 8fb1805f7ed8b620ecd7caf012cf3f8d6fe62197..265f341185873ed6e59494b82843c2236494a542 100644 (file)
@@ -1,8 +1,8 @@
-// GLUTmain.cxx -- top level sim routines
+// main.cxx -- top level sim routines
 //
 // Written by Curtis Olson for OpenGL, started May 1997.
 //
-// Copyright (C) 1997  Curtis L. Olson  - curt@me.umn.edu
+// Copyright (C) 1997 - 1999  Curtis L. Olson  - curt@flightgear.org
 //
 // This program is free software; you can redistribute it and/or
 // modify it under the terms of the GNU General Public License as
 //
 // $Id$
 
+
 #define MICHAEL_JOHNSON_EXPERIMENTAL_ENGINE_AUDIO
 
+
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
 #endif
 #  include <unistd.h>    /* for stat() */
 #endif
 
+#include <pu.h>                        // plib include
+#include <ssg.h>               // plib include
+
+#ifdef ENABLE_AUDIO_SUPPORT
+#  include <sl.h>              // plib include
+#  include <sm.h>              // plib include
+#endif
+
 #include <Include/fg_constants.h>  // for VERSION
 #include <Include/general.hxx>
 
 #include <Astro/stars.hxx>
 #include <Astro/solarsystem.hxx>
 
-#ifdef ENABLE_AUDIO_SUPPORT
-#  include <plib/sl.h>
-#  include <plib/sm.h>
-#endif
-
 #include <Autopilot/autopilot.hxx>
 #include <Cockpit/cockpit.hxx>
 #include <GUI/gui.h>
@@ -76,7 +81,6 @@
 #include <Math/polar3d.hxx>
 #include <Math/fg_random.h>
 #include <Misc/fgpath.hxx>
-#include <plib/pu.h>
 #include <Scenery/scenery.hxx>
 #include <Scenery/tilemgr.hxx>
 #include <Time/event.hxx>
@@ -85,8 +89,8 @@
 #include <Time/sunpos.hxx>
 #include <Weather/weather.hxx>
 
-#include "GLUTkey.hxx"
 #include "fg_init.hxx"
+#include "keyboard.hxx"
 #include "options.hxx"
 #include "splash.hxx"
 #include "views.hxx"
@@ -124,6 +128,11 @@ slSample *s2;
 #endif
 
 
+// ssg variables
+ssgRoot *scene = NULL;
+ssgTransform *penguin = NULL;
+
+
 // The following defines flight gear options. Because glutlib will also
 // want to parse its own options, those options must not be included here
 // or they will get parsed by the main program option parser. Hence case
@@ -166,6 +175,10 @@ static void fgInitVisuals( void ) {
     xglEnable( GL_LIGHT0 );
     xglLightfv( GL_LIGHT0, GL_POSITION, l->sun_vec );
 
+    sgVec3 sunpos;
+    sgSetVec3( sunpos, l->sun_vec[0], l->sun_vec[1], l->sun_vec[2] );
+    ssgGetLight( 0 ) -> setPosition( sunpos );
+
     // xglFogi (GL_FOG_MODE, GL_LINEAR);
     xglFogi (GL_FOG_MODE, GL_EXP2);
     // Fog density is now set when the weather system is initialized
@@ -274,6 +287,10 @@ static void fgRenderFrame( void ) {
        // set the sun position
        xglLightfv( GL_LIGHT0, GL_POSITION, l->sun_vec );
 
+       sgVec3 sunpos;
+       sgSetVec3( sunpos, l->sun_vec[0], l->sun_vec[1], l->sun_vec[2] );
+       ssgGetLight( 0 ) -> setPosition( sunpos );
+
        clear_mask = GL_DEPTH_BUFFER_BIT;
        if ( current_options.get_wireframe() ) {
            clear_mask |= GL_COLOR_BUFFER_BIT;
@@ -376,6 +393,34 @@ static void fgRenderFrame( void ) {
        puDisplay();
        xglDisable   ( GL_BLEND ) ;
        xglEnable( GL_FOG );
+
+       // ssg test
+       cout << "trying to draw ssg scene" << endl;
+
+       xglMatrixMode(GL_PROJECTION);
+       xglLoadIdentity();
+       ssgSetFOV(60.0f, 0.0f);
+       ssgSetNearFar(1.0f, 700.0f);
+       sgCoord tuxpos;
+       sgSetCoord( &tuxpos, 
+                   current_view.view_pos.x() + current_view.view_forward[0] 
+                   * 20, 
+                   current_view.view_pos.y() + current_view.view_forward[1]
+                   * 20,
+                   current_view.view_pos.z() + current_view.view_forward[2]
+                   * 20, 
+                   0.0, 0.0, 0.0 );
+       penguin->setTransform( &tuxpos );
+
+       sgCoord campos;
+       sgSetCoord( &campos, 
+                   current_view.view_pos.x(), 
+                   current_view.view_pos.y(),
+                   current_view.view_pos.z(), 
+                   0, 0, 0 );
+       ssgSetCamera( &campos );
+       ssgCullAndDraw( scene );
+
     }
 
     xglutSwapBuffers();
@@ -817,23 +862,20 @@ static void fgIdleFunction ( void ) {
 // options.cxx needs to see this for toggle_panel()
 // Handle new window size or exposure
 void fgReshape( int width, int height ) {
-    // Do this so we can call fgReshape(0,0) ourselves without having
-    // to know what the values of width & height are.
-    if ( (height > 0) && (width > 0) ) {
-       if ( ! current_options.get_panel_status() ) {
-           current_view.set_win_ratio( (GLfloat) width / (GLfloat) height );
-       } else {
-           current_view.set_win_ratio( (GLfloat) width / 
-                                       ((GLfloat) (height)*0.4232) );
-       }
+    if ( ! current_options.get_panel_status() ) {
+       current_view.set_win_ratio( (GLfloat) width / (GLfloat) height );
+       xglViewport(0, 0 , (GLint)(width), (GLint)(height) );
+    } else {
+       current_view.set_win_ratio( (GLfloat) width / 
+                                   ((GLfloat) (height)*0.4232) );
+       xglViewport(0, (GLint)((height)*0.5768), (GLint)(width), 
+                   (GLint)((height)*0.4232) );
     }
 
     current_view.set_winWidth( width );
     current_view.set_winHeight( height );
     current_view.force_update_fov_math();
 
-    // Inform gl of our view window size (now handled elsewhere)
-    // xglViewport(0, 0, (GLint)width, (GLint)height);
     if ( idle_state == 1000 ) {
        // yes we've finished all our initializations and are running
        // the main loop, so this will now work without seg faulting
@@ -965,10 +1007,6 @@ int main( int argc, char **argv ) {
     argc = ccommand( &argv );
 #endif
 
-    FGInterface *f;
-
-    f = current_aircraft.fdm_state;
-
 #ifdef HAVE_BC5PLUS
     _control87(MCW_EM, MCW_EM);  /* defined in float.h */
 #endif
@@ -978,40 +1016,15 @@ int main( int argc, char **argv ) {
 
     FG_LOG( FG_GENERAL, FG_INFO, "Flight Gear:  Version " << VERSION << endl );
 
-    string root;
-
-    FG_LOG( FG_GENERAL, FG_INFO, "General Initialization" );
-    FG_LOG( FG_GENERAL, FG_INFO, "======= ==============" );
-
     // seed the random number generater
     fg_srandom();
 
-    // Attempt to locate and parse a config file
-    // First check fg_root
-    FGPath config( current_options.get_fg_root() );
-    config.append( "system.fgfsrc" );
-    current_options.parse_config_file( config.str() );
-
-    // Next check home directory
-    char* envp = ::getenv( "HOME" );
-    if ( envp != NULL ) {
-       config.set( envp );
-       config.append( ".fgfsrc" );
-       current_options.parse_config_file( config.str() );
-    }
-
-    // Parse remaining command line options
-    // These will override anything specified in a config file
-    if ( current_options.parse_command_line(argc, argv) !=
-        fgOPTIONS::FG_OPTIONS_OK )
-    {
-       // Something must have gone horribly wrong with the command
-       // line parsing or maybe the user just requested help ... :-)
-       current_options.usage();
-       FG_LOG( FG_GENERAL, FG_ALERT, "\nExiting ...");
+    // Load the configuration parameters
+    if ( !fgInitConfig(argc, argv) ) {
+       FG_LOG( FG_GENERAL, FG_ALERT, "Config option parsing failed ..." );
        exit(-1);
     }
-    
+
     // Initialize the Window/Graphics environment.
     if( !fgGlutInit(&argc, argv) ) {
        FG_LOG( FG_GENERAL, FG_ALERT, "GLUT initialization failed ..." );
@@ -1025,20 +1038,45 @@ int main( int argc, char **argv ) {
        exit(-1);
     }
 
-    // Init the user interface (we need to do this before passing off
-    // control to glut and before fgInitGeneral to get our fonts !!!
+    // Initialize ssg (from plib)
+    ssgInit();
+
+    // Initialize the user interface (we need to do this before
+    // passing off control to glut and before fgInitGeneral to get our
+    // fonts !!!
     guiInit();
 
-    // First do some quick general initializations
+    // Do some quick general initializations
     if( !fgInitGeneral()) {
        FG_LOG( FG_GENERAL, FG_ALERT, 
                "General initializations failed ..." );
        exit(-1);
     }
 
+    //
+    // some ssg test stuff (requires data from the plib source
+    // distribution) specifically from the ssg tux example
+    //
+
+    ssgModelPath( "/h/curt/src/Libs/plib-1.0.12/examples/ssg/tux/data/" );
+    ssgTexturePath( "/h/curt/src/Libs/plib-1.0.12/examples/ssg/tux/data/" );
+
+    scene = new ssgRoot;
+    penguin = new ssgTransform;
+
+    ssgEntity *tux_obj = ssgLoadAC( "tuxedo.ac" );
+    penguin->addKid( tux_obj );
+    ssgFlatten( tux_obj );
+    ssgStripify( penguin );
+
+    scene->addKid( penguin );
+
+    cout << "loaded ssg scene so it should be ready to go" << endl;
+
     // pass control off to the master GLUT event handler
     glutMainLoop();
 
-    // we never actually get here ... but just in case ... :-)
-    return(0);
+    // we never actually get here ... but to avoid compiler warnings,
+    // etc.
+    return 0;
 }
index 10f77002bf0a117cf0e3b4186d49fbcab77704ed..418b6dcf4e4d8af6d9d1568d2330cd044bfc6aec 100644 (file)
@@ -26,6 +26,8 @@
 #  include <config.h>
 #endif
 
+#include <ssg.h>               // plib include
+
 #include <Aircraft/aircraft.hxx>
 #include <Cockpit/panel.hxx>
 #include <Debug/logstream.hxx>
@@ -93,6 +95,8 @@ void FGView::Init( void ) {
 
 // Update the field of view coefficients
 void FGView::UpdateFOV( const fgOPTIONS& o ) {
+    ssgSetFOV( o.get_fov(), 0.0 );
+
     double fov, theta_x, theta_y;
 
     fov = o.get_fov();
@@ -228,15 +232,17 @@ void FGView::UpdateViewParams( void ) {
        xglViewport(0, 0 , (GLint)(winWidth), (GLint)(winHeight) );
     } else {
        xglViewport(0, (GLint)((winHeight)*0.5768), (GLint)(winWidth), 
-                    (GLint)((winHeight)*0.4232) );
+                   (GLint)((winHeight)*0.4232) );
     }
 
     // Tell GL we are about to modify the projection parameters
     xglMatrixMode(GL_PROJECTION);
     xglLoadIdentity();
     if ( f->get_Altitude() * FEET_TO_METER - scenery.cur_elev > 10.0 ) {
+       ssgSetNearFar( 10.0, 100000.0 );
        gluPerspective(current_options.get_fov(), win_ratio, 10.0, 100000.0);
     } else {
+       ssgSetNearFar( 0.5, 100000.0 );
        gluPerspective(current_options.get_fov(), win_ratio, 0.5, 100000.0);
        // printf("Near ground, minimizing near clip plane\n");
     }
@@ -244,7 +250,7 @@ void FGView::UpdateViewParams( void ) {
 
     xglMatrixMode(GL_MODELVIEW);
     xglLoadIdentity();
-    
+
     // set up our view volume (default)
 #if !defined(FG_VIEW_INLINE_OPTIMIZATIONS)
     LookAt(view_pos.x(), view_pos.y(), view_pos.z(),
index 37000bf7142f55111302e87a74ff8cb0c4333f6e..21fd2fac909b1386221d7e2b7a6cf378b2944839 100644 (file)
@@ -45,7 +45,7 @@
 #include <vector>
 #include STL_STRING
 
-#include <plib/sg.h>
+#include <sg.h>                        // plib includes
 
 #include <Bucket/newbucket.hxx>
 #include <Math/mat3.h>