Skip to content

Commit

Permalink
#5532: Notify the preview about the material change, which will in tu…
Browse files Browse the repository at this point in the history
…rn notify its render system - changes of translation expressions can now immediately be seen
  • Loading branch information
codereader committed Mar 13, 2021
1 parent 3a90cce commit bf963b9
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 1 deletion.
3 changes: 3 additions & 0 deletions include/irender.h
Expand Up @@ -562,6 +562,9 @@ class RenderSystem

// Subscription to get notified as soon as the openGL extensions have been initialised
virtual sigc::signal<void> signal_extensionsInitialised() = 0;

// Notification about a material change, tries to refresh any constructed shaders basing on it
virtual void onMaterialChanged(const std::string& materialName) = 0;
};
typedef std::shared_ptr<RenderSystem> RenderSystemPtr;
typedef std::weak_ptr<RenderSystem> RenderSystemWeakPtr;
Expand Down
7 changes: 6 additions & 1 deletion radiant/ui/materials/MaterialEditor.cpp
Expand Up @@ -447,7 +447,7 @@ void MaterialEditor::setupMaterialStageProperties()

createExpressionBinding("MaterialStageTranslateX",
[](const IShaderLayer::Ptr& layer) { return layer->getTranslationExpression(0); },
[](const IEditableShaderLayer::Ptr& layer, const std::string& value) { layer->setTranslationExpressionFromString(0, value); });
[this](const IEditableShaderLayer::Ptr& layer, const std::string& value) { layer->setTranslationExpressionFromString(0, value); onMaterialChanged(); });
createExpressionBinding("MaterialStageTranslateY",
[](const IShaderLayer::Ptr& layer) { return layer->getTranslationExpression(1); },
[](const IEditableShaderLayer::Ptr& layer, const std::string& value) { layer->setTranslationExpressionFromString(1, value); });
Expand Down Expand Up @@ -1121,4 +1121,9 @@ void MaterialEditor::_onMaterialTypeChoice(wxCommandEvent& ev)
_material->setSurfaceType(shaders::getSurfaceTypeForString(selectedString.ToStdString()));
}

void MaterialEditor::onMaterialChanged()
{
_preview->onMaterialChanged();
}

}
2 changes: 2 additions & 0 deletions radiant/ui/materials/MaterialEditor.h
Expand Up @@ -99,6 +99,8 @@ class MaterialEditor :
void _onStageListSelectionChanged(wxDataViewEvent& ev);
void _onMaterialTypeChoice(wxCommandEvent& ev);

void onMaterialChanged();

// Shortcut
template<typename ObjectClass>
ObjectClass* getControl(const std::string& name)
Expand Down
8 changes: 8 additions & 0 deletions radiant/ui/materials/MaterialPreview.cpp
Expand Up @@ -102,6 +102,14 @@ void MaterialPreview::setMaterial(const MaterialPtr& material)
queueDraw();
}

void MaterialPreview::onMaterialChanged()
{
if (!_material) return;

_renderSystem->onMaterialChanged(_material->getName());
queueDraw();
}

bool MaterialPreview::onPreRender()
{
if (!_sceneIsReady)
Expand Down
2 changes: 2 additions & 0 deletions radiant/ui/materials/MaterialPreview.h
Expand Up @@ -38,6 +38,8 @@ class MaterialPreview :
const MaterialPtr& getMaterial();
void setMaterial(const MaterialPtr& material);

void onMaterialChanged();

protected:
bool canDrawGrid() override;
void setupSceneGraph() override;
Expand Down
14 changes: 14 additions & 0 deletions radiantcore/rendersystem/OpenGLRenderSystem.cpp
Expand Up @@ -261,6 +261,20 @@ void OpenGLRenderSystem::unrealise()
}
}

void OpenGLRenderSystem::onMaterialChanged(const std::string& materialName)
{
auto existingShader = _shaders.find(materialName);

if (existingShader == _shaders.end() || !_realised)
{
return;
}

// Re-realise this shader
existingShader->second->unrealise();
existingShader->second->realise(materialName);
}

GLProgramFactory& OpenGLRenderSystem::getGLProgramFactory()
{
return *_glProgramFactory;
Expand Down
2 changes: 2 additions & 0 deletions radiantcore/rendersystem/OpenGLRenderSystem.h
Expand Up @@ -69,6 +69,8 @@ class OpenGLRenderSystem
void realise() override;
void unrealise() override;

void onMaterialChanged(const std::string& materialName) override;

GLProgramFactory& getGLProgramFactory();

std::size_t getTime() const override;
Expand Down

0 comments on commit bf963b9

Please sign in to comment.