]> git.mxchange.org Git - flightgear.git/commitdiff
More tweaks to opengl state management when drawing 3d clouds.
authorcurt <curt>
Mon, 23 Sep 2002 22:05:36 +0000 (22:05 +0000)
committercurt <curt>
Mon, 23 Sep 2002 22:05:36 +0000 (22:05 +0000)
src/Main/main.cxx

index 881d0206d8c5f80929e9a93594d7751a98fcb299..3e7b9759803a2e1d1ffe51e98b1e5955b0f40360 100644 (file)
@@ -470,8 +470,23 @@ void fgRenderFrame() {
        fgReshape( fgGetInt("/sim/startup/xsize"),
                   fgGetInt("/sim/startup/ysize") );
 
-       // set the sun position (done later with ssg calls)
-       // glLightfv( GL_LIGHT0, GL_POSITION, l->sun_vec );
+        if ( fgGetBool("/sim/rendering/clouds3d") ) {
+            glClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT );
+            cloud3d_imposter_state->force();
+            glDisable( GL_FOG );
+            glColor4f( 1.0, 1.0, 1.0, 1.0 );
+            glEnable(GL_DEPTH_TEST);
+            glEnable(GL_BLEND);
+            glBlendFunc( GL_ONE, GL_ONE_MINUS_SRC_ALPHA ) ;
+            if ( _bcloud_orig ) {
+                Point3D c = globals->get_scenery()->get_center();
+                sgClouds3d->Set_Cloud_Orig( &c );
+                _bcloud_orig = false;
+            }
+            sgClouds3d->Update( current__view->get_absolute_view_pos() );
+            glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ) ;
+            glDisable(GL_DEPTH_TEST);
+        }
 
        clear_mask = GL_DEPTH_BUFFER_BIT;
        if ( fgGetBool("/sim/rendering/wireframe") ) {
@@ -492,21 +507,6 @@ void fgRenderFrame() {
        }
        glClear( clear_mask );
 
-        if ( fgGetBool("/sim/rendering/clouds3d") ) {
-            cloud3d_imposter_state->force();
-            glDisable( GL_FOG );
-            glColor4f( 1.0, 1.0, 1.0, 1.0 );
-            glEnable(GL_DEPTH_TEST);
-            glEnable(GL_BLEND);
-            glBlendFunc( GL_ONE, GL_ONE_MINUS_SRC_ALPHA ) ;
-            if ( _bcloud_orig ) {
-                Point3D c = globals->get_scenery()->get_center();
-                sgClouds3d->Set_Cloud_Orig( &c );
-                _bcloud_orig = false;
-            }
-            sgClouds3d->Update( current__view->get_absolute_view_pos() );
-        }
-
        // Tell GL we are switching to model view parameters
 
        // I really should create a derived ssg node or use a call
@@ -777,16 +777,13 @@ void fgRenderFrame() {
 
         if ( fgGetBool("/sim/rendering/clouds3d") ) {
             glDisable( GL_FOG );
-            glEnable(GL_BLEND);
-            glEnable(GL_TEXTURE_2D);
-            glEnable(GL_ALPHA_TEST);
-            glBlendFunc ( GL_ONE, GL_ONE_MINUS_SRC_ALPHA ) ;
-            glDisable( GL_DEPTH_TEST );
             glDisable( GL_LIGHTING );
             // cout << "drawing new clouds" << endl;
-            // set the opengl state to known default values
-            // default_state->force();
             sgClouds3d->Draw((sgVec4 *)current__view->get_VIEW());
+            glEnable( GL_FOG );
+            glEnable( GL_LIGHTING );
+            glEnable( GL_DEPTH_TEST );
+            glBlendFunc ( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ) ;
         }
 
        globals->get_model_mgr()->draw();