From 3599c3aecfc087a0970e2ec3252144148f2b8fbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Lemaire?= Date: Wed, 19 Aug 2015 19:28:36 +0200 Subject: [PATCH] Fixed clouds layers being deleted in scenery by opengl renderer --- src/render/opengl/OpenGLRenderer.cpp | 3 ++- src/render/software/CloudsRenderer.cpp | 10 ++++++++-- src/render/software/CloudsRenderer.h | 6 ++++++ src/render/software/SoftwareRenderer.cpp | 5 ----- src/render/software/SoftwareRenderer.h | 8 ++------ 5 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/render/opengl/OpenGLRenderer.cpp b/src/render/opengl/OpenGLRenderer.cpp index 0ff88af..44e415c 100644 --- a/src/render/opengl/OpenGLRenderer.cpp +++ b/src/render/opengl/OpenGLRenderer.cpp @@ -6,6 +6,7 @@ #include "OpenGLSkybox.h" #include "OpenGLWater.h" #include "OpenGLTerrain.h" +#include "CloudsRenderer.h" #include "Scenery.h" #include "LightingManager.h" #include "Logs.h" @@ -57,7 +58,7 @@ void OpenGLRenderer::initialize() prepare(); - disableClouds(); + getCloudsRenderer()->setEnabled(false); getLightingManager()->setSpecularity(false); skybox->initialize(); diff --git a/src/render/software/CloudsRenderer.cpp b/src/render/software/CloudsRenderer.cpp index 79df79f..d7aae61 100644 --- a/src/render/software/CloudsRenderer.cpp +++ b/src/render/software/CloudsRenderer.cpp @@ -17,6 +17,7 @@ CloudsRenderer::CloudsRenderer(SoftwareRenderer* parent): parent(parent) { + enabled = true; fake_renderer = new BaseCloudLayerRenderer(parent); CloudLayerDefinition* fake_layer = new CloudLayerDefinition(NULL); @@ -39,6 +40,11 @@ CloudsRenderer::~CloudsRenderer() delete fake_model; } +void CloudsRenderer::setEnabled(bool enabled) +{ + this->enabled = enabled; +} + void CloudsRenderer::update() { for (auto renderer : layer_renderers) @@ -138,7 +144,7 @@ Color CloudsRenderer::getColor(const Vector3 &eye, const Vector3 &location, cons CloudsDefinition* definition = parent->getScenery()->getClouds(); int n = definition->count(); - if (n < 1) + if (not enabled or n < 1) { return base; } @@ -164,7 +170,7 @@ bool CloudsRenderer::applyLightFilter(LightComponent &light, const Vector3 &at) CloudsDefinition* definition = parent->getScenery()->getClouds(); int n = definition->count(); - if (n < 1) + if (not enabled or n < 1) { return true; } diff --git a/src/render/software/CloudsRenderer.h b/src/render/software/CloudsRenderer.h index 59c4695..fa2b515 100644 --- a/src/render/software/CloudsRenderer.h +++ b/src/render/software/CloudsRenderer.h @@ -17,6 +17,11 @@ public: CloudsRenderer(SoftwareRenderer* parent); virtual ~CloudsRenderer(); + /** + * Enable or disable the whole cloud rendering. + */ + void setEnabled(bool enabled); + /*! * \brief Update the renderer with the bound scenery. * @@ -58,6 +63,7 @@ public: */ virtual bool applyLightFilter(LightComponent &light, const Vector3 &at) override; private: + bool enabled; SoftwareRenderer* parent; std::vector layer_renderers; diff --git a/src/render/software/SoftwareRenderer.cpp b/src/render/software/SoftwareRenderer.cpp index 2b9519a..dcca450 100644 --- a/src/render/software/SoftwareRenderer.cpp +++ b/src/render/software/SoftwareRenderer.cpp @@ -86,11 +86,6 @@ void SoftwareRenderer::prepare() //fluid_medium->registerMedium(water_renderer); } -void SoftwareRenderer::disableClouds() -{ - scenery->getClouds()->clear(); -} - void SoftwareRenderer::disableAtmosphere() { LightComponent light; diff --git a/src/render/software/SoftwareRenderer.h b/src/render/software/SoftwareRenderer.h index 739e4d5..8334101 100644 --- a/src/render/software/SoftwareRenderer.h +++ b/src/render/software/SoftwareRenderer.h @@ -38,16 +38,12 @@ public: */ virtual void prepare(); - /*! - * \brief Disable the clouds feature. - * - * This toggle is permanent, provided the clouds part of the sceney is not changed. - */ - void disableClouds(); /*! * \brief Disable atmosphere and sky lighting, replacing it by static lights. * * This function needs to be called after each prepare(). + * + * WARNING : This method changes the scenery attached to the renderer ! */ void disableAtmosphere(); void disableAtmosphere(const std::vector &lights);