diff options
-rw-r--r-- | editor/plugins/visual_shader_editor_plugin.cpp | 22 | ||||
-rw-r--r-- | editor/plugins/visual_shader_editor_plugin.h | 1 |
2 files changed, 13 insertions, 10 deletions
diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp index 0bfe366a6d..55ff3fc3dd 100644 --- a/editor/plugins/visual_shader_editor_plugin.cpp +++ b/editor/plugins/visual_shader_editor_plugin.cpp @@ -2058,16 +2058,20 @@ void VisualShaderEditor::_show_preview_text() { preview_showed = !preview_showed; preview_vbox->set_visible(preview_showed); if (preview_showed) { - if (shader_error) { - error_text->set_visible(true); - } else { - error_text->set_visible(false); + if (pending_update_preview) { + _update_preview(); + pending_update_preview = false; } } } void VisualShaderEditor::_update_preview() { + if (!preview_showed) { + pending_update_preview = true; + return; + } + String code = visual_shader->get_code(); preview_text->set_text(code); @@ -2081,16 +2085,13 @@ void VisualShaderEditor::_update_preview() { } if (err != OK) { preview_text->set_line_as_marked(sl.get_error_line() - 1, true); - if (preview_showed) { - error_text->set_visible(true); - } + error_text->set_visible(true); + String text = "error(" + itos(sl.get_error_line()) + "): " + sl.get_error_text(); error_text->set_text(text); shader_error = true; } else { - if (preview_showed) { - error_text->set_visible(false); - } + error_text->set_visible(false); shader_error = false; } } @@ -2163,6 +2164,7 @@ VisualShaderEditor::VisualShaderEditor() { ShaderLanguage::get_keyword_list(&keyword_list); preview_showed = false; + pending_update_preview = false; shader_error = false; to_node = -1; diff --git a/editor/plugins/visual_shader_editor_plugin.h b/editor/plugins/visual_shader_editor_plugin.h index 5be214f9a9..a2e9516a6e 100644 --- a/editor/plugins/visual_shader_editor_plugin.h +++ b/editor/plugins/visual_shader_editor_plugin.h @@ -70,6 +70,7 @@ class VisualShaderEditor : public VBoxContainer { PanelContainer *error_panel; Label *error_label; + bool pending_update_preview; bool shader_error; VBoxContainer *preview_vbox; TextEdit *preview_text; |