Merge pull request #28838 from Chaosus/vs_exp
Expression node for visual shaders
This commit is contained in:
@@ -239,6 +239,9 @@ void editor_register_fonts(Ref<Theme> p_theme) {
|
||||
MAKE_SOURCE_FONT(df_code, int(EditorSettings::get_singleton()->get("interface/editor/code_font_size")) * EDSCALE);
|
||||
p_theme->set_font("source", "EditorFonts", df_code);
|
||||
|
||||
MAKE_SOURCE_FONT(df_expression, (int(EditorSettings::get_singleton()->get("interface/editor/code_font_size")) - 1) * EDSCALE);
|
||||
p_theme->set_font("expression", "EditorFonts", df_expression);
|
||||
|
||||
MAKE_SOURCE_FONT(df_output_code, int(EDITOR_DEF("run/output/font_size", 13)) * EDSCALE);
|
||||
p_theme->set_font("output_source", "EditorFonts", df_output_code);
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -84,6 +84,8 @@ class VisualShaderEditor : public VBoxContainer {
|
||||
LineEdit *node_filter;
|
||||
RichTextLabel *node_desc;
|
||||
|
||||
Timer *build_timer;
|
||||
|
||||
void _tools_menu_option(int p_idx);
|
||||
void _show_members_dialog(bool at_mouse_pos);
|
||||
|
||||
@@ -128,6 +130,7 @@ class VisualShaderEditor : public VBoxContainer {
|
||||
};
|
||||
|
||||
Vector<AddOption> add_options;
|
||||
List<String> keyword_list;
|
||||
|
||||
void _draw_color_over_button(Object *obj, Color p_color);
|
||||
|
||||
@@ -160,14 +163,35 @@ class VisualShaderEditor : public VBoxContainer {
|
||||
void _line_edit_changed(const String &p_text, Object *line_edit, int p_node_id);
|
||||
void _line_edit_focus_out(Object *line_edit, int p_node_id);
|
||||
|
||||
void _port_name_focus_out(Object *line_edit, int p_node_id, int p_port_id, bool p_output);
|
||||
|
||||
void _duplicate_nodes();
|
||||
|
||||
Vector<Ref<VisualShaderNodePlugin> > plugins;
|
||||
|
||||
void _mode_selected(int p_id);
|
||||
void _rebuild();
|
||||
|
||||
void _input_select_item(Ref<VisualShaderNodeInput> input, String name);
|
||||
|
||||
void _add_input_port(int p_node, int p_port, int p_type, const String &p_name);
|
||||
void _remove_input_port(int p_node, int p_port);
|
||||
void _change_input_port_type(int p_type, int p_node, int p_port);
|
||||
void _change_input_port_name(const String &p_text, Object *line_edit, int p_node, int p_port);
|
||||
|
||||
void _add_output_port(int p_node, int p_port, int p_type, const String &p_name);
|
||||
void _remove_output_port(int p_node, int p_port);
|
||||
void _change_output_port_type(int p_type, int p_node, int p_port);
|
||||
void _change_output_port_name(const String &p_text, Object *line_edit, int p_node, int p_port);
|
||||
|
||||
void _start_rebuild_timer(int p_delay);
|
||||
|
||||
void _set_expression(int p_node);
|
||||
void _rebuild_timeout();
|
||||
|
||||
void _set_node_size(int p_type, int p_node, const Size2 &p_size);
|
||||
void _node_resized(const Vector2 &p_new_size, int p_type, int p_node);
|
||||
|
||||
void _preview_select_port(int p_node, int p_port);
|
||||
void _graph_gui_input(const Ref<InputEvent> p_event);
|
||||
|
||||
|
||||
@@ -476,6 +476,7 @@ void register_scene_types() {
|
||||
ClassDB::register_virtual_class<VisualShaderNode>();
|
||||
ClassDB::register_class<VisualShaderNodeInput>();
|
||||
ClassDB::register_virtual_class<VisualShaderNodeOutput>();
|
||||
ClassDB::register_class<VisualShaderNodeGroupBase>();
|
||||
ClassDB::register_class<VisualShaderNodeScalarConstant>();
|
||||
ClassDB::register_class<VisualShaderNodeBooleanConstant>();
|
||||
ClassDB::register_class<VisualShaderNodeColorConstant>();
|
||||
@@ -524,6 +525,7 @@ void register_scene_types() {
|
||||
ClassDB::register_class<VisualShaderNodeIf>();
|
||||
ClassDB::register_class<VisualShaderNodeSwitch>();
|
||||
ClassDB::register_class<VisualShaderNodeFresnel>();
|
||||
ClassDB::register_class<VisualShaderNodeExpression>();
|
||||
|
||||
ClassDB::register_class<ShaderMaterial>();
|
||||
ClassDB::register_virtual_class<CanvasItem>();
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -135,7 +135,9 @@ public:
|
||||
bool can_connect_nodes(Type p_type, int p_from_node, int p_from_port, int p_to_node, int p_to_port) const;
|
||||
Error connect_nodes(Type p_type, int p_from_node, int p_from_port, int p_to_node, int p_to_port);
|
||||
void disconnect_nodes(Type p_type, int p_from_node, int p_from_port, int p_to_node, int p_to_port);
|
||||
void connect_nodes_forced(Type p_type, int p_from_node, int p_from_port, int p_to_node, int p_to_port);
|
||||
|
||||
void rebuild();
|
||||
void get_node_connections(Type p_type, List<Connection> *r_connections) const;
|
||||
|
||||
void set_mode(Mode p_mode);
|
||||
@@ -148,6 +150,7 @@ public:
|
||||
|
||||
String generate_preview_shader(Type p_type, int p_node, int p_port, Vector<DefaultTextureParam> &r_default_tex_params) const;
|
||||
|
||||
String validate_port_name(const String &p_name, const List<String> &p_input_ports, const List<String> &p_output_ports) const;
|
||||
String validate_uniform_name(const String &p_name, const Ref<VisualShaderNodeUniform> &p_uniform) const;
|
||||
|
||||
VisualShader();
|
||||
@@ -314,4 +317,93 @@ public:
|
||||
VisualShaderNodeUniform();
|
||||
};
|
||||
|
||||
class VisualShaderNodeGroupBase : public VisualShaderNode {
|
||||
GDCLASS(VisualShaderNodeGroupBase, VisualShaderNode)
|
||||
private:
|
||||
void _apply_port_changes();
|
||||
|
||||
protected:
|
||||
Vector2 size;
|
||||
String inputs;
|
||||
String outputs;
|
||||
|
||||
struct Port {
|
||||
PortType type;
|
||||
String name;
|
||||
};
|
||||
|
||||
Map<int, Port> input_ports;
|
||||
Map<int, Port> output_ports;
|
||||
Map<int, Control *> controls;
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
public:
|
||||
virtual String get_caption() const;
|
||||
|
||||
void set_size(const Vector2 &p_size);
|
||||
Vector2 get_size() const;
|
||||
|
||||
void set_inputs(const String &p_inputs);
|
||||
String get_inputs() const;
|
||||
|
||||
void set_outputs(const String &p_outputs);
|
||||
String get_outputs() const;
|
||||
|
||||
void add_input_port(int p_id, int p_type, const String &p_name);
|
||||
void remove_input_port(int p_id);
|
||||
virtual int get_input_port_count() const;
|
||||
bool has_input_port(int p_id) const;
|
||||
void clear_input_ports();
|
||||
|
||||
void add_output_port(int p_id, int p_type, const String &p_name);
|
||||
void remove_output_port(int p_id);
|
||||
virtual int get_output_port_count() const;
|
||||
bool has_output_port(int p_id) const;
|
||||
void clear_output_ports();
|
||||
|
||||
void set_input_port_type(int p_id, int p_type);
|
||||
virtual PortType get_input_port_type(int p_id) const;
|
||||
void set_input_port_name(int p_id, const String &p_name);
|
||||
virtual String get_input_port_name(int p_id) const;
|
||||
|
||||
void set_output_port_type(int p_id, int p_type);
|
||||
virtual PortType get_output_port_type(int p_id) const;
|
||||
void set_output_port_name(int p_id, const String &p_name);
|
||||
virtual String get_output_port_name(int p_id) const;
|
||||
|
||||
int get_free_input_port_id() const;
|
||||
int get_free_output_port_id() const;
|
||||
|
||||
void set_control(Control *p_control, int p_index);
|
||||
Control *get_control(int p_index);
|
||||
|
||||
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;
|
||||
|
||||
VisualShaderNodeGroupBase();
|
||||
};
|
||||
|
||||
class VisualShaderNodeExpression : public VisualShaderNodeGroupBase {
|
||||
GDCLASS(VisualShaderNodeExpression, VisualShaderNodeGroupBase)
|
||||
|
||||
private:
|
||||
String expression;
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
public:
|
||||
virtual String get_caption() const;
|
||||
|
||||
void set_expression(const String &p_expression);
|
||||
String get_expression() const;
|
||||
|
||||
void build();
|
||||
|
||||
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;
|
||||
|
||||
VisualShaderNodeExpression();
|
||||
};
|
||||
|
||||
#endif // VISUAL_SHADER_H
|
||||
|
||||
Reference in New Issue
Block a user