Merge pull request #85017 from Geometror/vs-redesign
Redesign the graph editor for visual shaders
This commit is contained in:
commit
213c835cde
@ -445,6 +445,66 @@
|
||||
The color to use for the TileMap editor's grid.
|
||||
[b]Note:[/b] Only effective if [member editors/tiles_editor/display_grid] is [code]true[/code].
|
||||
</member>
|
||||
<member name="editors/visual_editors/category_colors/color_color" type="Color" setter="" getter="">
|
||||
The color of a graph node's header when it belongs to the "Color" category.
|
||||
</member>
|
||||
<member name="editors/visual_editors/category_colors/conditional_color" type="Color" setter="" getter="">
|
||||
The color of a graph node's header when it belongs to the "Conditional" category.
|
||||
</member>
|
||||
<member name="editors/visual_editors/category_colors/input_color" type="Color" setter="" getter="">
|
||||
The color of a graph node's header when it belongs to the "Input" category.
|
||||
</member>
|
||||
<member name="editors/visual_editors/category_colors/output_color" type="Color" setter="" getter="">
|
||||
The color of a graph node's header when it belongs to the "Output" category.
|
||||
</member>
|
||||
<member name="editors/visual_editors/category_colors/particle_color" type="Color" setter="" getter="">
|
||||
The color of a graph node's header when it belongs to the "Particle" category.
|
||||
</member>
|
||||
<member name="editors/visual_editors/category_colors/scalar_color" type="Color" setter="" getter="">
|
||||
The color of a graph node's header when it belongs to the "Scalar" category.
|
||||
</member>
|
||||
<member name="editors/visual_editors/category_colors/special_color" type="Color" setter="" getter="">
|
||||
The color of a graph node's header when it belongs to the "Special" category.
|
||||
</member>
|
||||
<member name="editors/visual_editors/category_colors/textures_color" type="Color" setter="" getter="">
|
||||
The color of a graph node's header when it belongs to the "Textures" category.
|
||||
</member>
|
||||
<member name="editors/visual_editors/category_colors/transform_color" type="Color" setter="" getter="">
|
||||
The color of a graph node's header when it belongs to the "Transform" category.
|
||||
</member>
|
||||
<member name="editors/visual_editors/category_colors/utility_color" type="Color" setter="" getter="">
|
||||
The color of a graph node's header when it belongs to the "Utility" category.
|
||||
</member>
|
||||
<member name="editors/visual_editors/category_colors/vector_color" type="Color" setter="" getter="">
|
||||
The color of a graph node's header when it belongs to the "Vector" category.
|
||||
</member>
|
||||
<member name="editors/visual_editors/color_theme" type="String" setter="" getter="">
|
||||
The color theme to use in the visual shader editor.
|
||||
</member>
|
||||
<member name="editors/visual_editors/connection_colors/boolean_color" type="Color" setter="" getter="">
|
||||
The color of a port/connection of boolean type.
|
||||
</member>
|
||||
<member name="editors/visual_editors/connection_colors/sampler_color" type="Color" setter="" getter="">
|
||||
The color of a port/connection of sampler type.
|
||||
</member>
|
||||
<member name="editors/visual_editors/connection_colors/scalar_color" type="Color" setter="" getter="">
|
||||
The color of a port/connection of scalar type (float, int, unsigned int).
|
||||
</member>
|
||||
<member name="editors/visual_editors/connection_colors/transform_color" type="Color" setter="" getter="">
|
||||
The color of a port/connection of transform type.
|
||||
</member>
|
||||
<member name="editors/visual_editors/connection_colors/vector2_color" type="Color" setter="" getter="">
|
||||
The color of a port/connection of Vector2 type.
|
||||
</member>
|
||||
<member name="editors/visual_editors/connection_colors/vector3_color" type="Color" setter="" getter="">
|
||||
The color of a port/connection of Vector3 type.
|
||||
</member>
|
||||
<member name="editors/visual_editors/connection_colors/vector4_color" type="Color" setter="" getter="">
|
||||
The color of a port/connection of Vector4 type.
|
||||
</member>
|
||||
<member name="editors/visual_editors/grid_pattern" type="int" setter="" getter="">
|
||||
The pattern used for the background grid.
|
||||
</member>
|
||||
<member name="editors/visual_editors/lines_curvature" type="float" setter="" getter="">
|
||||
The curvature to use for connection lines in the visual shader editor. Higher values will make connection lines appear more curved, with values above [code]0.5[/code] resulting in more "angular" turns in the middle of connection lines.
|
||||
</member>
|
||||
|
@ -768,8 +768,13 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
|
||||
_initial_set("editors/shader_editor/behavior/files/restore_shaders_on_load", true);
|
||||
|
||||
// Visual editors
|
||||
EDITOR_SETTING(Variant::STRING, PROPERTY_HINT_ENUM, "editors/visual_editors/color_theme", "Default", "Default,Legacy,Custom")
|
||||
|
||||
_load_default_visual_shader_editor_theme();
|
||||
|
||||
EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/visual_editors/minimap_opacity", 0.85, "0.0,1.0,0.01")
|
||||
EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/visual_editors/lines_curvature", 0.5, "0.0,1.0,0.01")
|
||||
EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "editors/visual_editors/grid_pattern", 1, "Lines,Dots")
|
||||
EDITOR_SETTING(Variant::INT, PROPERTY_HINT_RANGE, "editors/visual_editors/visual_shader/port_preview_size", 160, "100,400,0.01")
|
||||
|
||||
/* Run */
|
||||
@ -905,6 +910,30 @@ void EditorSettings::_load_godot2_text_editor_theme() {
|
||||
_initial_set("text_editor/theme/highlighting/search_result_border_color", Color(0.41, 0.61, 0.91, 0.38));
|
||||
}
|
||||
|
||||
void EditorSettings::_load_default_visual_shader_editor_theme() {
|
||||
// Connection type colors
|
||||
_initial_set("editors/visual_editors/connection_colors/scalar_color", Color(0.55, 0.55, 0.55));
|
||||
_initial_set("editors/visual_editors/connection_colors/vector2_color", Color(0.44, 0.43, 0.64));
|
||||
_initial_set("editors/visual_editors/connection_colors/vector3_color", Color(0.337, 0.314, 0.71));
|
||||
_initial_set("editors/visual_editors/connection_colors/vector4_color", Color(0.7, 0.65, 0.147));
|
||||
_initial_set("editors/visual_editors/connection_colors/boolean_color", Color(0.243, 0.612, 0.349));
|
||||
_initial_set("editors/visual_editors/connection_colors/transform_color", Color(0.71, 0.357, 0.64));
|
||||
_initial_set("editors/visual_editors/connection_colors/sampler_color", Color(0.659, 0.4, 0.137));
|
||||
|
||||
// Node category colors (used for the node headers)
|
||||
_initial_set("editors/visual_editors/category_colors/output_color", Color(0.26, 0.10, 0.15));
|
||||
_initial_set("editors/visual_editors/category_colors/color_color", Color(0.5, 0.5, 0.1));
|
||||
_initial_set("editors/visual_editors/category_colors/conditional_color", Color(0.208, 0.522, 0.298));
|
||||
_initial_set("editors/visual_editors/category_colors/input_color", Color(0.502, 0.2, 0.204));
|
||||
_initial_set("editors/visual_editors/category_colors/scalar_color", Color(0.1, 0.5, 0.6));
|
||||
_initial_set("editors/visual_editors/category_colors/textures_color", Color(0.5, 0.3, 0.1));
|
||||
_initial_set("editors/visual_editors/category_colors/transform_color", Color(0.5, 0.3, 0.5));
|
||||
_initial_set("editors/visual_editors/category_colors/utility_color", Color(0.2, 0.2, 0.2));
|
||||
_initial_set("editors/visual_editors/category_colors/vector_color", Color(0.2, 0.2, 0.5));
|
||||
_initial_set("editors/visual_editors/category_colors/special_color", Color(0.098, 0.361, 0.294));
|
||||
_initial_set("editors/visual_editors/category_colors/particle_color", Color(0.12, 0.358, 0.8));
|
||||
}
|
||||
|
||||
bool EditorSettings::_save_text_editor_theme(String p_file) {
|
||||
String theme_section = "color_theme";
|
||||
Ref<ConfigFile> cf = memnew(ConfigFile); // hex is better?
|
||||
|
@ -110,6 +110,7 @@ private:
|
||||
|
||||
void _load_defaults(Ref<ConfigFile> p_extra_config = Ref<ConfigFile>());
|
||||
void _load_godot2_text_editor_theme();
|
||||
void _load_default_visual_shader_editor_theme();
|
||||
bool _save_text_editor_theme(String p_file);
|
||||
bool _is_default_text_editor_theme(String p_theme_name);
|
||||
const String _get_project_metadata_path() const;
|
||||
|
@ -71,6 +71,8 @@ void EditorSettingsDialog::_settings_property_edited(const String &p_name) {
|
||||
EditorSettings::get_singleton()->set_manually("interface/theme/spacing_preset", "Custom");
|
||||
} else if (full_name.begins_with("text_editor/theme/highlighting")) {
|
||||
EditorSettings::get_singleton()->set_manually("text_editor/theme/color_theme", "Custom");
|
||||
} else if (full_name.begins_with("editors/visual_editors/connection_colors") || full_name.begins_with("editors/visual_editors/category_colors")) {
|
||||
EditorSettings::get_singleton()->set_manually("editors/visual_editors/color_theme", "Custom");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -104,6 +104,7 @@ void VisualShaderNodePlugin::_bind_methods() {
|
||||
///////////////////
|
||||
|
||||
VisualShaderGraphPlugin::VisualShaderGraphPlugin() {
|
||||
vs_msdf_fonts_theme.instantiate();
|
||||
}
|
||||
|
||||
void VisualShaderGraphPlugin::_bind_methods() {
|
||||
@ -358,6 +359,13 @@ void VisualShaderGraphPlugin::update_theme() {
|
||||
vector_expanded_color[1] = editor->get_theme_color(SNAME("axis_y_color"), EditorStringName(Editor)); // green
|
||||
vector_expanded_color[2] = editor->get_theme_color(SNAME("axis_z_color"), EditorStringName(Editor)); // blue
|
||||
vector_expanded_color[3] = editor->get_theme_color(SNAME("axis_w_color"), EditorStringName(Editor)); // alpha
|
||||
|
||||
Ref<Font> label_font = EditorNode::get_singleton()->get_editor_theme()->get_font("main_msdf", EditorStringName(EditorFonts));
|
||||
Ref<Font> label_bold_font = EditorNode::get_singleton()->get_editor_theme()->get_font("main_bold_msdf", EditorStringName(EditorFonts));
|
||||
vs_msdf_fonts_theme->set_font("font", "Label", label_font);
|
||||
vs_msdf_fonts_theme->set_font("font", "GraphNodeTitleLabel", label_bold_font);
|
||||
vs_msdf_fonts_theme->set_font("font", "LineEdit", label_font);
|
||||
vs_msdf_fonts_theme->set_font("font", "Button", label_font);
|
||||
}
|
||||
|
||||
bool VisualShaderGraphPlugin::is_node_has_parameter_instances_relatively(VisualShader::Type p_type, int p_node) const {
|
||||
@ -398,34 +406,35 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id, bool
|
||||
|
||||
Control *offset;
|
||||
|
||||
static const Color type_color[] = {
|
||||
Color(0.38, 0.85, 0.96), // scalar (float)
|
||||
Color(0.49, 0.78, 0.94), // scalar (int)
|
||||
Color(0.20, 0.88, 0.67), // scalar (uint)
|
||||
Color(0.74, 0.57, 0.95), // vector2
|
||||
Color(0.84, 0.49, 0.93), // vector3
|
||||
Color(1.0, 0.125, 0.95), // vector4
|
||||
Color(0.55, 0.65, 0.94), // boolean
|
||||
Color(0.96, 0.66, 0.43), // transform
|
||||
Color(1.0, 1.0, 0.0), // sampler
|
||||
const Color type_color[] = {
|
||||
EDITOR_GET("editors/visual_editors/connection_colors/scalar_color"),
|
||||
EDITOR_GET("editors/visual_editors/connection_colors/scalar_color"),
|
||||
EDITOR_GET("editors/visual_editors/connection_colors/scalar_color"),
|
||||
EDITOR_GET("editors/visual_editors/connection_colors/vector2_color"),
|
||||
EDITOR_GET("editors/visual_editors/connection_colors/vector3_color"),
|
||||
EDITOR_GET("editors/visual_editors/connection_colors/vector4_color"),
|
||||
EDITOR_GET("editors/visual_editors/connection_colors/boolean_color"),
|
||||
EDITOR_GET("editors/visual_editors/connection_colors/transform_color"),
|
||||
EDITOR_GET("editors/visual_editors/connection_colors/sampler_color"),
|
||||
};
|
||||
|
||||
static const String vector_expanded_name[4] = {
|
||||
"red",
|
||||
"green",
|
||||
"blue",
|
||||
"alpha"
|
||||
// Keep in sync with VisualShaderNode::Category.
|
||||
const Color category_color[VisualShaderNode::Category::CATEGORY_MAX] = {
|
||||
Color(0.0, 0.0, 0.0), // None (default, not used)
|
||||
EDITOR_GET("editors/visual_editors/category_colors/output_color"),
|
||||
EDITOR_GET("editors/visual_editors/category_colors/color_color"),
|
||||
EDITOR_GET("editors/visual_editors/category_colors/conditional_color"),
|
||||
EDITOR_GET("editors/visual_editors/category_colors/input_color"),
|
||||
EDITOR_GET("editors/visual_editors/category_colors/scalar_color"),
|
||||
EDITOR_GET("editors/visual_editors/category_colors/textures_color"),
|
||||
EDITOR_GET("editors/visual_editors/category_colors/transform_color"),
|
||||
EDITOR_GET("editors/visual_editors/category_colors/utility_color"),
|
||||
EDITOR_GET("editors/visual_editors/category_colors/vector_color"),
|
||||
EDITOR_GET("editors/visual_editors/category_colors/special_color"),
|
||||
EDITOR_GET("editors/visual_editors/category_colors/particle_color"),
|
||||
};
|
||||
|
||||
// Visual shader specific theme for MSDF font.
|
||||
Ref<Theme> vstheme;
|
||||
vstheme.instantiate();
|
||||
Ref<Font> label_font = EditorNode::get_singleton()->get_editor_theme()->get_font("main_msdf", EditorStringName(EditorFonts));
|
||||
Ref<Font> label_bold_font = EditorNode::get_singleton()->get_editor_theme()->get_font("main_bold_msdf", EditorStringName(EditorFonts));
|
||||
vstheme->set_font("font", "Label", label_font);
|
||||
vstheme->set_font("font", "GraphNodeTitleLabel", label_bold_font);
|
||||
vstheme->set_font("font", "LineEdit", label_font);
|
||||
vstheme->set_font("font", "Button", label_font);
|
||||
static const String vector_expanded_name[4] = { "red", "green", "blue", "alpha" };
|
||||
|
||||
Ref<VisualShaderNode> vsnode = visual_shader->get_node(p_type, p_id);
|
||||
|
||||
@ -457,7 +466,18 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id, bool
|
||||
node->connect("delete_request", callable_mp(editor, &VisualShaderEditor::_delete_node_request).bind(p_type, p_id), CONNECT_DEFERRED);
|
||||
}
|
||||
graph->add_child(node);
|
||||
node->set_theme(vstheme);
|
||||
node->set_theme(vs_msdf_fonts_theme);
|
||||
|
||||
// Set the node's titlebar color based on its category.
|
||||
if (vsnode->get_category() != VisualShaderNode::CATEGORY_NONE) {
|
||||
Ref<StyleBoxFlat> sb_colored = editor->get_theme_stylebox("titlebar", "GraphNode")->duplicate();
|
||||
sb_colored->set_bg_color(category_color[vsnode->get_category()]);
|
||||
node->add_theme_style_override("titlebar", sb_colored);
|
||||
|
||||
Ref<StyleBoxFlat> sb_colored_selected = editor->get_theme_stylebox("titlebar_selected", "GraphNode")->duplicate();
|
||||
sb_colored_selected->set_bg_color(category_color[vsnode->get_category()].lightened(0.2));
|
||||
node->add_theme_style_override("titlebar_selected", sb_colored_selected);
|
||||
}
|
||||
|
||||
if (p_just_update) {
|
||||
Link &link = links[p_id];
|
||||
@ -506,6 +526,11 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id, bool
|
||||
port_offset += 1;
|
||||
}
|
||||
|
||||
// Set the minimum width of a node based on the preview size to avoid a resize when toggling the preview.
|
||||
Ref<StyleBoxFlat> graph_node_stylebox = graph->get_theme_stylebox("panel", "GraphNode");
|
||||
int port_preview_size = EDITOR_GET("editors/visual_editors/visual_shader/port_preview_size");
|
||||
node->set_custom_minimum_size(Size2((Math::ceil(graph_node_stylebox->get_minimum_size().width) + port_preview_size) * EDSCALE, 0));
|
||||
|
||||
Ref<VisualShaderNodeParticleEmit> emit = vsnode;
|
||||
if (emit.is_valid()) {
|
||||
node->set_custom_minimum_size(Size2(200 * EDSCALE, 0));
|
||||
@ -4313,7 +4338,9 @@ void VisualShaderEditor::_notification(int p_what) {
|
||||
}
|
||||
if (EditorSettings::get_singleton()->check_changed_settings_in_group("editors/visual_editors")) {
|
||||
graph->set_minimap_opacity(EDITOR_GET("editors/visual_editors/minimap_opacity"));
|
||||
graph->set_grid_pattern((GraphEdit::GridPattern) int(EDITOR_GET("editors/visual_editors/grid_pattern")));
|
||||
graph->set_connection_lines_curvature(EDITOR_GET("editors/visual_editors/lines_curvature"));
|
||||
|
||||
_update_graph();
|
||||
}
|
||||
} break;
|
||||
@ -5424,6 +5451,9 @@ VisualShaderEditor::VisualShaderEditor() {
|
||||
graph->get_menu_hbox()->set_h_size_flags(SIZE_EXPAND_FILL);
|
||||
graph->set_v_size_flags(SIZE_EXPAND_FILL);
|
||||
graph->set_h_size_flags(SIZE_EXPAND_FILL);
|
||||
graph->set_grid_pattern(GraphEdit::GridPattern::GRID_PATTERN_DOTS);
|
||||
int grid_pattern = EDITOR_GET("editors/visual_editors/grid_pattern");
|
||||
graph->set_grid_pattern((GraphEdit::GridPattern)grid_pattern);
|
||||
graph->set_show_zoom_label(true);
|
||||
add_child(graph);
|
||||
SET_DRAG_FORWARDING_GCD(graph, VisualShaderEditor);
|
||||
|
@ -99,6 +99,9 @@ private:
|
||||
|
||||
Color vector_expanded_color[4];
|
||||
|
||||
// Visual shader specific theme for using MSDF fonts (on GraphNodes) which reduce aliasing at higher zoom levels.
|
||||
Ref<Theme> vs_msdf_fonts_theme;
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
|
@ -39,6 +39,7 @@
|
||||
#include "editor/themes/editor_icons.h"
|
||||
#include "editor/themes/editor_scale.h"
|
||||
#include "editor/themes/editor_theme.h"
|
||||
#include "scene/gui/graph_edit.h"
|
||||
#include "scene/resources/image_texture.h"
|
||||
#include "scene/resources/style_box_flat.h"
|
||||
#include "scene/resources/style_box_line.h"
|
||||
@ -213,6 +214,7 @@ Ref<EditorTheme> EditorThemeManager::_create_base_theme(const Ref<EditorTheme> &
|
||||
_populate_standard_styles(theme, config);
|
||||
_populate_editor_styles(theme, config);
|
||||
_populate_text_editor_styles(theme, config);
|
||||
_populate_visual_shader_styles(theme, config);
|
||||
|
||||
OS::get_singleton()->benchmark_end_measure(get_benchmark_key(), "Create Base Theme");
|
||||
return theme;
|
||||
@ -1465,13 +1467,22 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the
|
||||
p_theme->set_stylebox("panel", "GraphEdit", p_config.tree_panel_style);
|
||||
p_theme->set_stylebox("menu_panel", "GraphEdit", make_flat_stylebox(p_config.dark_color_1 * Color(1, 1, 1, 0.6), 4, 2, 4, 2, 3));
|
||||
|
||||
if (p_config.dark_theme) {
|
||||
p_theme->set_color("grid_major", "GraphEdit", Color(1.0, 1.0, 1.0, 0.1));
|
||||
p_theme->set_color("grid_minor", "GraphEdit", Color(1.0, 1.0, 1.0, 0.05));
|
||||
} else {
|
||||
p_theme->set_color("grid_major", "GraphEdit", Color(0.0, 0.0, 0.0, 0.15));
|
||||
p_theme->set_color("grid_minor", "GraphEdit", Color(0.0, 0.0, 0.0, 0.07));
|
||||
float grid_base_brightness = p_config.dark_theme ? 1.0 : 0.0;
|
||||
GraphEdit::GridPattern grid_pattern = (GraphEdit::GridPattern) int(EDITOR_GET("editors/visual_editors/grid_pattern"));
|
||||
switch (grid_pattern) {
|
||||
case GraphEdit::GRID_PATTERN_LINES:
|
||||
p_theme->set_color("grid_major", "GraphEdit", Color(grid_base_brightness, grid_base_brightness, grid_base_brightness, 0.10));
|
||||
p_theme->set_color("grid_minor", "GraphEdit", Color(grid_base_brightness, grid_base_brightness, grid_base_brightness, 0.05));
|
||||
break;
|
||||
case GraphEdit::GRID_PATTERN_DOTS:
|
||||
p_theme->set_color("grid_major", "GraphEdit", Color(grid_base_brightness, grid_base_brightness, grid_base_brightness, 0.07));
|
||||
p_theme->set_color("grid_minor", "GraphEdit", Color(grid_base_brightness, grid_base_brightness, grid_base_brightness, 0.07));
|
||||
break;
|
||||
default:
|
||||
WARN_PRINT("Unknown grid pattern.");
|
||||
break;
|
||||
}
|
||||
|
||||
p_theme->set_color("selection_fill", "GraphEdit", p_theme->get_color(SNAME("box_selection_fill_color"), EditorStringName(Editor)));
|
||||
p_theme->set_color("selection_stroke", "GraphEdit", p_theme->get_color(SNAME("box_selection_stroke_color"), EditorStringName(Editor)));
|
||||
p_theme->set_color("activity", "GraphEdit", p_config.dark_theme ? Color(1, 1, 1) : Color(0, 0, 0));
|
||||
@ -1522,31 +1533,48 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the
|
||||
const int gn_margin_side = 2;
|
||||
const int gn_margin_bottom = 2;
|
||||
|
||||
const int gn_corner_radius = 3;
|
||||
|
||||
const Color gn_bg_color = p_config.dark_theme ? p_config.dark_color_3 : p_config.dark_color_1.lerp(p_config.mono_color, 0.09);
|
||||
const Color gn_selected_border_color = gn_bg_color.lerp(p_config.accent_color, 0.275);
|
||||
const Color gn_selected_border_color = p_config.dark_theme ? Color(1, 1, 1) : Color(0, 0, 0);
|
||||
const Color gn_frame_bg = gn_bg_color.lerp(p_config.tree_panel_style->get_bg_color(), 0.3);
|
||||
|
||||
const bool high_contrast_borders = p_config.draw_extra_borders && p_config.dark_theme;
|
||||
|
||||
Ref<StyleBoxFlat> gn_panel_style = make_flat_stylebox(gn_frame_bg, gn_margin_side, gn_margin_top, gn_margin_side, gn_margin_bottom, p_config.corner_radius);
|
||||
gn_panel_style->set_border_width_all(p_config.border_width);
|
||||
gn_panel_style->set_border_color(gn_bg_color);
|
||||
gn_panel_style->set_corner_radius_individual(0, 0, p_config.corner_radius * EDSCALE, p_config.corner_radius * EDSCALE);
|
||||
gn_panel_style->set_expand_margin(SIDE_TOP, 17 * EDSCALE);
|
||||
gn_panel_style->set_border_width(SIDE_BOTTOM, 2 * EDSCALE);
|
||||
gn_panel_style->set_border_width(SIDE_LEFT, 2 * EDSCALE);
|
||||
gn_panel_style->set_border_width(SIDE_RIGHT, 2 * EDSCALE);
|
||||
gn_panel_style->set_border_color(high_contrast_borders ? gn_bg_color.lightened(0.2) : gn_bg_color.darkened(0.3));
|
||||
gn_panel_style->set_corner_radius_individual(0, 0, gn_corner_radius * EDSCALE, gn_corner_radius * EDSCALE);
|
||||
gn_panel_style->set_anti_aliased(true);
|
||||
|
||||
Ref<StyleBoxFlat> gn_panel_selected_style = make_flat_stylebox(gn_frame_bg, gn_margin_side, gn_margin_top, gn_margin_side, gn_margin_bottom, p_config.corner_radius);
|
||||
gn_panel_selected_style->set_border_width_all(2 * EDSCALE + p_config.border_width);
|
||||
Ref<StyleBoxFlat> gn_panel_selected_style = gn_panel_style->duplicate();
|
||||
gn_panel_selected_style->set_bg_color(p_config.dark_theme ? gn_bg_color.lightened(0.15) : gn_bg_color.darkened(0.15));
|
||||
gn_panel_selected_style->set_border_width(SIDE_TOP, 0);
|
||||
gn_panel_selected_style->set_border_width(SIDE_BOTTOM, 2 * EDSCALE);
|
||||
gn_panel_selected_style->set_border_width(SIDE_LEFT, 2 * EDSCALE);
|
||||
gn_panel_selected_style->set_border_width(SIDE_RIGHT, 2 * EDSCALE);
|
||||
gn_panel_selected_style->set_border_color(gn_selected_border_color);
|
||||
gn_panel_selected_style->set_corner_radius_individual(0, 0, p_config.corner_radius * EDSCALE, p_config.corner_radius * EDSCALE);
|
||||
gn_panel_selected_style->set_expand_margin(SIDE_TOP, 17 * EDSCALE);
|
||||
|
||||
const int gn_titlebar_margin_left = 12;
|
||||
const int gn_titlebar_margin_right = 4; // The rest is for the close button.
|
||||
const int gn_titlebar_margin_top = 8;
|
||||
const int gn_titlebar_margin_side = 12;
|
||||
const int gn_titlebar_margin_bottom = 8;
|
||||
|
||||
Ref<StyleBoxFlat> gn_titlebar_style = make_flat_stylebox(gn_bg_color, gn_titlebar_margin_left, gn_margin_top, gn_titlebar_margin_right, 0, p_config.corner_radius);
|
||||
Ref<StyleBoxFlat> gn_titlebar_style = make_flat_stylebox(gn_bg_color, gn_titlebar_margin_side, gn_titlebar_margin_top, gn_titlebar_margin_side, gn_titlebar_margin_bottom, p_config.corner_radius);
|
||||
gn_titlebar_style->set_border_width(SIDE_TOP, 2 * EDSCALE);
|
||||
gn_titlebar_style->set_border_width(SIDE_LEFT, 2 * EDSCALE);
|
||||
gn_titlebar_style->set_border_width(SIDE_RIGHT, 2 * EDSCALE);
|
||||
gn_titlebar_style->set_border_color(high_contrast_borders ? gn_bg_color.lightened(0.2) : gn_bg_color.darkened(0.3));
|
||||
gn_titlebar_style->set_expand_margin(SIDE_TOP, 2 * EDSCALE);
|
||||
gn_titlebar_style->set_corner_radius_individual(p_config.corner_radius * EDSCALE, p_config.corner_radius * EDSCALE, 0, 0);
|
||||
gn_titlebar_style->set_corner_radius_individual(gn_corner_radius * EDSCALE, gn_corner_radius * EDSCALE, 0, 0);
|
||||
gn_titlebar_style->set_anti_aliased(true);
|
||||
|
||||
Ref<StyleBoxFlat> gn_titlebar_selected_style = make_flat_stylebox(gn_selected_border_color, gn_titlebar_margin_left, gn_margin_top, gn_titlebar_margin_right, 0, p_config.corner_radius);
|
||||
gn_titlebar_selected_style->set_corner_radius_individual(p_config.corner_radius * EDSCALE, p_config.corner_radius * EDSCALE, 0, 0);
|
||||
Ref<StyleBoxFlat> gn_titlebar_selected_style = gn_titlebar_style->duplicate();
|
||||
gn_titlebar_selected_style->set_border_color(gn_selected_border_color);
|
||||
gn_titlebar_selected_style->set_border_width(SIDE_TOP, 2 * EDSCALE);
|
||||
gn_titlebar_selected_style->set_border_width(SIDE_LEFT, 2 * EDSCALE);
|
||||
gn_titlebar_selected_style->set_border_width(SIDE_RIGHT, 2 * EDSCALE);
|
||||
gn_titlebar_selected_style->set_expand_margin(SIDE_TOP, 2 * EDSCALE);
|
||||
|
||||
Color gn_decoration_color = p_config.dark_color_1.inverted();
|
||||
@ -1573,7 +1601,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the
|
||||
|
||||
p_theme->set_color("resizer_color", "GraphNode", gn_decoration_color);
|
||||
|
||||
p_theme->set_constant("port_h_offset", "GraphNode", 0);
|
||||
p_theme->set_constant("port_h_offset", "GraphNode", 1);
|
||||
p_theme->set_constant("separation", "GraphNode", 1 * EDSCALE);
|
||||
|
||||
Ref<ImageTexture> port_icon = p_theme->get_icon(SNAME("GuiGraphNodePort"), EditorStringName(EditorIcons));
|
||||
@ -1584,7 +1612,11 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the
|
||||
// GraphNode's title Label.
|
||||
p_theme->set_type_variation("GraphNodeTitleLabel", "Label");
|
||||
p_theme->set_stylebox("normal", "GraphNodeTitleLabel", make_empty_stylebox(0, 0, 0, 0));
|
||||
p_theme->set_color("font_color", "GraphNodeTitleLabel", p_config.font_color);
|
||||
p_theme->set_color("font_color", "GraphNodeTitleLabel", p_config.dark_theme ? p_config.font_color : Color(1, 1, 1)); // Also use a bright font color for light themes.
|
||||
p_theme->set_color("font_shadow_color", "GraphNodeTitleLabel", Color(0, 0, 0, 0.35));
|
||||
p_theme->set_constant("shadow_outline_size", "GraphNodeTitleLabel", 4);
|
||||
p_theme->set_constant("shadow_offset_x", "GraphNodeTitleLabel", 0);
|
||||
p_theme->set_constant("shadow_offset_y", "GraphNodeTitleLabel", 1);
|
||||
p_theme->set_constant("line_spacing", "GraphNodeTitleLabel", 3 * EDSCALE);
|
||||
}
|
||||
}
|
||||
@ -2339,6 +2371,59 @@ void EditorThemeManager::_populate_text_editor_styles(const Ref<EditorTheme> &p_
|
||||
/* clang-format on */
|
||||
}
|
||||
|
||||
void EditorThemeManager::_populate_visual_shader_styles(const Ref<EditorTheme> &p_theme, ThemeConfiguration &p_config) {
|
||||
EditorSettings *ed_settings = EditorSettings::get_singleton();
|
||||
String visual_shader_color_theme = ed_settings->get("editors/visual_editors/color_theme");
|
||||
if (visual_shader_color_theme == "Default") {
|
||||
// Connection type colors
|
||||
ed_settings->set_initial_value("editors/visual_editors/connection_colors/scalar_color", Color(0.55, 0.55, 0.55), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/connection_colors/vector2_color", Color(0.44, 0.43, 0.64), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/connection_colors/vector3_color", Color(0.337, 0.314, 0.71), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/connection_colors/vector4_color", Color(0.7, 0.65, 0.147), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/connection_colors/boolean_color", Color(0.243, 0.612, 0.349), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/connection_colors/transform_color", Color(0.71, 0.357, 0.64), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/connection_colors/sampler_color", Color(0.659, 0.4, 0.137), true);
|
||||
|
||||
// Node category colors (used for the node headers)
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/output_color", Color(0.26, 0.10, 0.15), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/color_color", Color(0.5, 0.5, 0.1), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/conditional_color", Color(0.208, 0.522, 0.298), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/input_color", Color(0.502, 0.2, 0.204), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/scalar_color", Color(0.1, 0.5, 0.6), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/textures_color", Color(0.5, 0.3, 0.1), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/transform_color", Color(0.5, 0.3, 0.5), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/utility_color", Color(0.2, 0.2, 0.2), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/vector_color", Color(0.2, 0.2, 0.5), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/special_color", Color(0.098, 0.361, 0.294), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/particle_color", Color(0.12, 0.358, 0.8), true);
|
||||
|
||||
} else if (visual_shader_color_theme == "Legacy") {
|
||||
// Connection type colors
|
||||
ed_settings->set_initial_value("editors/visual_editors/connection_colors/scalar_color", Color(0.38, 0.85, 0.96), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/connection_colors/vector2_color", Color(0.74, 0.57, 0.95), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/connection_colors/vector3_color", Color(0.84, 0.49, 0.93), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/connection_colors/vector4_color", Color(1.0, 0.125, 0.95), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/connection_colors/boolean_color", Color(0.55, 0.65, 0.94), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/connection_colors/transform_color", Color(0.96, 0.66, 0.43), true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/connection_colors/sampler_color", Color(1.0, 1.0, 0.0), true);
|
||||
|
||||
// Node category colors (used for the node headers)
|
||||
Ref<StyleBoxFlat> gn_panel_style = p_theme->get_stylebox("panel", "GraphNode");
|
||||
Color gn_bg_color = gn_panel_style->get_bg_color();
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/output_color", gn_bg_color, true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/color_color", gn_bg_color, true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/conditional_color", gn_bg_color, true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/input_color", gn_bg_color, true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/scalar_color", gn_bg_color, true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/textures_color", gn_bg_color, true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/transform_color", gn_bg_color, true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/utility_color", gn_bg_color, true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/vector_color", gn_bg_color, true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/special_color", gn_bg_color, true);
|
||||
ed_settings->set_initial_value("editors/visual_editors/category_colors/particle_color", gn_bg_color, true);
|
||||
}
|
||||
}
|
||||
|
||||
void EditorThemeManager::_reset_dirty_flag() {
|
||||
outdated_cache_dirty = true;
|
||||
}
|
||||
@ -2381,6 +2466,7 @@ bool EditorThemeManager::is_generated_theme_outdated() {
|
||||
EditorSettings::get_singleton()->check_changed_settings_in_group("interface/editor/code_font") ||
|
||||
EditorSettings::get_singleton()->check_changed_settings_in_group("interface/touchscreen/increase_scrollbar_touch_area") ||
|
||||
EditorSettings::get_singleton()->check_changed_settings_in_group("interface/touchscreen/scale_gizmo_handles") ||
|
||||
EditorSettings::get_singleton()->check_changed_settings_in_group("editors/visual_editors") ||
|
||||
EditorSettings::get_singleton()->check_changed_settings_in_group("text_editor/theme") ||
|
||||
EditorSettings::get_singleton()->check_changed_settings_in_group("text_editor/help/help") ||
|
||||
EditorSettings::get_singleton()->check_changed_settings_in_group("docks/property_editor/subresource_hue_tint") ||
|
||||
|
@ -156,6 +156,7 @@ class EditorThemeManager {
|
||||
|
||||
static void _generate_text_editor_defaults(ThemeConfiguration &p_config);
|
||||
static void _populate_text_editor_styles(const Ref<EditorTheme> &p_theme, ThemeConfiguration &p_config);
|
||||
static void _populate_visual_shader_styles(const Ref<EditorTheme> &p_theme, ThemeConfiguration &p_config);
|
||||
|
||||
static void _reset_dirty_flag();
|
||||
|
||||
|
@ -52,6 +52,7 @@ constexpr int MINIMAP_PADDING = 5;
|
||||
constexpr int MIN_DRAG_DISTANCE_FOR_VALID_CONNECTION = 20;
|
||||
constexpr int MAX_CONNECTION_LINE_CURVE_TESSELATION_STAGES = 5;
|
||||
constexpr int GRID_MINOR_STEPS_PER_MAJOR_LINE = 10;
|
||||
constexpr int GRID_MINOR_STEPS_PER_MAJOR_DOT = 5;
|
||||
constexpr int GRID_MIN_SNAPPING_DISTANCE = 2;
|
||||
constexpr int GRID_MAX_SNAPPING_DISTANCE = 100;
|
||||
|
||||
@ -1349,13 +1350,13 @@ void GraphEdit::_draw_grid() {
|
||||
} break;
|
||||
case GRID_PATTERN_DOTS: {
|
||||
Color transparent_grid_minor = theme_cache.grid_minor;
|
||||
transparent_grid_minor.a *= CLAMP(2 * (zoom - 0.4), 0, 1);
|
||||
transparent_grid_minor.a *= CLAMP(1.0 * (zoom - 0.4), 0, 1);
|
||||
|
||||
for (int i = from_pos.x; i < from_pos.x + len.x; i++) {
|
||||
for (int j = from_pos.y; j < from_pos.y + len.y; j++) {
|
||||
Color color = transparent_grid_minor;
|
||||
|
||||
if (ABS(i) % GRID_MINOR_STEPS_PER_MAJOR_LINE == 0 && ABS(j) % GRID_MINOR_STEPS_PER_MAJOR_LINE == 0) {
|
||||
if (ABS(i) % GRID_MINOR_STEPS_PER_MAJOR_DOT == 0 && ABS(j) % GRID_MINOR_STEPS_PER_MAJOR_DOT == 0) {
|
||||
color = theme_cache.grid_major;
|
||||
}
|
||||
|
||||
|
@ -403,6 +403,11 @@ String VisualShaderNode::get_warning(Shader::Mode p_mode, VisualShader::Type p_t
|
||||
return String();
|
||||
}
|
||||
|
||||
VisualShaderNode::Category VisualShaderNode::get_category() const {
|
||||
WARN_PRINT(get_caption() + " is missing a category.");
|
||||
return CATEGORY_NONE;
|
||||
}
|
||||
|
||||
bool VisualShaderNode::is_input_port_default(int p_port, Shader::Mode p_mode) const {
|
||||
return false;
|
||||
}
|
||||
|
@ -255,6 +255,37 @@ VARIANT_ENUM_CAST(VisualShader::VaryingType)
|
||||
class VisualShaderNode : public Resource {
|
||||
GDCLASS(VisualShaderNode, Resource);
|
||||
|
||||
public:
|
||||
enum PortType {
|
||||
PORT_TYPE_SCALAR,
|
||||
PORT_TYPE_SCALAR_INT,
|
||||
PORT_TYPE_SCALAR_UINT,
|
||||
PORT_TYPE_VECTOR_2D,
|
||||
PORT_TYPE_VECTOR_3D,
|
||||
PORT_TYPE_VECTOR_4D,
|
||||
PORT_TYPE_BOOLEAN,
|
||||
PORT_TYPE_TRANSFORM,
|
||||
PORT_TYPE_SAMPLER,
|
||||
PORT_TYPE_MAX,
|
||||
};
|
||||
|
||||
enum Category {
|
||||
CATEGORY_NONE,
|
||||
CATEGORY_OUTPUT,
|
||||
CATEGORY_COLOR,
|
||||
CATEGORY_CONDITIONAL,
|
||||
CATEGORY_INPUT,
|
||||
CATEGORY_SCALAR,
|
||||
CATEGORY_TEXTURES,
|
||||
CATEGORY_TRANSFORM,
|
||||
CATEGORY_UTILITY,
|
||||
CATEGORY_VECTOR,
|
||||
CATEGORY_SPECIAL,
|
||||
CATEGORY_PARTICLE,
|
||||
CATEGORY_MAX
|
||||
};
|
||||
|
||||
private:
|
||||
int port_preview = -1;
|
||||
|
||||
HashMap<int, bool> connected_input_ports;
|
||||
@ -270,19 +301,6 @@ protected:
|
||||
static void _bind_methods();
|
||||
|
||||
public:
|
||||
enum PortType {
|
||||
PORT_TYPE_SCALAR,
|
||||
PORT_TYPE_SCALAR_INT,
|
||||
PORT_TYPE_SCALAR_UINT,
|
||||
PORT_TYPE_VECTOR_2D,
|
||||
PORT_TYPE_VECTOR_3D,
|
||||
PORT_TYPE_VECTOR_4D,
|
||||
PORT_TYPE_BOOLEAN,
|
||||
PORT_TYPE_TRANSFORM,
|
||||
PORT_TYPE_SAMPLER,
|
||||
PORT_TYPE_MAX,
|
||||
};
|
||||
|
||||
bool is_simple_decl() const;
|
||||
|
||||
virtual String get_caption() const = 0;
|
||||
@ -348,6 +366,8 @@ public:
|
||||
|
||||
virtual String get_warning(Shader::Mode p_mode, VisualShader::Type p_type) const;
|
||||
|
||||
virtual Category get_category() const;
|
||||
|
||||
VisualShaderNode();
|
||||
};
|
||||
|
||||
@ -507,6 +527,8 @@ public:
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_INPUT; }
|
||||
|
||||
VisualShaderNodeInput();
|
||||
};
|
||||
|
||||
@ -546,6 +568,8 @@ public:
|
||||
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_OUTPUT; }
|
||||
|
||||
VisualShaderNodeOutput();
|
||||
};
|
||||
|
||||
@ -589,6 +613,8 @@ public:
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
virtual String get_warning(Shader::Mode p_mode, VisualShader::Type p_type) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_INPUT; }
|
||||
|
||||
VisualShaderNodeParameter();
|
||||
};
|
||||
|
||||
@ -661,6 +687,8 @@ public:
|
||||
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_INPUT; }
|
||||
|
||||
VisualShaderNodeParameterRef();
|
||||
};
|
||||
|
||||
@ -713,6 +741,8 @@ public:
|
||||
void set_description(const String &p_description);
|
||||
String get_description() const;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_SPECIAL; }
|
||||
|
||||
VisualShaderNodeComment();
|
||||
};
|
||||
|
||||
@ -781,6 +811,8 @@ public:
|
||||
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_SPECIAL; }
|
||||
|
||||
VisualShaderNodeGroupBase();
|
||||
};
|
||||
|
||||
@ -887,6 +919,8 @@ public:
|
||||
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_OUTPUT; }
|
||||
|
||||
VisualShaderNodeVaryingSetter();
|
||||
};
|
||||
|
||||
@ -907,6 +941,8 @@ public:
|
||||
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_INPUT; }
|
||||
|
||||
VisualShaderNodeVaryingGetter();
|
||||
};
|
||||
|
||||
|
@ -76,6 +76,8 @@ public:
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_VECTOR; }
|
||||
|
||||
VisualShaderNodeVectorBase();
|
||||
};
|
||||
|
||||
@ -101,6 +103,8 @@ public:
|
||||
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override = 0;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_INPUT; }
|
||||
|
||||
VisualShaderNodeConstant();
|
||||
};
|
||||
|
||||
@ -437,6 +441,8 @@ public:
|
||||
|
||||
virtual String get_warning(Shader::Mode p_mode, VisualShader::Type p_type) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_TEXTURES; }
|
||||
|
||||
VisualShaderNodeTexture();
|
||||
};
|
||||
|
||||
@ -473,6 +479,8 @@ public:
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
virtual bool is_use_prop_slots() const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_TEXTURES; }
|
||||
|
||||
VisualShaderNodeCurveTexture();
|
||||
};
|
||||
|
||||
@ -543,6 +551,8 @@ public:
|
||||
|
||||
virtual String get_warning(Shader::Mode p_mode, VisualShader::Type p_type) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_TEXTURES; }
|
||||
|
||||
VisualShaderNodeSample3D();
|
||||
};
|
||||
|
||||
@ -671,8 +681,11 @@ public:
|
||||
virtual bool has_output_port_preview(int p_port) const override;
|
||||
|
||||
virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const override;
|
||||
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_TEXTURES; }
|
||||
|
||||
VisualShaderNodeLinearSceneDepth();
|
||||
};
|
||||
|
||||
@ -695,6 +708,8 @@ public:
|
||||
virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const override;
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_TEXTURES; }
|
||||
|
||||
VisualShaderNodeWorldPositionFromDepth();
|
||||
};
|
||||
|
||||
@ -717,6 +732,8 @@ public:
|
||||
virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const override;
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_TEXTURES; }
|
||||
|
||||
VisualShaderNodeScreenNormalWorldSpace();
|
||||
};
|
||||
|
||||
@ -765,6 +782,8 @@ public:
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_SCALAR; }
|
||||
|
||||
VisualShaderNodeFloatOp();
|
||||
};
|
||||
|
||||
@ -957,6 +976,8 @@ public:
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_COLOR; }
|
||||
|
||||
VisualShaderNodeColorOp();
|
||||
};
|
||||
|
||||
@ -1006,6 +1027,8 @@ public:
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_TRANSFORM; }
|
||||
|
||||
VisualShaderNodeTransformOp();
|
||||
};
|
||||
|
||||
@ -1050,6 +1073,8 @@ public:
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_TRANSFORM; }
|
||||
|
||||
VisualShaderNodeTransformVecMult();
|
||||
};
|
||||
|
||||
@ -1122,6 +1147,8 @@ public:
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_SCALAR; }
|
||||
|
||||
VisualShaderNodeFloatFunc();
|
||||
};
|
||||
|
||||
@ -1166,6 +1193,8 @@ public:
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_SCALAR; }
|
||||
|
||||
VisualShaderNodeIntFunc();
|
||||
};
|
||||
|
||||
@ -1208,6 +1237,8 @@ public:
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_SCALAR; }
|
||||
|
||||
VisualShaderNodeUIntFunc();
|
||||
};
|
||||
|
||||
@ -1327,6 +1358,8 @@ public:
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_COLOR; }
|
||||
|
||||
VisualShaderNodeColorFunc();
|
||||
};
|
||||
|
||||
@ -1369,6 +1402,8 @@ public:
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_TRANSFORM; }
|
||||
|
||||
VisualShaderNodeTransformFunc();
|
||||
};
|
||||
|
||||
@ -1414,6 +1449,8 @@ public:
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_TEXTURES; }
|
||||
|
||||
VisualShaderNodeUVFunc();
|
||||
};
|
||||
|
||||
@ -1440,6 +1477,8 @@ public:
|
||||
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_TEXTURES; }
|
||||
|
||||
VisualShaderNodeUVPolarCoord();
|
||||
};
|
||||
|
||||
@ -1620,6 +1659,8 @@ public:
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_UTILITY; }
|
||||
|
||||
VisualShaderNodeDerivativeFunc();
|
||||
};
|
||||
|
||||
@ -1669,6 +1710,8 @@ public:
|
||||
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_TRANSFORM; }
|
||||
|
||||
VisualShaderNodeOuterProduct();
|
||||
};
|
||||
|
||||
@ -1714,6 +1757,14 @@ public:
|
||||
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override {
|
||||
if (op_type == OP_TYPE_SCALAR) {
|
||||
return CATEGORY_SCALAR;
|
||||
} else {
|
||||
return CATEGORY_VECTOR;
|
||||
}
|
||||
}
|
||||
|
||||
VisualShaderNodeStep();
|
||||
};
|
||||
|
||||
@ -1761,6 +1812,14 @@ public:
|
||||
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override {
|
||||
if (op_type == OP_TYPE_SCALAR) {
|
||||
return CATEGORY_SCALAR;
|
||||
} else {
|
||||
return CATEGORY_VECTOR;
|
||||
}
|
||||
}
|
||||
|
||||
VisualShaderNodeSmoothStep();
|
||||
};
|
||||
|
||||
@ -1852,6 +1911,14 @@ public:
|
||||
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override {
|
||||
if (op_type == OP_TYPE_SCALAR) {
|
||||
return CATEGORY_SCALAR;
|
||||
} else {
|
||||
return CATEGORY_VECTOR;
|
||||
}
|
||||
}
|
||||
|
||||
VisualShaderNodeMix();
|
||||
};
|
||||
|
||||
@ -1898,6 +1965,8 @@ public:
|
||||
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_TRANSFORM; }
|
||||
|
||||
VisualShaderNodeTransformCompose();
|
||||
};
|
||||
|
||||
@ -1921,6 +1990,8 @@ public:
|
||||
virtual void set_op_type(OpType p_op_type) override;
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_VECTOR; }
|
||||
|
||||
VisualShaderNodeVectorDecompose();
|
||||
};
|
||||
|
||||
@ -1942,6 +2013,8 @@ public:
|
||||
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_TRANSFORM; }
|
||||
|
||||
VisualShaderNodeTransformDecompose();
|
||||
};
|
||||
|
||||
@ -2584,6 +2657,8 @@ public:
|
||||
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_CONDITIONAL; }
|
||||
|
||||
VisualShaderNodeIf();
|
||||
};
|
||||
|
||||
@ -2630,6 +2705,8 @@ public:
|
||||
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_CONDITIONAL; }
|
||||
|
||||
VisualShaderNodeSwitch();
|
||||
};
|
||||
|
||||
@ -2698,6 +2775,8 @@ public:
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_CONDITIONAL; }
|
||||
|
||||
VisualShaderNodeIs();
|
||||
};
|
||||
|
||||
@ -2772,6 +2851,8 @@ public:
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
virtual String get_warning(Shader::Mode p_mode, VisualShader::Type p_type) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_CONDITIONAL; }
|
||||
|
||||
VisualShaderNodeCompare();
|
||||
};
|
||||
|
||||
@ -2815,6 +2896,14 @@ public:
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
|
||||
virtual Category get_category() const override {
|
||||
if (op_type == OP_TYPE_SCALAR) {
|
||||
return CATEGORY_SCALAR;
|
||||
} else {
|
||||
return CATEGORY_VECTOR;
|
||||
}
|
||||
}
|
||||
|
||||
VisualShaderNodeMultiplyAdd();
|
||||
};
|
||||
|
||||
@ -2862,6 +2951,8 @@ public:
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_UTILITY; }
|
||||
|
||||
VisualShaderNodeBillboard();
|
||||
};
|
||||
|
||||
@ -2888,6 +2979,8 @@ public:
|
||||
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_UTILITY; }
|
||||
|
||||
VisualShaderNodeDistanceFade();
|
||||
};
|
||||
|
||||
@ -2909,6 +3002,8 @@ public:
|
||||
virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const override;
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_UTILITY; }
|
||||
|
||||
VisualShaderNodeProximityFade();
|
||||
};
|
||||
|
||||
@ -2929,6 +3024,8 @@ public:
|
||||
virtual String generate_global_per_node(Shader::Mode p_mode, int p_id) const override;
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_UTILITY; }
|
||||
|
||||
VisualShaderNodeRandomRange();
|
||||
};
|
||||
|
||||
@ -2948,6 +3045,8 @@ public:
|
||||
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_UTILITY; }
|
||||
|
||||
VisualShaderNodeRemap();
|
||||
};
|
||||
|
||||
@ -2968,6 +3067,8 @@ public:
|
||||
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_UTILITY; }
|
||||
|
||||
VisualShaderNodeRotationByAxis();
|
||||
};
|
||||
|
||||
|
@ -57,6 +57,8 @@ public:
|
||||
virtual HashMap<StringName, String> get_editable_properties_names() const override;
|
||||
bool is_show_prop_names() const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_PARTICLE; }
|
||||
|
||||
VisualShaderNodeParticleEmitter();
|
||||
};
|
||||
|
||||
@ -73,6 +75,8 @@ public:
|
||||
virtual String generate_global_per_node(Shader::Mode p_mode, int p_id) const override;
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_PARTICLE; }
|
||||
|
||||
VisualShaderNodeParticleSphereEmitter();
|
||||
};
|
||||
|
||||
@ -90,6 +94,8 @@ public:
|
||||
virtual String generate_global_per_node(Shader::Mode p_mode, int p_id) const override;
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_PARTICLE; }
|
||||
|
||||
VisualShaderNodeParticleBoxEmitter();
|
||||
};
|
||||
|
||||
@ -106,6 +112,8 @@ public:
|
||||
virtual String generate_global_per_node(Shader::Mode p_mode, int p_id) const override;
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_PARTICLE; }
|
||||
|
||||
VisualShaderNodeParticleRingEmitter();
|
||||
};
|
||||
|
||||
@ -158,6 +166,8 @@ public:
|
||||
HashMap<StringName, String> get_editable_properties_names() const override;
|
||||
Vector<VisualShader::DefaultTextureParam> get_default_texture_parameters(VisualShader::Type p_type, int p_id) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_PARTICLE; }
|
||||
|
||||
VisualShaderNodeParticleMeshEmitter();
|
||||
};
|
||||
|
||||
@ -187,6 +197,8 @@ public:
|
||||
bool is_degrees_mode() const;
|
||||
Vector<StringName> get_editable_properties() const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_PARTICLE; }
|
||||
|
||||
VisualShaderNodeParticleMultiplyByAxisAngle();
|
||||
};
|
||||
|
||||
@ -207,6 +219,8 @@ public:
|
||||
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_PARTICLE; }
|
||||
|
||||
VisualShaderNodeParticleConeVelocity();
|
||||
};
|
||||
|
||||
@ -248,6 +262,8 @@ public:
|
||||
void set_op_type(OpType p_type);
|
||||
OpType get_op_type() const;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_PARTICLE; }
|
||||
|
||||
VisualShaderNodeParticleRandomness();
|
||||
};
|
||||
|
||||
@ -290,6 +306,8 @@ public:
|
||||
void set_mode(Mode p_mode);
|
||||
Mode get_mode() const;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_PARTICLE; }
|
||||
|
||||
VisualShaderNodeParticleAccelerator();
|
||||
};
|
||||
|
||||
@ -352,6 +370,8 @@ public:
|
||||
virtual bool is_input_port_default(int p_port, Shader::Mode p_mode) const override;
|
||||
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
|
||||
|
||||
virtual Category get_category() const override { return CATEGORY_PARTICLE; }
|
||||
|
||||
VisualShaderNodeParticleEmit();
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user