You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-12-02 16:48:55 +00:00
Separate visual shader code out of shader editor plugin and dialog
This commit is contained in:
@@ -40,7 +40,8 @@
|
||||
#include "editor/settings/editor_command_palette.h"
|
||||
#include "editor/shader/shader_create_dialog.h"
|
||||
#include "editor/shader/text_shader_editor.h"
|
||||
#include "editor/shader/visual_shader_editor_plugin.h"
|
||||
#include "editor/shader/text_shader_language_plugin.h"
|
||||
#include "editor/shader/visual_shader_language_plugin.h"
|
||||
#include "editor/themes/editor_scale.h"
|
||||
#include "scene/gui/item_list.h"
|
||||
#include "scene/gui/tab_container.h"
|
||||
@@ -151,8 +152,12 @@ void ShaderEditorPlugin::edit(Object *p_object) {
|
||||
}
|
||||
}
|
||||
es.shader_inc = Ref<ShaderInclude>(shader_include);
|
||||
es.shader_editor = memnew(TextShaderEditor);
|
||||
es.shader_editor->edit_shader_include(shader_include);
|
||||
for (Ref<EditorShaderLanguagePlugin> shader_lang : EditorShaderLanguagePlugin::get_shader_languages_read_only()) {
|
||||
if (shader_lang->handles_shader_include(es.shader_inc)) {
|
||||
es.shader_editor = shader_lang->edit_shader_include(es.shader_inc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// If it's not a ShaderInclude, check for Shader.
|
||||
Shader *shader = Object::cast_to<Shader>(p_object);
|
||||
@@ -168,15 +173,15 @@ void ShaderEditorPlugin::edit(Object *p_object) {
|
||||
}
|
||||
// If we did not return, the shader needs to be opened in a new shader editor.
|
||||
es.shader = Ref<Shader>(shader);
|
||||
Ref<VisualShader> vs = es.shader;
|
||||
if (vs.is_valid()) {
|
||||
es.shader_editor = memnew(VisualShaderEditor);
|
||||
} else {
|
||||
es.shader_editor = memnew(TextShaderEditor);
|
||||
for (Ref<EditorShaderLanguagePlugin> shader_lang : EditorShaderLanguagePlugin::get_shader_languages_read_only()) {
|
||||
if (shader_lang->handles_shader(es.shader)) {
|
||||
es.shader_editor = shader_lang->edit_shader(es.shader);
|
||||
break;
|
||||
}
|
||||
}
|
||||
es.shader_editor->edit_shader(es.shader);
|
||||
}
|
||||
|
||||
ERR_FAIL_NULL_MSG(es.shader_editor, "ShaderEditorPlugin: Unable to edit shader because no suitable editor was found.");
|
||||
// TextShaderEditor-specific setup code.
|
||||
TextShaderEditor *text_shader_editor = Object::cast_to<TextShaderEditor>(es.shader_editor);
|
||||
if (text_shader_editor) {
|
||||
@@ -511,12 +516,12 @@ void ShaderEditorPlugin::_menu_item_pressed(int p_index) {
|
||||
switch (p_index) {
|
||||
case FILE_MENU_NEW: {
|
||||
String base_path = FileSystemDock::get_singleton()->get_current_path().get_base_dir();
|
||||
shader_create_dialog->config(base_path.path_join("new_shader"), false, false, 0);
|
||||
shader_create_dialog->config(base_path.path_join("new_shader"), false, false, "Shader");
|
||||
shader_create_dialog->popup_centered();
|
||||
} break;
|
||||
case FILE_MENU_NEW_INCLUDE: {
|
||||
String base_path = FileSystemDock::get_singleton()->get_current_path().get_base_dir();
|
||||
shader_create_dialog->config(base_path.path_join("new_shader"), false, false, 2);
|
||||
shader_create_dialog->config(base_path.path_join("new_shader"), false, false, "ShaderInclude");
|
||||
shader_create_dialog->popup_centered();
|
||||
} break;
|
||||
case FILE_MENU_OPEN: {
|
||||
@@ -927,9 +932,18 @@ ShaderEditorPlugin::ShaderEditorPlugin() {
|
||||
files_split->add_child(shader_create_dialog);
|
||||
shader_create_dialog->connect("shader_created", callable_mp(this, &ShaderEditorPlugin::_shader_created));
|
||||
shader_create_dialog->connect("shader_include_created", callable_mp(this, &ShaderEditorPlugin::_shader_include_created));
|
||||
|
||||
Ref<TextShaderLanguagePlugin> text_shader_lang;
|
||||
text_shader_lang.instantiate();
|
||||
EditorShaderLanguagePlugin::register_shader_language(text_shader_lang);
|
||||
|
||||
Ref<VisualShaderLanguagePlugin> visual_shader_lang;
|
||||
visual_shader_lang.instantiate();
|
||||
EditorShaderLanguagePlugin::register_shader_language(visual_shader_lang);
|
||||
}
|
||||
|
||||
ShaderEditorPlugin::~ShaderEditorPlugin() {
|
||||
EditorShaderLanguagePlugin::clear_registered_shader_languages();
|
||||
memdelete(file_menu);
|
||||
memdelete(make_floating);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user