More tweaks to opengl state management when drawing 3d clouds.
This commit is contained in:
parent
7c057de4fe
commit
43af8026d8
1 changed files with 21 additions and 24 deletions
|
@ -470,8 +470,23 @@ void fgRenderFrame() {
|
||||||
fgReshape( fgGetInt("/sim/startup/xsize"),
|
fgReshape( fgGetInt("/sim/startup/xsize"),
|
||||||
fgGetInt("/sim/startup/ysize") );
|
fgGetInt("/sim/startup/ysize") );
|
||||||
|
|
||||||
// set the sun position (done later with ssg calls)
|
if ( fgGetBool("/sim/rendering/clouds3d") ) {
|
||||||
// glLightfv( GL_LIGHT0, GL_POSITION, l->sun_vec );
|
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;
|
clear_mask = GL_DEPTH_BUFFER_BIT;
|
||||||
if ( fgGetBool("/sim/rendering/wireframe") ) {
|
if ( fgGetBool("/sim/rendering/wireframe") ) {
|
||||||
|
@ -492,21 +507,6 @@ void fgRenderFrame() {
|
||||||
}
|
}
|
||||||
glClear( clear_mask );
|
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
|
// Tell GL we are switching to model view parameters
|
||||||
|
|
||||||
// I really should create a derived ssg node or use a call
|
// I really should create a derived ssg node or use a call
|
||||||
|
@ -777,16 +777,13 @@ void fgRenderFrame() {
|
||||||
|
|
||||||
if ( fgGetBool("/sim/rendering/clouds3d") ) {
|
if ( fgGetBool("/sim/rendering/clouds3d") ) {
|
||||||
glDisable( GL_FOG );
|
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 );
|
glDisable( GL_LIGHTING );
|
||||||
// cout << "drawing new clouds" << endl;
|
// cout << "drawing new clouds" << endl;
|
||||||
// set the opengl state to known default values
|
|
||||||
// default_state->force();
|
|
||||||
sgClouds3d->Draw((sgVec4 *)current__view->get_VIEW());
|
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();
|
globals->get_model_mgr()->draw();
|
||||||
|
|
Loading…
Add table
Reference in a new issue