Skip to content

Commit

Permalink
Add "Inspect Native Shader Code" to shader resource and shader editor
Browse files Browse the repository at this point in the history
  • Loading branch information
tetrapod00 committed Sep 19, 2024
1 parent 0a4aedb commit b0663ce
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 1 deletion.
2 changes: 1 addition & 1 deletion doc/classes/Material.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
6 changes: 6 additions & 0 deletions doc/classes/Shader.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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" />
Expand Down
9 changes: 9 additions & 0 deletions editor/plugins/shader_editor_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -554,6 +555,13 @@ 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;
Expand Down Expand Up @@ -754,6 +762,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);
}

Expand Down
1 change: 1 addition & 0 deletions editor/plugins/shader_editor_plugin.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
11 changes: 11 additions & 0 deletions scene/resources/shader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,14 @@ String Shader::get_code() const {
return code;
}

void Shader::inspect_native_shader_code() {
SceneTree *st = Object::cast_to<SceneTree>(OS::get_singleton()->get_main_loop());

Check failure on line 128 in scene/resources/shader.cpp

View workflow job for this annotation

GitHub Actions / 🐧 Linux / Template w/ Mono (target=template_release, tests=yes)

'SceneTree' was not declared in this scope

Check failure on line 128 in scene/resources/shader.cpp

View workflow job for this annotation

GitHub Actions / 🐧 Linux / Template w/ Mono (target=template_release, tests=yes)

'st' was not declared in this scope; did you mean 'set'?

Check failure on line 128 in scene/resources/shader.cpp

View workflow job for this annotation

GitHub Actions / 🐧 Linux / Template w/ Mono (target=template_release, tests=yes)

no matching function for call to 'Shader::cast_to<SceneTree>(MainLoop*)'

Check failure on line 128 in scene/resources/shader.cpp

View workflow job for this annotation

GitHub Actions / 🐧 Linux / Minimal template (target=template_release, tests=yes, everything disabled)

'SceneTree' was not declared in this scope

Check failure on line 128 in scene/resources/shader.cpp

View workflow job for this annotation

GitHub Actions / 🐧 Linux / Minimal template (target=template_release, tests=yes, everything disabled)

'st' was not declared in this scope; did you mean 'set'?

Check failure on line 128 in scene/resources/shader.cpp

View workflow job for this annotation

GitHub Actions / 🐧 Linux / Minimal template (target=template_release, tests=yes, everything disabled)

no matching function for call to 'Shader::cast_to<SceneTree>(MainLoop*)'

Check failure on line 128 in scene/resources/shader.cpp

View workflow job for this annotation

GitHub Actions / 🏁 Windows / Template (target=template_release, tests=yes)

'SceneTree': undeclared identifier

Check failure on line 128 in scene/resources/shader.cpp

View workflow job for this annotation

GitHub Actions / 🏁 Windows / Template (target=template_release, tests=yes)

'st': undeclared identifier

Check failure on line 128 in scene/resources/shader.cpp

View workflow job for this annotation

GitHub Actions / 🏁 Windows / Template (target=template_release, tests=yes)

'SceneTree': undeclared identifier

Check failure on line 128 in scene/resources/shader.cpp

View workflow job for this annotation

GitHub Actions / 🏁 Windows / Template (target=template_release, tests=yes)

'Object::cast_to': no matching overloaded function found
RID _shader = get_rid();
if (st && _shader.is_valid()) {

Check failure on line 130 in scene/resources/shader.cpp

View workflow job for this annotation

GitHub Actions / 🏁 Windows / Template (target=template_release, tests=yes)

'st': undeclared identifier
st->call_group_flags(SceneTree::GROUP_CALL_DEFERRED, "_native_shader_source_visualizer", "_inspect_shader", _shader);

Check failure on line 131 in scene/resources/shader.cpp

View workflow job for this annotation

GitHub Actions / 🐧 Linux / Template w/ Mono (target=template_release, tests=yes)

'SceneTree' is not a class, namespace, or enumeration

Check failure on line 131 in scene/resources/shader.cpp

View workflow job for this annotation

GitHub Actions / 🐧 Linux / Minimal template (target=template_release, tests=yes, everything disabled)

'SceneTree' is not a class, namespace, or enumeration

Check failure on line 131 in scene/resources/shader.cpp

View workflow job for this annotation

GitHub Actions / 🏁 Windows / Template (target=template_release, tests=yes)

'st': undeclared identifier

Check failure on line 131 in scene/resources/shader.cpp

View workflow job for this annotation

GitHub Actions / 🏁 Windows / Template (target=template_release, tests=yes)

'SceneTree': is not a class or namespace name

Check failure on line 131 in scene/resources/shader.cpp

View workflow job for this annotation

GitHub Actions / 🏁 Windows / Template (target=template_release, tests=yes)

'GROUP_CALL_DEFERRED': undeclared identifier
}
}

void Shader::get_shader_uniform_list(List<PropertyInfo> *p_params, bool p_get_groups) const {
_update_shader();

Expand Down Expand Up @@ -248,6 +256,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);
Expand Down
2 changes: 2 additions & 0 deletions scene/resources/shader.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ class Shader : public Resource {
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);
Expand Down

0 comments on commit b0663ce

Please sign in to comment.