Переглянути джерело

Add "Inspect Native Shader Code" to shader resource and shader editor

tetrapod00 10 місяців тому
батько
коміт
12d2c05936

+ 1 - 1
doc/classes/Material.xml

@@ -45,7 +45,7 @@
 		<method name="inspect_native_shader_code">
 			<return type="void" />
 			<description>
-				Only available when running in the editor. Opens a popup that visualizes the generated shader code, including all variants and internal shader code.
+				Only available when running in the editor. Opens a popup that visualizes the generated shader code, including all variants and internal shader code. See also [method Shader.inspect_native_shader_code].
 			</description>
 		</method>
 	</methods>

+ 6 - 0
doc/classes/Shader.xml

@@ -35,6 +35,12 @@
 				If argument [param get_groups] is true, parameter grouping hints will be provided.
 			</description>
 		</method>
+		<method name="inspect_native_shader_code">
+			<return type="void" />
+			<description>
+				Only available when running in the editor. Opens a popup that visualizes the generated shader code, including all variants and internal shader code. See also [method Material.inspect_native_shader_code].
+			</description>
+		</method>
 		<method name="set_default_texture_parameter">
 			<return type="void" />
 			<param index="0" name="name" type="StringName" />

+ 8 - 0
editor/plugins/shader_editor_plugin.cpp

@@ -396,6 +396,7 @@ void ShaderEditorPlugin::_setup_popup_menu(PopupMenuType p_type, PopupMenu *p_me
 	if (p_type == FILE) {
 		p_menu->add_separator();
 		p_menu->add_item(TTR("Open File in Inspector"), FILE_INSPECT);
+		p_menu->add_item(TTR("Inspect Native Shader Code..."), FILE_INSPECT_NATIVE_SHADER_CODE);
 		p_menu->add_separator();
 		p_menu->add_shortcut(ED_SHORTCUT("shader_editor/close_file", TTR("Close File"), KeyModifierMask::CMD_OR_CTRL | Key::W), FILE_CLOSE);
 	} else {
@@ -554,6 +555,12 @@ void ShaderEditorPlugin::_menu_item_pressed(int p_index) {
 				EditorNode::get_singleton()->push_item(edited_shaders[index].shader_inc.ptr());
 			}
 		} break;
+		case FILE_INSPECT_NATIVE_SHADER_CODE: {
+			int index = shader_tabs->get_current_tab();
+			if (edited_shaders[index].shader.is_valid()) {
+				edited_shaders[index].shader->inspect_native_shader_code();
+			}
+		} break;
 		case FILE_CLOSE: {
 			_close_shader(shader_tabs->get_current_tab());
 		} break;
@@ -754,6 +761,7 @@ void ShaderEditorPlugin::_set_file_specific_items_disabled(bool p_disabled) {
 	file_popup_menu->set_item_disabled(file_popup_menu->get_item_index(FILE_SAVE), p_disabled);
 	file_popup_menu->set_item_disabled(file_popup_menu->get_item_index(FILE_SAVE_AS), p_disabled);
 	file_popup_menu->set_item_disabled(file_popup_menu->get_item_index(FILE_INSPECT), p_disabled);
+	file_popup_menu->set_item_disabled(file_popup_menu->get_item_index(FILE_INSPECT_NATIVE_SHADER_CODE), p_disabled);
 	file_popup_menu->set_item_disabled(file_popup_menu->get_item_index(FILE_CLOSE), p_disabled);
 }
 

+ 1 - 0
editor/plugins/shader_editor_plugin.h

@@ -69,6 +69,7 @@ class ShaderEditorPlugin : public EditorPlugin {
 		FILE_SAVE,
 		FILE_SAVE_AS,
 		FILE_INSPECT,
+		FILE_INSPECT_NATIVE_SHADER_CODE,
 		FILE_CLOSE,
 		CLOSE_ALL,
 		CLOSE_OTHER_TABS,

+ 12 - 0
scene/resources/shader.cpp

@@ -32,6 +32,7 @@
 #include "shader.compat.inc"
 
 #include "core/io/file_access.h"
+#include "scene/main/scene_tree.h"
 #include "servers/rendering/shader_language.h"
 #include "servers/rendering/shader_preprocessor.h"
 #include "servers/rendering_server.h"
@@ -124,6 +125,14 @@ String Shader::get_code() const {
 	return code;
 }
 
+void Shader::inspect_native_shader_code() {
+	SceneTree *st = SceneTree::get_singleton();
+	RID _shader = get_rid();
+	if (st && _shader.is_valid()) {
+		st->call_group_flags(SceneTree::GROUP_CALL_DEFERRED, "_native_shader_source_visualizer", "_inspect_shader", _shader);
+	}
+}
+
 void Shader::get_shader_uniform_list(List<PropertyInfo> *p_params, bool p_get_groups) const {
 	_update_shader();
 
@@ -248,6 +257,9 @@ void Shader::_bind_methods() {
 
 	ClassDB::bind_method(D_METHOD("get_shader_uniform_list", "get_groups"), &Shader::_get_shader_uniform_list, DEFVAL(false));
 
+	ClassDB::bind_method(D_METHOD("inspect_native_shader_code"), &Shader::inspect_native_shader_code);
+	ClassDB::set_method_flags(get_class_static(), _scs_create("inspect_native_shader_code"), METHOD_FLAGS_DEFAULT | METHOD_FLAG_EDITOR);
+
 	ADD_PROPERTY(PropertyInfo(Variant::STRING, "code", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_code", "get_code");
 
 	BIND_ENUM_CONSTANT(MODE_SPATIAL);

+ 2 - 0
scene/resources/shader.h

@@ -84,6 +84,8 @@ public:
 	void set_code(const String &p_code);
 	String get_code() const;
 
+	void inspect_native_shader_code();
+
 	void get_shader_uniform_list(List<PropertyInfo> *p_params, bool p_get_groups = false) const;
 
 	void set_default_texture_parameter(const StringName &p_name, const Ref<Texture> &p_texture, int p_index = 0);