diff --git a/modules/globebrowsing/src/renderableglobe.cpp b/modules/globebrowsing/src/renderableglobe.cpp index c9bca464c8..4a5df272b0 100644 --- a/modules/globebrowsing/src/renderableglobe.cpp +++ b/modules/globebrowsing/src/renderableglobe.cpp @@ -645,6 +645,50 @@ void RenderableGlobe::render(const RenderData& data, RendererTasks& rendererTask } void RenderableGlobe::update(const UpdateData& data) { + if (_localRenderer.program->isDirty()) { + _localRenderer.program->rebuildFromFile(); + + _localRenderer.program->setUniform("xSegments", _grid.xSegments); + + if (_debugProperties.showHeightResolution) { + _localRenderer.program->setUniform( + "vertexResolution", + glm::vec2(_grid.xSegments, _grid.ySegments) + ); + } + + ghoul::opengl::updateUniformLocations( + *_localRenderer.program, + _localRenderer.uniformCache, + { "skirtLength", "p01", "p11", "p00", "p10", "patchNormalModelSpace", + "patchNormalCameraSpace" } + ); + } + + if (_globalRenderer.program->isDirty()) { + _globalRenderer.program->rebuildFromFile(); + + _globalRenderer.program->setUniform("xSegments", _grid.xSegments); + + if (_debugProperties.showHeightResolution) { + _globalRenderer.program->setUniform( + "vertexResolution", + glm::vec2(_grid.xSegments, _grid.ySegments) + ); + } + // Ellipsoid Radius (Model Space) + _globalRenderer.program->setUniform( + "radiiSquared", + glm::vec3(_ellipsoid.radii() * _ellipsoid.radii()) + ); + + ghoul::opengl::updateUniformLocations( + *_globalRenderer.program, + _globalRenderer.uniformCache, + { "skirtLength", "minLatLon", "lonLatScalingFactor" } + ); + } + setBoundingSphere(static_cast( _ellipsoid.maximumRadius() * data.modelTransform.scale )); @@ -739,6 +783,12 @@ void RenderableGlobe::renderChunks(const RenderData& data, RendererTasks&) { ); } + const float dsf = static_cast( + _generalProperties.lodScaleFactor * _ellipsoid.minimumRadius() + ); + _globalRenderer.program->setUniform("distanceScaleFactor", dsf); + + _globalRenderer.updatedSinceLastCall = false; } @@ -755,6 +805,11 @@ void RenderableGlobe::renderChunks(const RenderData& data, RendererTasks&) { ); } + const float dsf = static_cast( + _generalProperties.lodScaleFactor * _ellipsoid.minimumRadius() + ); + _localRenderer.program->setUniform("distanceScaleFactor", dsf); + _localRenderer.updatedSinceLastCall = false; }