From b2ab4f7afd3d6213c073215d1e31b4c509c8a0e1 Mon Sep 17 00:00:00 2001 From: codereader Date: Sat, 23 Apr 2022 09:07:54 +0200 Subject: [PATCH] #5945: Reduce code duplication --- radiantcore/entity/light/LightNode.cpp | 47 +++++++++++--------------- radiantcore/entity/light/LightNode.h | 3 ++ 2 files changed, 23 insertions(+), 27 deletions(-) diff --git a/radiantcore/entity/light/LightNode.cpp b/radiantcore/entity/light/LightNode.cpp index 07192104db..bb52171619 100644 --- a/radiantcore/entity/light/LightNode.cpp +++ b/radiantcore/entity/light/LightNode.cpp @@ -139,10 +139,7 @@ void LightNode::transformChanged() { EntityNode::transformChanged(); - _renderableOctagon.queueUpdate(); - _renderableOctagonOutline.queueUpdate(); - _renderableLightVolume.queueUpdate(); - _renderableVertices.queueUpdate(); + updateRenderables(); } float LightNode::getShaderParm(int parmNum) const @@ -159,10 +156,7 @@ void LightNode::onRemoveFromScene(scene::IMapRootNode& root) setSelectedComponents(false, selection::ComponentSelectionMode::Vertex); setSelectedComponents(false, selection::ComponentSelectionMode::Face); - _renderableOctagon.clear(); - _renderableOctagonOutline.clear(); - _renderableLightVolume.clear(); - _renderableVertices.clear(); + clearRenderables(); } void LightNode::testSelect(Selector& selector, SelectionTest& test) @@ -389,10 +383,7 @@ void LightNode::setRenderSystem(const RenderSystemPtr& renderSystem) EntityNode::setRenderSystem(renderSystem); // Clear the geometry from any previous shader - _renderableOctagon.clear(); - _renderableOctagonOutline.clear(); - _renderableLightVolume.clear(); - _renderableVertices.clear(); + clearRenderables(); m_shader.setRenderSystem(renderSystem); @@ -402,9 +393,6 @@ void LightNode::setRenderSystem(const RenderSystemPtr& renderSystem) auto renderColour = getEntityColour(); _crystalOutlineShader = renderSystem->capture(ColourShaderType::CameraAndOrthoViewOutline, renderColour); - - // Crystal fill shader is transparent - renderColour.w() = 0.3; _crystalFillShader = renderSystem->capture(ColourShaderType::CameraTranslucent, renderColour); _renderableVertices.queueUpdate(); } @@ -519,10 +507,7 @@ void LightNode::_onTransformationChanged() evaluateTransform(); updateOrigin(); - _renderableOctagon.queueUpdate(); - _renderableOctagonOutline.queueUpdate(); - _renderableLightVolume.queueUpdate(); - _renderableVertices.queueUpdate(); + updateRenderables(); } void LightNode::_applyTransformation() @@ -566,17 +551,11 @@ void LightNode::onVisibilityChanged(bool isVisibleNow) if (isVisibleNow) { - _renderableOctagon.queueUpdate(); - _renderableOctagonOutline.queueUpdate(); - _renderableLightVolume.queueUpdate(); - _renderableVertices.queueUpdate(); + updateRenderables(); } else { - _renderableLightVolume.clear(); - _renderableOctagon.clear(); - _renderableOctagonOutline.clear(); - _renderableVertices.clear(); + clearRenderables(); } } @@ -1256,10 +1235,24 @@ const IRenderEntity& LightNode::getLightEntity() const } void LightNode::onColourKeyChanged(const std::string& value) +{ + updateRenderables(); +} + +void LightNode::updateRenderables() { _renderableOctagon.queueUpdate(); _renderableOctagonOutline.queueUpdate(); _renderableLightVolume.queueUpdate(); + _renderableVertices.queueUpdate(); +} + +void LightNode::clearRenderables() +{ + _renderableOctagon.clear(); + _renderableOctagonOutline.clear(); + _renderableLightVolume.clear(); + _renderableVertices.clear(); } } // namespace entity diff --git a/radiantcore/entity/light/LightNode.h b/radiantcore/entity/light/LightNode.h index 82c1bd6396..3889e63d39 100644 --- a/radiantcore/entity/light/LightNode.h +++ b/radiantcore/entity/light/LightNode.h @@ -256,6 +256,9 @@ class LightNode : void updateProjection() const; bool useStartEnd() const; + void updateRenderables(); + void clearRenderables(); + public: // RendererLight implementation const IRenderEntity& getLightEntity() const override;