You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-06 12:20:30 +00:00
-Visual Shader Editing Finished, PLEASE TEST!
This commit is contained in:
@@ -383,6 +383,41 @@ void ShaderGraphView::_connection_request(const String& p_from, int p_from_slot,
|
||||
ur->commit_action();
|
||||
|
||||
|
||||
}
|
||||
|
||||
void ShaderGraphView::_disconnection_request(const String& p_from, int p_from_slot,const String& p_to,int p_to_slot) {
|
||||
|
||||
UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo();
|
||||
|
||||
int from_idx=-1;
|
||||
int to_idx=-1;
|
||||
for (Map<int,GraphNode*>::Element *E=node_map.front();E;E=E->next()) {
|
||||
|
||||
if (p_from==E->get()->get_name())
|
||||
from_idx=E->key();
|
||||
if (p_to==E->get()->get_name())
|
||||
to_idx=E->key();
|
||||
}
|
||||
|
||||
ERR_FAIL_COND(from_idx==-1);
|
||||
ERR_FAIL_COND(to_idx==-1);
|
||||
|
||||
if (!graph->is_node_connected(type,from_idx,p_from_slot,to_idx,p_to_slot))
|
||||
return; //nothing to disconnect
|
||||
|
||||
ur->create_action("Disconnect Graph Nodes");
|
||||
|
||||
List<ShaderGraph::Connection> conns;
|
||||
|
||||
graph->get_node_connections(type,&conns);
|
||||
//disconnect/reconnect dependencies
|
||||
ur->add_do_method(graph.ptr(),"disconnect_node",type,from_idx,p_from_slot,to_idx,p_to_slot);
|
||||
ur->add_undo_method(graph.ptr(),"connect_node",type,from_idx,p_from_slot,to_idx,p_to_slot);
|
||||
ur->add_do_method(this,"_update_graph");
|
||||
ur->add_undo_method(this,"_update_graph");
|
||||
ur->commit_action();
|
||||
|
||||
|
||||
}
|
||||
|
||||
void ShaderGraphView::_node_removed(int p_id) {
|
||||
@@ -433,8 +468,8 @@ void ShaderGraphView::_create_node(int p_id) {
|
||||
GraphNode *gn = memnew( GraphNode );
|
||||
gn->set_show_close_button(true);
|
||||
Color typecol[4]={
|
||||
Color(0.2,1,0.2),
|
||||
Color(0.7,0.1,1),
|
||||
Color(0.9,0.4,1),
|
||||
Color(0.8,1,0.2),
|
||||
Color(1,0.2,0.2),
|
||||
Color(0,1,1)
|
||||
};
|
||||
@@ -1262,6 +1297,7 @@ void ShaderGraphView::_bind_methods() {
|
||||
ObjectTypeDB::bind_method("_move_node",&ShaderGraphView::_move_node);
|
||||
ObjectTypeDB::bind_method("_node_removed",&ShaderGraphView::_node_removed);
|
||||
ObjectTypeDB::bind_method("_connection_request",&ShaderGraphView::_connection_request);
|
||||
ObjectTypeDB::bind_method("_disconnection_request",&ShaderGraphView::_disconnection_request);
|
||||
|
||||
ObjectTypeDB::bind_method("_scalar_const_changed",&ShaderGraphView::_scalar_const_changed);
|
||||
ObjectTypeDB::bind_method("_vec_const_changed",&ShaderGraphView::_vec_const_changed);
|
||||
@@ -1318,6 +1354,22 @@ void ShaderGraphEditor::_add_node(int p_type) {
|
||||
|
||||
void ShaderGraphEditor::_notification(int p_what) {
|
||||
if (p_what==NOTIFICATION_ENTER_TREE) {
|
||||
|
||||
for(int i=0;i<ShaderGraph::NODE_TYPE_MAX;i++) {
|
||||
|
||||
if (i==ShaderGraph::NODE_OUTPUT)
|
||||
continue;
|
||||
String nn = node_names[i];
|
||||
String ic = nn.get_slice(":",0);
|
||||
String v = nn.get_slice(":",1);
|
||||
bool addsep=false;
|
||||
if (nn.ends_with(":")) {
|
||||
addsep=true;
|
||||
}
|
||||
menu->get_popup()->add_icon_item(get_icon(ic,"EditorIcons"),v,i);
|
||||
if (addsep)
|
||||
menu->get_popup()->add_separator();
|
||||
}
|
||||
menu->get_popup()->connect("item_pressed",this,"_add_node");
|
||||
|
||||
|
||||
@@ -1332,38 +1384,38 @@ void ShaderGraphEditor::_bind_methods() {
|
||||
|
||||
|
||||
const char* ShaderGraphEditor::node_names[ShaderGraph::NODE_TYPE_MAX]={
|
||||
"Input", // all inputs (shader type dependent)
|
||||
"Scalar Constant", //scalar constant
|
||||
"Vector Constant", //vec3 constant
|
||||
"RGB Constant", //rgb constant (shows a color picker instead)
|
||||
"XForm Constant", // 4x4 matrix constant
|
||||
"Time:", // time in seconds
|
||||
"Screen Sample", // screen texture sampler (takes uv) (only usable in fragment shader)
|
||||
"Scalar Operator", // scalar vs scalar op (mul", add", div", etc)
|
||||
"Vector Operator", // vec3 vs vec3 op (mul",ad",div",crossprod",etc)
|
||||
"Scalar+Vector Operator", // vec3 vs scalar op (mul", add", div", etc)
|
||||
"RGB Operator:", // vec3 vs vec3 rgb op (with scalar amount)", like brighten", darken", burn", dodge", multiply", etc.
|
||||
"XForm Multiply", // mat4 x mat4
|
||||
"XForm+Vector Multiply", // mat4 x vec3 mult (with no-translation option)
|
||||
"XForm+Vector InvMultiply:", // mat4 x vec3 inverse mult (with no-translation option)
|
||||
"Scalar Function", // scalar function (sin", cos", etc)
|
||||
"Vector Function", // vector function (normalize", negate", reciprocal", rgb2hsv", hsv2rgb", etc", etc)
|
||||
"Vector Length", // vec3 length
|
||||
"Dot Product:", // vec3 . vec3 (dot product -> scalar output)
|
||||
"Vector -> Scalars", // 1 vec3 input", 3 scalar outputs
|
||||
"Scalars -> Vector", // 3 scalar input", 1 vec3 output
|
||||
"XForm -> Vectors", // 3 vec input", 1 xform output
|
||||
"Vectors -> XForm:", // 3 vec input", 1 xform output
|
||||
"Scalar Interpolate", // scalar interpolation (with optional curve)
|
||||
"Vector Interpolate:", // vec3 interpolation (with optional curve)
|
||||
"Scalar Uniform", // scalar uniform (assignable in material)
|
||||
"Vector Uniform", // vec3 uniform (assignable in material)
|
||||
"RGB Uniform", // color uniform (assignable in material)
|
||||
"XForm Uniform", // mat4 uniform (assignable in material)
|
||||
"Texture Uniform", // texture input (assignable in material)
|
||||
"CubeMap Uniform:", // cubemap input (assignable in material)
|
||||
"GraphInput:Input", // all inputs (shader type dependent)
|
||||
"GraphScalar:Scalar Constant", //scalar constant
|
||||
"GraphVector:Vector Constant", //vec3 constant
|
||||
"GraphRgb:RGB Constant", //rgb constant (shows a color picker instead)
|
||||
"GraphXform:XForm Constant", // 4x4 matrix constant
|
||||
"GraphTime:Time:", // time in seconds
|
||||
"GraphTexscreen:Screen Sample", // screen texture sampler (takes uv) (only usable in fragment shader)
|
||||
"GraphScalarOp:Scalar Operator", // scalar vs scalar op (mul", add", div", etc)
|
||||
"GraphVecOp:Vector Operator", // vec3 vs vec3 op (mul",ad",div",crossprod",etc)
|
||||
"GraphVecScalarOp:Scalar+Vector Operator", // vec3 vs scalar op (mul", add", div", etc)
|
||||
"GraphRgbOp:RGB Operator:", // vec3 vs vec3 rgb op (with scalar amount)", like brighten", darken", burn", dodge", multiply", etc.
|
||||
"GraphXformMult:XForm Multiply", // mat4 x mat4
|
||||
"GraphXformVecMult:XForm+Vector Multiply", // mat4 x vec3 mult (with no-translation option)
|
||||
"GraphXformVecImult:Form+Vector InvMultiply:", // mat4 x vec3 inverse mult (with no-translation option)
|
||||
"GraphXformScalarFunc:Scalar Function", // scalar function (sin", cos", etc)
|
||||
"GraphXformVecFunc:Vector Function", // vector function (normalize", negate", reciprocal", rgb2hsv", hsv2rgb", etc", etc)
|
||||
"GraphVecLength:Vector Length", // vec3 length
|
||||
"GraphVecDp:Dot Product:", // vec3 . vec3 (dot product -> scalar output)
|
||||
"GraphVecToScalars:Vector -> Scalars", // 1 vec3 input", 3 scalar outputs
|
||||
"GraphScalarsToVec:Scalars -> Vector", // 3 scalar input", 1 vec3 output
|
||||
"GraphXformToVecs:XForm -> Vectors", // 3 vec input", 1 xform output
|
||||
"GraphVecsToXform:Vectors -> XForm:", // 3 vec input", 1 xform output
|
||||
"GraphScalarInterp:Scalar Interpolate", // scalar interpolation (with optional curve)
|
||||
"GraphVecInterp:Vector Interpolate:", // vec3 interpolation (with optional curve)
|
||||
"GraphScalarUniform:Scalar Uniform", // scalar uniform (assignable in material)
|
||||
"GraphVectorUniform:Vector Uniform", // vec3 uniform (assignable in material)
|
||||
"GraphRgbUniform:RGB Uniform", // color uniform (assignable in material)
|
||||
"GraphXformUniform:XForm Uniform", // mat4 uniform (assignable in material)
|
||||
"GraphTextureUniform:Texture Uniform", // texture input (assignable in material)
|
||||
"GraphCubeUniform:CubeMap Uniform:", // cubemap input (assignable in material)
|
||||
"Output", // output (shader type dependent)
|
||||
"Comment", // comment
|
||||
"GraphComment:Comment", // comment
|
||||
|
||||
|
||||
};
|
||||
@@ -1374,20 +1426,7 @@ ShaderGraphEditor::ShaderGraphEditor() {
|
||||
menu->set_text("Add..");
|
||||
hbc->add_child(menu);
|
||||
add_child(hbc);
|
||||
for(int i=0;i<ShaderGraph::NODE_TYPE_MAX;i++) {
|
||||
|
||||
if (i==ShaderGraph::NODE_OUTPUT)
|
||||
continue;
|
||||
String v = node_names[i];
|
||||
bool addsep=false;
|
||||
if (v.ends_with(":")) {
|
||||
addsep=true;
|
||||
v=v.substr(0,v.length()-1);
|
||||
}
|
||||
menu->get_popup()->add_item(v,i);
|
||||
if (addsep)
|
||||
menu->get_popup()->add_separator();
|
||||
}
|
||||
|
||||
tabs = memnew(TabContainer);
|
||||
tabs->set_v_size_flags(SIZE_EXPAND_FILL);
|
||||
@@ -1404,8 +1443,12 @@ ShaderGraphEditor::ShaderGraphEditor() {
|
||||
graph_edits[i]->get_graph_edit()->set_name(sname[i]);
|
||||
tabs->add_child(graph_edits[i]->get_graph_edit());
|
||||
graph_edits[i]->get_graph_edit()->connect("connection_request",graph_edits[i],"_connection_request");
|
||||
graph_edits[i]->get_graph_edit()->connect("disconnection_request",graph_edits[i],"_disconnection_request");
|
||||
graph_edits[i]->get_graph_edit()->set_right_disconnects(true);
|
||||
}
|
||||
|
||||
tabs->set_current_tab(1);
|
||||
|
||||
set_custom_minimum_size(Size2(100,300));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user