mirror of
https://github.com/godotengine/godot.git
synced 2025-10-20 00:13:30 +00:00
Visual Shaders are back.
This commit is contained in:
parent
1fc7973a00
commit
f6ce73f724
32 changed files with 6368 additions and 93 deletions
186
editor/plugins/visual_shader_editor_plugin.h
Normal file
186
editor/plugins/visual_shader_editor_plugin.h
Normal file
|
@ -0,0 +1,186 @@
|
|||
#ifndef VISUAL_SHADER_EDITOR_PLUGIN_H
|
||||
#define VISUAL_SHADER_EDITOR_PLUGIN_H
|
||||
|
||||
#include "editor/editor_node.h"
|
||||
#include "editor/editor_plugin.h"
|
||||
#include "editor/property_editor.h"
|
||||
#include "scene/gui/button.h"
|
||||
#include "scene/gui/graph_edit.h"
|
||||
#include "scene/gui/popup.h"
|
||||
#include "scene/gui/tree.h"
|
||||
#include "scene/resources/visual_shader.h"
|
||||
|
||||
class VisualShaderNodePlugin : public Reference {
|
||||
|
||||
GDCLASS(VisualShaderNodePlugin, Reference)
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
public:
|
||||
virtual Control *create_editor(const Ref<VisualShaderNode> &p_node);
|
||||
};
|
||||
|
||||
class VisualShaderEditor : public VBoxContainer {
|
||||
|
||||
GDCLASS(VisualShaderEditor, VBoxContainer);
|
||||
|
||||
CustomPropertyEditor *property_editor;
|
||||
int editing_node;
|
||||
int editing_port;
|
||||
|
||||
Ref<VisualShader> visual_shader;
|
||||
GraphEdit *graph;
|
||||
MenuButton *add_node;
|
||||
|
||||
OptionButton *edit_type;
|
||||
|
||||
PanelContainer *error_panel;
|
||||
Label *error_label;
|
||||
|
||||
UndoRedo *undo_redo;
|
||||
|
||||
void _update_graph();
|
||||
|
||||
struct AddOption {
|
||||
String name;
|
||||
String category;
|
||||
String type;
|
||||
Ref<Script> script;
|
||||
AddOption(const String &p_name = String(), const String &p_category = String(), const String &p_type = String()) {
|
||||
name = p_name;
|
||||
type = p_type;
|
||||
category = p_category;
|
||||
}
|
||||
};
|
||||
|
||||
Vector<AddOption> add_options;
|
||||
|
||||
void _draw_color_over_button(Object *obj, Color p_color);
|
||||
|
||||
void _add_node(int p_idx);
|
||||
void _update_options_menu();
|
||||
|
||||
static VisualShaderEditor *singleton;
|
||||
|
||||
void _node_dragged(const Vector2 &p_from, const Vector2 &p_to, int p_node);
|
||||
bool updating;
|
||||
|
||||
void _connection_request(const String &p_from, int p_from_index, const String &p_to, int p_to_index);
|
||||
void _disconnection_request(const String &p_from, int p_from_index, const String &p_to, int p_to_index);
|
||||
|
||||
void _scroll_changed(const Vector2 &p_scroll);
|
||||
void _node_selected(Object *p_node);
|
||||
|
||||
void _delete_request(int);
|
||||
|
||||
void _removed_from_graph();
|
||||
|
||||
void _node_changed(int p_id);
|
||||
|
||||
void _edit_port_default_input(Object *p_button, int p_node, int p_port);
|
||||
void _port_edited();
|
||||
|
||||
void _connection_to_empty(const String &p_from, int p_from_slot, const Vector2 &p_release_position);
|
||||
|
||||
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 _duplicate_nodes();
|
||||
|
||||
Vector<Ref<VisualShaderNodePlugin> > plugins;
|
||||
|
||||
void _mode_selected(int p_id);
|
||||
|
||||
void _input_select_item(Ref<VisualShaderNodeInput> input, String name);
|
||||
|
||||
void _preview_select_port(int p_node, int p_port);
|
||||
|
||||
protected:
|
||||
void _notification(int p_what);
|
||||
static void _bind_methods();
|
||||
|
||||
public:
|
||||
void add_plugin(const Ref<VisualShaderNodePlugin> &p_plugin);
|
||||
void remove_plugin(const Ref<VisualShaderNodePlugin> &p_plugin);
|
||||
|
||||
static VisualShaderEditor *get_singleton() { return singleton; }
|
||||
|
||||
void add_custom_type(const String &p_name, const String &p_category, const Ref<Script> &p_script);
|
||||
void remove_custom_type(const Ref<Script> &p_script);
|
||||
|
||||
virtual Size2 get_minimum_size() const;
|
||||
void edit(VisualShader *p_visual_shader);
|
||||
VisualShaderEditor();
|
||||
};
|
||||
|
||||
class VisualShaderEditorPlugin : public EditorPlugin {
|
||||
|
||||
GDCLASS(VisualShaderEditorPlugin, EditorPlugin);
|
||||
|
||||
VisualShaderEditor *visual_shader_editor;
|
||||
EditorNode *editor;
|
||||
Button *button;
|
||||
|
||||
public:
|
||||
virtual String get_name() const { return "VisualShader"; }
|
||||
bool has_main_screen() const { return false; }
|
||||
virtual void edit(Object *p_object);
|
||||
virtual bool handles(Object *p_object) const;
|
||||
virtual void make_visible(bool p_visible);
|
||||
|
||||
VisualShaderEditorPlugin(EditorNode *p_node);
|
||||
~VisualShaderEditorPlugin();
|
||||
};
|
||||
|
||||
class VisualShaderNodePluginDefault : public VisualShaderNodePlugin {
|
||||
|
||||
GDCLASS(VisualShaderNodePluginDefault, VisualShaderNodePlugin)
|
||||
|
||||
public:
|
||||
virtual Control *create_editor(const Ref<VisualShaderNode> &p_node);
|
||||
};
|
||||
|
||||
class EditorPropertyShaderMode : public EditorProperty {
|
||||
GDCLASS(EditorPropertyShaderMode, EditorProperty)
|
||||
OptionButton *options;
|
||||
|
||||
void _option_selected(int p_which);
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
public:
|
||||
void setup(const Vector<String> &p_options);
|
||||
virtual void update_property();
|
||||
void set_option_button_clip(bool p_enable);
|
||||
EditorPropertyShaderMode();
|
||||
};
|
||||
|
||||
class EditorInspectorShaderModePlugin : public EditorInspectorPlugin {
|
||||
GDCLASS(EditorInspectorShaderModePlugin, EditorInspectorPlugin)
|
||||
|
||||
public:
|
||||
virtual bool can_handle(Object *p_object);
|
||||
virtual void parse_begin(Object *p_object);
|
||||
virtual bool parse_property(Object *p_object, Variant::Type p_type, const String &p_path, PropertyHint p_hint, const String &p_hint_text, int p_usage);
|
||||
virtual void parse_end();
|
||||
};
|
||||
|
||||
class VisualShaderNodePortPreview : public Control {
|
||||
GDCLASS(VisualShaderNodePortPreview, Control)
|
||||
Ref<VisualShader> shader;
|
||||
VisualShader::Type type;
|
||||
int node;
|
||||
int port;
|
||||
void _shader_changed(); //must regen
|
||||
protected:
|
||||
void _notification(int p_what);
|
||||
static void _bind_methods();
|
||||
|
||||
public:
|
||||
virtual Size2 get_minimum_size() const;
|
||||
void setup(const Ref<VisualShader> &p_shader, VisualShader::Type p_type, int p_node, int p_port);
|
||||
VisualShaderNodePortPreview();
|
||||
};
|
||||
|
||||
#endif // VISUAL_SHADER_EDITOR_PLUGIN_H
|
Loading…
Add table
Add a link
Reference in a new issue