X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Frenderer.cxx;h=32d7953380b417271fbedd5aead6ba626d1ae3df;hb=b587400846111cc4d6713dcdd38b715c97923d5a;hp=5e9dba5a4d389aeb642a6235f18509f789289ed5;hpb=53660d36996d3eea6a171c8f4f0a37237e8c97c7;p=flightgear.git diff --git a/src/Main/renderer.cxx b/src/Main/renderer.cxx index 5e9dba5a4..32d795338 100644 --- a/src/Main/renderer.cxx +++ b/src/Main/renderer.cxx @@ -47,6 +47,7 @@ #include #include #include +#include #include #include @@ -138,6 +139,7 @@ public: { // Dynamic stuff, do not store geometry setUseDisplayList(false); + setDataVariance(Object::DYNAMIC); osg::StateSet* stateSet = getOrCreateStateSet(); stateSet->setRenderBinDetails(1001, "RenderBin"); @@ -183,6 +185,7 @@ public: { // Dynamic stuff, do not store geometry setUseDisplayList(false); + setDataVariance(Object::DYNAMIC); osg::StateSet* stateSet = getOrCreateStateSet(); stateSet->setRenderBinDetails(1000, "RenderBin"); @@ -552,6 +555,10 @@ FGRenderer::init( void ) // as the rest of the scene. This may not be true in practice. mRealRoot->addChild(thesky->getCloudRoot()); mRealRoot->addChild(FGCreateRedoutNode()); + // Attach empty program to the scene root so that shader programs + // don't leak into state sets (effects) that shouldn't have one. + stateSet = mRealRoot->getOrCreateStateSet(); + stateSet->setAttributeAndModes(new osg::Program, osg::StateAttribute::ON); } @@ -651,42 +658,16 @@ FGRenderer::update( bool refresh_camera_settings ) { } SGSkyState sstate; - - SGVec3d viewPos = current__view->getViewPosition(); - sstate.view_pos = toVec3f(viewPos); - SGGeod geodViewPos = SGGeod::fromCart(viewPos); - SGGeod geodZeroViewPos = SGGeod::fromGeodM(geodViewPos, 0); - sstate.zero_elev = toVec3f(SGVec3d::fromGeod(geodZeroViewPos)); - SGQuatd hlOr = SGQuatd::fromLonLat(geodViewPos); - sstate.view_up = toVec3f(hlOr.backTransform(-SGVec3d::e3())); - sstate.lon = geodViewPos.getLongitudeRad(); - sstate.lat = geodViewPos.getLatitudeRad(); - sstate.alt = geodViewPos.getElevationM(); + sstate.pos = current__view->getViewPosition(); + sstate.pos_geod = current__view->getPosition(); + sstate.ori = current__view->getViewOrientation(); sstate.spin = l->get_sun_rotation(); sstate.gst = globals->get_time_params()->getGst(); sstate.sun_dist = 50000.0 * sun_horiz_eff; sstate.moon_dist = 40000.0 * moon_horiz_eff; sstate.sun_angle = l->get_sun_angle(); - - /* - SG_LOG( SG_GENERAL, SG_BULK, "thesky->repaint() sky_color = " - << l->sky_color()[0] << " " - << l->sky_color()[1] << " " - << l->sky_color()[2] << " " - << l->sky_color()[3] ); - SG_LOG( SG_GENERAL, SG_BULK, " fog = " - << l->fog_color()[0] << " " - << l->fog_color()[1] << " " - << l->fog_color()[2] << " " - << l->fog_color()[3] ); - SG_LOG( SG_GENERAL, SG_BULK, - " sun_angle = " << l->sun_angle - << " moon_angle = " << l->moon_angle ); - */ - SGSkyColor scolor; - scolor.sky_color = SGVec3f(l->sky_color().data()); scolor.adj_sky_color = SGVec3f(l->adj_sky_color().data()); scolor.fog_color = SGVec3f(l->adj_fog_color().data());