From 56e3195b65d19fe129b2f2b3156ee1ff365d4eeb Mon Sep 17 00:00:00 2001 From: James Turner Date: Fri, 20 May 2011 00:07:36 +0100 Subject: [PATCH 1/9] Change OS-X SDK/version for building RubyCocoa launcher with XCode 4. May revert if I can find a way to use the 10.5 SDK officially. --- package/mac/hudson_mac_build_launcher.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package/mac/hudson_mac_build_launcher.sh b/package/mac/hudson_mac_build_launcher.sh index 4cf8e541b..dc3bd243a 100755 --- a/package/mac/hudson_mac_build_launcher.sh +++ b/package/mac/hudson_mac_build_launcher.sh @@ -1,7 +1,7 @@ #!/bin/sh -SDK_PATH="/Developer/SDKs/MacOSX10.5.sdk" -OSX_TARGET="10.5" +SDK_PATH="/Developer/SDKs/MacOSX10.6.sdk" +OSX_TARGET="10.6" svn co https://macflightgear.svn.sourceforge.net/svnroot/macflightgear/trunk/FlightGearOSX macflightgear From 9f13c49d292825813073dc2375995238800326a6 Mon Sep 17 00:00:00 2001 From: ThorstenB Date: Fri, 20 May 2011 19:48:05 +0200 Subject: [PATCH 2/9] issue #316: panning not working when center-on-aircraft enabled Panning feature looked broken to some users since auto-center is enabled by default which blocks panning. center-on-aircraft is now disabled automatically when view is panned. --- src/GUI/MapWidget.cxx | 8 ++++++++ src/GUI/MapWidget.hxx | 1 + 2 files changed, 9 insertions(+) diff --git a/src/GUI/MapWidget.cxx b/src/GUI/MapWidget.cxx index cd648fefb..e3cc5de77 100644 --- a/src/GUI/MapWidget.cxx +++ b/src/GUI/MapWidget.cxx @@ -386,6 +386,7 @@ MapWidget::MapWidget(int x, int y, int maxX, int maxY) : _zoom = 6; _width = maxX - x; _height = maxY - y; + _hasPanned = false; MapData::setFont(legendFont); MapData::setPalette(colour); @@ -496,6 +497,7 @@ int MapWidget::checkKey (int key, int updown ) void MapWidget::pan(const SGVec2d& delta) { + _hasPanned = true; _projectionCenter = unproject(-delta); } @@ -525,6 +527,12 @@ void MapWidget::draw(int dx, int dy) fgGetDouble("/position/latitude-deg")); _magneticHeadings = _root->getBoolValue("magnetic-headings"); + if (_hasPanned) + { + _root->setBoolValue("centre-on-aircraft", false); + _hasPanned = false; + } + else if (_root->getBoolValue("centre-on-aircraft")) { _projectionCenter = _aircraft; } diff --git a/src/GUI/MapWidget.hxx b/src/GUI/MapWidget.hxx index f2722e327..ce9333e32 100644 --- a/src/GUI/MapWidget.hxx +++ b/src/GUI/MapWidget.hxx @@ -85,6 +85,7 @@ private: double _drawRangeNm; double _upHeading; // true heading corresponding to +ve y-axis bool _magneticHeadings; + bool _hasPanned; SGGeod _projectionCenter; SGGeod _aircraft; From 2088a61f2fc93b2f37c90d4b4ed37520b905d14f Mon Sep 17 00:00:00 2001 From: ThorstenB Date: Sat, 21 May 2011 09:16:21 +0200 Subject: [PATCH 3/9] Revert "make clearcolor black, so that space is dark instead of gray." This reverts commit b36b33f716031ef5933d41a1e5c17c6be3e54c28. See #316: Caused issues with sky becoming black in dense fog. Also: when the fog issue is solved, we could configure the constant (black) clear color once only (during init), no need to do it in every loop. Also, entire "if (skyblend) { ... } else {..}" was redundant, since "if" and "else" clauses were all identical - and the "clearColor" variables were unused. => Once the fog issue is solved, we can easily improve the clearColor configuration here. --- src/Main/renderer.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Main/renderer.cxx b/src/Main/renderer.cxx index fe713ab62..dfa3bb45b 100644 --- a/src/Main/renderer.cxx +++ b/src/Main/renderer.cxx @@ -611,11 +611,11 @@ FGRenderer::update( bool refresh_camera_settings ) { if ( fgGetBool("/sim/rendering/textures") ) { SGVec4f clearColor(l->adj_fog_color()); - camera->setClearColor(osg::Vec4(0.0, 0.0, 0.0, 1.0)); + camera->setClearColor(toOsg(clearColor)); } } else { SGVec4f clearColor(l->sky_color()); - camera->setClearColor(osg::Vec4(0.0, 0.0, 0.0, 1.0)); + camera->setClearColor(toOsg(clearColor)); } // update fog params if visibility has changed From 473d1447c330780ecac8a12a2d0b35c4eebdde41 Mon Sep 17 00:00:00 2001 From: ThorstenB Date: Sat, 21 May 2011 13:22:47 +0200 Subject: [PATCH 4/9] Minor renderer clean-up & performance bits. Use non-static methods so we can use member variables. --- src/Input/FGMouseInput.cxx | 4 +- src/Main/main.cxx | 7 ++- src/Main/renderer.cxx | 103 +++++++++++++++++++++++++------------ src/Main/renderer.hxx | 20 +++++-- 4 files changed, 92 insertions(+), 42 deletions(-) diff --git a/src/Input/FGMouseInput.cxx b/src/Input/FGMouseInput.cxx index 8ab430653..9a0d13abb 100644 --- a/src/Input/FGMouseInput.cxx +++ b/src/Input/FGMouseInput.cxx @@ -23,8 +23,8 @@ // $Id$ #include "FGMouseInput.hxx" +#include "Main/globals.hxx" - void ActivePickCallbacks::init( int b, const osgGA::GUIEventAdapter* ea ) { // Get the list of hit callbacks. Take the first callback that @@ -33,7 +33,7 @@ void ActivePickCallbacks::init( int b, const osgGA::GUIEventAdapter* ea ) // The nearest one is the first one and the deepest // (the most specialized one in the scenegraph) is the first. std::vector pickList; - if (FGRenderer::pick(pickList, ea)) { + if (globals->get_renderer()->pick(pickList, ea)) { std::vector::const_iterator i; for (i = pickList.begin(); i != pickList.end(); ++i) { if (i->callback->buttonPressed(b, i->info)) { diff --git a/src/Main/main.cxx b/src/Main/main.cxx index 6c7b8a7e1..e66ffe242 100644 --- a/src/Main/main.cxx +++ b/src/Main/main.cxx @@ -203,6 +203,7 @@ static void fgMainLoop( void ) { if (globals->get_tile_mgr()->isSceneryLoaded() && fgGetBool("sim/fdm-initialized")) { fgSetBool("sim/sceneryloaded",true); + fgSplashProgress(""); if (fgGetBool("/sim/sound/working")) { globals->get_soundmgr()->activate(); } @@ -555,6 +556,10 @@ static void fgIdleFunction ( void ) { } } +static void fgWinResizeFunction(int width, int height) +{ + globals->get_renderer()->resize(width, height); +} static void upper_case_property(const char *name) { @@ -644,7 +649,7 @@ int fgMainInit( int argc, char **argv ) { fgOSInit(&argc, argv); _bootstrap_OSInit++; - fgRegisterWindowResizeHandler( &FGRenderer::resize ); + fgRegisterWindowResizeHandler( &fgWinResizeFunction ); fgRegisterIdleHandler( &fgIdleFunction ); fgRegisterDrawHandler( &FGRenderer::update ); diff --git a/src/Main/renderer.cxx b/src/Main/renderer.cxx index dfa3bb45b..055a33aba 100644 --- a/src/Main/renderer.cxx +++ b/src/Main/renderer.cxx @@ -128,7 +128,7 @@ public: hint->setMode(GL_DONT_CARE); } private: - SGSharedPtr mConfigNode; + SGPropertyNode_ptr mConfigNode; }; @@ -272,7 +272,7 @@ private: class FGWireFrameModeUpdateCallback : public osg::StateAttribute::Callback { public: FGWireFrameModeUpdateCallback() : - mWireframe(fgGetNode("/sim/rendering/wireframe")) + mWireframe(fgGetNode("/sim/rendering/wireframe", true)) { } virtual void operator()(osg::StateAttribute* stateAttribute, osg::NodeVisitor*) @@ -289,13 +289,13 @@ public: osg::PolygonMode::FILL); } private: - SGSharedPtr mWireframe; + SGPropertyNode_ptr mWireframe; }; class FGLightModelUpdateCallback : public osg::StateAttribute::Callback { public: FGLightModelUpdateCallback() : - mHighlights(fgGetNode("/sim/rendering/specular-highlight")) + mHighlights(fgGetNode("/sim/rendering/specular-highlight", true)) { } virtual void operator()(osg::StateAttribute* stateAttribute, osg::NodeVisitor*) @@ -320,13 +320,13 @@ public: } } private: - SGSharedPtr mHighlights; + SGPropertyNode_ptr mHighlights; }; class FGFogEnableUpdateCallback : public osg::StateSet::Callback { public: FGFogEnableUpdateCallback() : - mFogEnabled(fgGetNode("/sim/rendering/fog")) + mFogEnabled(fgGetNode("/sim/rendering/fog", true)) { } virtual void operator()(osg::StateSet* stateSet, osg::NodeVisitor*) { @@ -337,7 +337,7 @@ public: } } private: - SGSharedPtr mFogEnabled; + SGPropertyNode_ptr mFogEnabled; }; class FGFogUpdateCallback : public osg::StateAttribute::Callback { @@ -387,6 +387,7 @@ FGRenderer::FGRenderer() jpgRenderFrame = FGRenderer::update; #endif eventHandler = new FGEventHandler; + _splash_screen_active = true; } FGRenderer::~FGRenderer() @@ -409,11 +410,34 @@ FGRenderer::splashinit( void ) { // visitor automatically. mUpdateVisitor->setFrameStamp(mFrameStamp.get()); viewer->setUpdateVisitor(mUpdateVisitor.get()); + fgSetDouble("/sim/startup/splash-alpha", 1.0); } void FGRenderer::init( void ) { + _scenery_loaded = fgGetNode("/sim/sceneryloaded", true); + _scenery_override = fgGetNode("/sim/sceneryloaded-override", true); + _panel_hotspots = fgGetNode("/sim/panel-hotspots", true); + _virtual_cockpit = fgGetNode("/sim/virtual-cockpit", true); + + _sim_delta_sec = fgGetNode("/sim/time/delta-sec", true); + + _xsize = fgGetNode("/sim/startup/xsize", true); + _ysize = fgGetNode("/sim/startup/ysize", true); + + _skyblend = fgGetNode("/sim/rendering/skyblend", true); + _point_sprites = fgGetNode("/sim/rendering/point-sprites", true); + _enhanced_lighting = fgGetNode("/sim/rendering/enhanced-lighting", true); + _distance_attenuation = fgGetNode("/sim/rendering/distance-attenuation", true); + _horizon_effect = fgGetNode("/sim/rendering/horizon-effect", true); + _textures = fgGetNode("/sim/rendering/textures", true); + + _altitude_ft = fgGetNode("/position/altitude-ft", true); + + _cloud_status = fgGetNode("/environment/clouds/status", true); + _visibility_m = fgGetNode("/environment/visibility-m", true); + osgViewer::Viewer* viewer = globals->get_renderer()->getViewer(); osg::initNotifyLevel(); @@ -557,27 +581,39 @@ FGRenderer::init( void ) stateSet->setAttributeAndModes(new osg::Program, osg::StateAttribute::ON); } +void +FGRenderer::update() +{ + globals->get_renderer()->update(true); +} // Update all Visuals (redraws anything graphics related) void FGRenderer::update( bool refresh_camera_settings ) { - bool scenery_loaded = fgGetBool("sim/sceneryloaded", false) - || fgGetBool("sim/sceneryloaded-override"); + if ((!_scenery_loaded.get())|| + !(_scenery_loaded->getBoolValue() || + _scenery_override->getBoolValue())) + { + // alas, first "update" is being called before "init"... + fgSetDouble("/sim/startup/splash-alpha", 1.0); + _splash_screen_active = true; + return; + } osgViewer::Viewer* viewer = globals->get_renderer()->getViewer(); - if (!scenery_loaded) { - fgSetDouble("/sim/startup/splash-alpha", 1.0); - return; + + if (_splash_screen_active) + { + // Fade out the splash screen + double sAlpha = SGMiscd::max(0, (2.5 - globals->get_sim_time_sec()) / 2.5); + _splash_screen_active = (sAlpha > 0.0); + fgSetDouble("/sim/startup/splash-alpha", sAlpha); } - // Fade out the splash screen over the first three seconds. - double sAlpha = SGMiscd::max(0, (2.5 - globals->get_sim_time_sec()) / 2.5); - fgSetDouble("/sim/startup/splash-alpha", sAlpha); + bool skyblend = _skyblend->getBoolValue(); + bool use_point_sprites = _point_sprites->getBoolValue(); + bool enhanced_lighting = _enhanced_lighting->getBoolValue(); + bool distance_attenuation = _distance_attenuation->getBoolValue(); - bool skyblend = fgGetBool("/sim/rendering/skyblend"); - bool use_point_sprites = fgGetBool("/sim/rendering/point-sprites"); - bool enhanced_lighting = fgGetBool("/sim/rendering/enhanced-lighting"); - bool distance_attenuation - = fgGetBool("/sim/rendering/distance-attenuation"); // OSGFIXME SGConfigureDirectionalLights( use_point_sprites, enhanced_lighting, distance_attenuation ); @@ -586,10 +622,10 @@ FGRenderer::update( bool refresh_camera_settings ) { // update fog params double actual_visibility; - if (fgGetBool("/environment/clouds/status")) { + if (_cloud_status->getBoolValue()) { actual_visibility = thesky->get_visibility(); } else { - actual_visibility = fgGetDouble("/environment/visibility-m"); + actual_visibility = _visibility_m->getDoubleValue(); } // idle_state is now 1000 meaning we've finished all our @@ -602,14 +638,14 @@ FGRenderer::update( bool refresh_camera_settings ) { if ( refresh_camera_settings ) { // update view port - resize( fgGetInt("/sim/startup/xsize"), - fgGetInt("/sim/startup/ysize") ); + resize( _xsize->getIntValue(), + _ysize->getIntValue() ); } osg::Camera *camera = viewer->getCamera(); if ( skyblend ) { - if ( fgGetBool("/sim/rendering/textures") ) { + if ( _textures->getBoolValue() ) { SGVec4f clearColor(l->adj_fog_color()); camera->setClearColor(toOsg(clearColor)); } @@ -619,10 +655,10 @@ FGRenderer::update( bool refresh_camera_settings ) { } // update fog params if visibility has changed - double visibility_meters = fgGetDouble("/environment/visibility-m"); + double visibility_meters = _visibility_m->getDoubleValue(); thesky->set_visibility(visibility_meters); - double altitude_m = fgGetDouble("/position/altitude-ft") * SG_FEET_TO_METER; + double altitude_m = _altitude_ft->getDoubleValue() * SG_FEET_TO_METER; thesky->modify_vis( altitude_m, 0.0 /* time factor, now unused */); // update the sky dome @@ -635,7 +671,7 @@ FGRenderer::update( bool refresh_camera_settings ) { // Sun distance: 150,000,000 kilometers double sun_horiz_eff, moon_horiz_eff; - if (fgGetBool("/sim/rendering/horizon-effect")) { + if (_horizon_effect->getBoolValue()) { sun_horiz_eff = 0.67 + pow(osg::clampAbove(0.5 + cos(l->get_sun_angle()), 0.0), @@ -666,7 +702,7 @@ FGRenderer::update( bool refresh_camera_settings ) { scolor.sun_angle = l->get_sun_angle(); scolor.moon_angle = l->get_moon_angle(); - double delta_time_sec = fgGetDouble("/sim/time/delta-sec"); + double delta_time_sec = _sim_delta_sec->getDoubleValue(); thesky->reposition( sstate, *globals->get_ephem(), delta_time_sec ); thesky->repaint( scolor, *globals->get_ephem() ); @@ -712,11 +748,10 @@ FGRenderer::update( bool refresh_camera_settings ) { l->get_sun_angle()*SGD_RADIANS_TO_DEGREES); mUpdateVisitor->setVisibility(actual_visibility); simgear::GroundLightManager::instance()->update(mUpdateVisitor.get()); - bool hotspots = fgGetBool("/sim/panel-hotspots"); osg::Node::NodeMask cullMask = ~simgear::LIGHTS_BITS & ~simgear::PICK_BIT; cullMask |= simgear::GroundLightManager::instance() ->getLightNodeMask(mUpdateVisitor.get()); - if (hotspots) + if (_panel_hotspots->getBoolValue()) cullMask |= simgear::PICK_BIT; CameraGroup::getDefault()->setCameraCullMasks(cullMask); } @@ -729,7 +764,7 @@ void FGRenderer::resize( int width, int height ) { int view_h; - if ( (!fgGetBool("/sim/virtual-cockpit")) + if ( (!_virtual_cockpit->getBoolValue()) && fgPanelVisible() && idle_state == 1000 ) { view_h = (int)(height * (globals->get_current_panel()->getViewHeight() - globals->get_current_panel()->getYOffset()) / 768.0); @@ -740,9 +775,9 @@ FGRenderer::resize( int width, int height ) { static int lastwidth = 0; static int lastheight = 0; if (width != lastwidth) - fgSetInt("/sim/startup/xsize", lastwidth = width); + _xsize->setIntValue(lastwidth = width); if (height != lastheight) - fgSetInt("/sim/startup/ysize", lastheight = height); + _ysize->setIntValue(lastheight = height); // for all views FGViewMgr *viewmgr = globals->get_viewmgr(); diff --git a/src/Main/renderer.hxx b/src/Main/renderer.hxx index 2ed51be1a..3d7133e02 100644 --- a/src/Main/renderer.hxx +++ b/src/Main/renderer.hxx @@ -3,6 +3,7 @@ #define __FG_RENDERER_HXX 1 #include +#include #include @@ -45,18 +46,18 @@ public: void splashinit(); void init(); - static void resize(int width, int height ); + void resize(int width, int height ); // calling update( refresh_camera_settings = false ) will not // touch window or camera settings. This is useful for the tiled // renderer which needs to set the view frustum itself. - static void update( bool refresh_camera_settings ); - inline static void update() { update( true ); } + void update( bool refresh_camera_settings); + static void update(); /** Just pick into the scene and return the pick callbacks on the way ... */ - static bool pick( std::vector& pickList, - const osgGA::GUIEventAdapter* ea ); + bool pick( std::vector& pickList, + const osgGA::GUIEventAdapter* ea ); /** Get and set the OSG Viewer object, if any. */ @@ -76,6 +77,15 @@ public: protected: osg::ref_ptr viewer; osg::ref_ptr eventHandler; + SGPropertyNode_ptr _scenery_loaded,_scenery_override; + SGPropertyNode_ptr _skyblend; + SGPropertyNode_ptr _point_sprites, _enhanced_lighting, _distance_attenuation; + SGPropertyNode_ptr _textures; + SGPropertyNode_ptr _cloud_status, _visibility_m; + SGPropertyNode_ptr _xsize, _ysize; + SGPropertyNode_ptr _panel_hotspots, _sim_delta_sec, _horizon_effect, _altitude_ft; + SGPropertyNode_ptr _virtual_cockpit; + bool _splash_screen_active; }; bool fgDumpSceneGraphToFile(const char* filename); From 53a954d631df7d86acceeb80129e92de9bf36cd8 Mon Sep 17 00:00:00 2001 From: ThorstenB Date: Sat, 21 May 2011 13:27:09 +0200 Subject: [PATCH 5/9] New "pause" fgcommand. Original property-rules in keyboard.xml toggled master and clock freeze independently - which caused issues when only one property was true. New command toggles both properties consistently. --- src/Main/fg_commands.cxx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Main/fg_commands.cxx b/src/Main/fg_commands.cxx index 45d4b901b..672065f45 100644 --- a/src/Main/fg_commands.cxx +++ b/src/Main/fg_commands.cxx @@ -314,6 +314,15 @@ do_resume (const SGPropertyNode * arg) #endif +static bool +do_pause (const SGPropertyNode * arg) +{ + bool paused = fgGetBool("/sim/freeze/master",true); + fgSetBool("/sim/freeze/master",!paused); + fgSetBool("/sim/freeze/clock",!paused); + if (fgGetBool("/sim/freeze/replay-state",false)) + fgSetBool("/sim/replay/disable",true); +} /** * Built-in command: load flight. @@ -1432,6 +1441,7 @@ static struct { { "reinit", do_reinit }, { "suspend", do_reinit }, { "resume", do_reinit }, + { "pause", do_pause }, { "load", do_load }, { "save", do_save }, { "panel-load", do_panel_load }, From 87647b40cb53f8c7583060703b39cf65b07c17b8 Mon Sep 17 00:00:00 2001 From: ThorstenB Date: Sat, 21 May 2011 14:07:03 +0200 Subject: [PATCH 6/9] Fix win-compile for new pause command. --- src/Main/fg_commands.cxx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Main/fg_commands.cxx b/src/Main/fg_commands.cxx index 672065f45..fc70b43f1 100644 --- a/src/Main/fg_commands.cxx +++ b/src/Main/fg_commands.cxx @@ -322,6 +322,7 @@ do_pause (const SGPropertyNode * arg) fgSetBool("/sim/freeze/clock",!paused); if (fgGetBool("/sim/freeze/replay-state",false)) fgSetBool("/sim/replay/disable",true); + return true; } /** From 59fe23dcb3e1f600d37cf0549b771c0db66751d2 Mon Sep 17 00:00:00 2001 From: James Turner Date: Sat, 21 May 2011 13:41:43 +0100 Subject: [PATCH 7/9] Change occurrences of fabsf to fabs - part of tracking down an osg/Math issue on Mac with XCode4 --- src/Instrumentation/HUD/HUD_label.cxx | 4 ++-- src/Instrumentation/HUD/HUD_ladder.cxx | 2 +- src/Instrumentation/HUD/HUD_tape.cxx | 2 +- src/Instrumentation/HUD/HUD_tbi.cxx | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Instrumentation/HUD/HUD_label.cxx b/src/Instrumentation/HUD/HUD_label.cxx index 5cf2bcb57..ddadedad3 100644 --- a/src/Instrumentation/HUD/HUD_label.cxx +++ b/src/Instrumentation/HUD/HUD_label.cxx @@ -89,7 +89,7 @@ void HUD::Label::draw(void) l = _center_x - pw; r = _center_x + pw; - bool draw_parallel = fabsf(_pointer_width - _w) > 2.0; // draw lines left and right of arrow? + bool draw_parallel = fabs(_pointer_width - _w) > 2.0; // draw lines left and right of arrow? if (option_bottom()) { if (draw_parallel) { @@ -115,7 +115,7 @@ void HUD::Label::draw(void) l = _center_y - pw; r = _center_y + pw; - draw_parallel = fabsf(_pointer_width - _h) > 2.0; + draw_parallel = fabs(_pointer_width - _h) > 2.0; if (option_left()) { if (draw_parallel) { diff --git a/src/Instrumentation/HUD/HUD_ladder.cxx b/src/Instrumentation/HUD/HUD_ladder.cxx index 478ffa1b1..88bd17549 100644 --- a/src/Instrumentation/HUD/HUD_ladder.cxx +++ b/src/Instrumentation/HUD/HUD_ladder.cxx @@ -48,7 +48,7 @@ HUD::Ladder::Ladder(HUD *hud, const SGPropertyNode *n, float x, float y) : _roll(n->getNode("roll-input", false)), _width_units(int(n->getFloatValue("display-span"))), _div_units(int(fabs(n->getFloatValue("divisions")))), - _scr_hole(fabsf(n->getFloatValue("screen-hole")) * 0.5f), + _scr_hole(fabs(n->getFloatValue("screen-hole")) * 0.5f), _zero_bar_overlength(n->getFloatValue("zero-bar-overlength", 10)), _dive_bar_angle(n->getBoolValue("enable-dive-bar-angle")), _tick_length(n->getFloatValue("tick-length")), diff --git a/src/Instrumentation/HUD/HUD_tape.cxx b/src/Instrumentation/HUD/HUD_tape.cxx index 02fb76f15..6820e8880 100644 --- a/src/Instrumentation/HUD/HUD_tape.cxx +++ b/src/Instrumentation/HUD/HUD_tape.cxx @@ -534,7 +534,7 @@ void HUD::Tape::draw_horizontal(float value) char *HUD::Tape::format_value(float v) { - if (fabsf(v) < 1e-8) // avoid -0.0 + if (fabs(v) < 1e-8) // avoid -0.0 v = 0.0f; if (_label_fmt == INT) diff --git a/src/Instrumentation/HUD/HUD_tbi.cxx b/src/Instrumentation/HUD/HUD_tbi.cxx index 7f5f442a4..7ec4c2639 100644 --- a/src/Instrumentation/HUD/HUD_tbi.cxx +++ b/src/Instrumentation/HUD/HUD_tbi.cxx @@ -129,12 +129,12 @@ void HUD::TurnBankIndicator::draw_scale() int dir = bank > 0 ? 1 : -1; - if (fabsf(bank) > 25) { + if (fabs(bank) > 25) { draw_tick(45, r, minor, dir); draw_tick(60, r, major, dir); } - if (fabsf(bank) > 55) { + if (fabs(bank) > 55) { draw_tick(90, r, major, dir); draw_tick(135, r, major, dir); } From 9a3fb418e4a358b65135d1e6d05d870cfc584b55 Mon Sep 17 00:00:00 2001 From: ThorstenB Date: Sat, 21 May 2011 14:51:10 +0200 Subject: [PATCH 8/9] Fixed #321: --enable-clock-freeze freezed the splash screen Splash screen effect must use system time - not freezable sim time --- src/Main/fg_commands.cxx | 2 +- src/Main/renderer.cxx | 16 +++++++++++++--- src/Main/renderer.hxx | 2 ++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Main/fg_commands.cxx b/src/Main/fg_commands.cxx index fc70b43f1..6baed8315 100644 --- a/src/Main/fg_commands.cxx +++ b/src/Main/fg_commands.cxx @@ -317,7 +317,7 @@ do_resume (const SGPropertyNode * arg) static bool do_pause (const SGPropertyNode * arg) { - bool paused = fgGetBool("/sim/freeze/master",true); + bool paused = fgGetBool("/sim/freeze/master",true) || fgGetBool("/sim/freeze/clock",true); fgSetBool("/sim/freeze/master",!paused); fgSetBool("/sim/freeze/clock",!paused); if (fgGetBool("/sim/freeze/replay-state",false)) diff --git a/src/Main/renderer.cxx b/src/Main/renderer.cxx index 055a33aba..b57c4f53e 100644 --- a/src/Main/renderer.cxx +++ b/src/Main/renderer.cxx @@ -362,15 +362,18 @@ public: assert(dynamic_cast(node)); osg::Switch* sw = static_cast(node); - double t = globals->get_sim_time_sec(); - bool enabled = 0 < t; + bool enabled = scenery_enabled; sw->setValue(0, enabled); if (!enabled) return; traverse(node, nv); } + + static bool scenery_enabled; }; +bool FGScenerySwitchCallback::scenery_enabled = false; + // Sky structures SGSky *thesky; @@ -604,7 +607,14 @@ FGRenderer::update( bool refresh_camera_settings ) { if (_splash_screen_active) { // Fade out the splash screen - double sAlpha = SGMiscd::max(0, (2.5 - globals->get_sim_time_sec()) / 2.5); + const double fade_time = 0.8; + const double fade_steps_per_sec = 20; + double delay_time = SGMiscd::min(fade_time/fade_steps_per_sec, + (SGTimeStamp::now() - _splash_time).toSecs()); + _splash_time = SGTimeStamp::now(); + double sAlpha = fgGetDouble("/sim/startup/splash-alpha", 1.0); + sAlpha -= SGMiscd::max(0.0,delay_time/fade_time); + FGScenerySwitchCallback::scenery_enabled = (sAlpha<1.0); _splash_screen_active = (sAlpha > 0.0); fgSetDouble("/sim/startup/splash-alpha", sAlpha); } diff --git a/src/Main/renderer.hxx b/src/Main/renderer.hxx index 3d7133e02..42198b9f2 100644 --- a/src/Main/renderer.hxx +++ b/src/Main/renderer.hxx @@ -4,6 +4,7 @@ #include #include +#include #include @@ -85,6 +86,7 @@ protected: SGPropertyNode_ptr _xsize, _ysize; SGPropertyNode_ptr _panel_hotspots, _sim_delta_sec, _horizon_effect, _altitude_ft; SGPropertyNode_ptr _virtual_cockpit; + SGTimeStamp _splash_time; bool _splash_screen_active; }; From 69c483af8dff23124c39dcc370cb958d4dbec263 Mon Sep 17 00:00:00 2001 From: James Turner Date: Sat, 21 May 2011 14:06:58 +0100 Subject: [PATCH 9/9] Bump 'next' version to 2.3.0 - should have been done when 2.2.0 was branches, ooops. --- version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version b/version index ccbccc3dc..276cbf9e2 100644 --- a/version +++ b/version @@ -1 +1 @@ -2.2.0 +2.3.0