From 74bd3448b83306bb3597ec402987ed09085a046b Mon Sep 17 00:00:00 2001 From: codereader Date: Thu, 25 Mar 2021 06:53:33 +0100 Subject: [PATCH] #5565: MaterialPreview is automatically refreshing its view when the material is changed. Right now nothing is happening since the signal in CSHader is not emitted by anything. --- radiant/ui/materials/editor/MaterialEditor.cpp | 2 -- radiant/ui/materials/editor/MaterialPreview.cpp | 12 +++++++++--- radiant/ui/materials/editor/MaterialPreview.h | 5 +++-- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/radiant/ui/materials/editor/MaterialEditor.cpp b/radiant/ui/materials/editor/MaterialEditor.cpp index 307ac446ba..e24cf224c8 100644 --- a/radiant/ui/materials/editor/MaterialEditor.cpp +++ b/radiant/ui/materials/editor/MaterialEditor.cpp @@ -2045,8 +2045,6 @@ void MaterialEditor::_onSortRequestChanged(wxCommandEvent& ev) void MaterialEditor::onMaterialChanged() { - _preview->onMaterialChanged(); - updateMaterialButtonSensitivity(); } diff --git a/radiant/ui/materials/editor/MaterialPreview.cpp b/radiant/ui/materials/editor/MaterialPreview.cpp index 90e4cdc14c..a1985286a7 100644 --- a/radiant/ui/materials/editor/MaterialPreview.cpp +++ b/radiant/ui/materials/editor/MaterialPreview.cpp @@ -121,7 +121,16 @@ void MaterialPreview::setMaterial(const MaterialPtr& material) { bool hadMaterial = _material != nullptr; + _materialChanged.disconnect(); + _material = material; + + if (_material) + { + _materialChanged = _material->sig_materialChanged().connect( + sigc::mem_fun(this, &MaterialPreview::onMaterialChanged)); + } + _sceneIsReady = false; if (_model) @@ -147,9 +156,6 @@ void MaterialPreview::setMaterial(const MaterialPtr& material) void MaterialPreview::onMaterialChanged() { - if (!_material) return; - - _renderSystem->onMaterialChanged(_material->getName()); queueDraw(); } diff --git a/radiant/ui/materials/editor/MaterialPreview.h b/radiant/ui/materials/editor/MaterialPreview.h index f1a77f53aa..fa4410e80e 100644 --- a/radiant/ui/materials/editor/MaterialPreview.h +++ b/radiant/ui/materials/editor/MaterialPreview.h @@ -1,5 +1,6 @@ #pragma once +#include #include "ishaders.h" #include "modelskin.h" #include "scene/BasicRootNode.h" @@ -16,6 +17,7 @@ class MaterialPreview : bool _sceneIsReady; MaterialPtr _material; + sigc::connection _materialChanged; scene::IMapRootNodePtr _rootNode; @@ -41,14 +43,13 @@ class MaterialPreview : const MaterialPtr& getMaterial(); void setMaterial(const MaterialPtr& material); - void onMaterialChanged(); - protected: bool canDrawGrid() override; void setupSceneGraph() override; RenderStateFlags getRenderFlagsFill() override; private: + void onMaterialChanged(); bool onPreRender() override; void prepareScene(); void setupToolbar();