mirror of
https://github.com/godotengine/godot.git
synced 2025-11-01 06:01:14 +00:00
Added sampler port type for visual shaders
This commit is contained in:
parent
a6eeb1a38e
commit
f14bcd8cc5
6 changed files with 124 additions and 35 deletions
|
|
@ -51,8 +51,11 @@
|
||||||
<constant name="PORT_TYPE_TRANSFORM" value="3" enum="PortType">
|
<constant name="PORT_TYPE_TRANSFORM" value="3" enum="PortType">
|
||||||
Transform type. Translated to [code]mat4[/code] type in shader code.
|
Transform type. Translated to [code]mat4[/code] type in shader code.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="PORT_TYPE_ICON_COLOR" value="4" enum="PortType">
|
<constant name="PORT_TYPE_SAMPLER" value="4" enum="PortType">
|
||||||
Color type. Can be used for return icon type in members dialog (see [method VisualShaderNodeCustom._get_return_icon_type]) - do not use it in other cases!
|
Sampler type. Translated to reference of sampler uniform in shader code. Can only be used for input ports in non-uniform nodes.
|
||||||
|
</constant>
|
||||||
|
<constant name="PORT_TYPE_MAX" value="5" enum="PortType">
|
||||||
|
Represents the size of the [enum PortType] enum.
|
||||||
</constant>
|
</constant>
|
||||||
</constants>
|
</constants>
|
||||||
</class>
|
</class>
|
||||||
|
|
|
||||||
|
|
@ -359,8 +359,8 @@ void VisualShaderEditor::_update_options_menu() {
|
||||||
case VisualShaderNode::PORT_TYPE_TRANSFORM:
|
case VisualShaderNode::PORT_TYPE_TRANSFORM:
|
||||||
item->set_icon(0, EditorNode::get_singleton()->get_gui_base()->get_icon("Transform", "EditorIcons"));
|
item->set_icon(0, EditorNode::get_singleton()->get_gui_base()->get_icon("Transform", "EditorIcons"));
|
||||||
break;
|
break;
|
||||||
case VisualShaderNode::PORT_TYPE_ICON_COLOR:
|
case VisualShaderNode::PORT_TYPE_SAMPLER:
|
||||||
item->set_icon(0, EditorNode::get_singleton()->get_gui_base()->get_icon("Color", "EditorIcons"));
|
item->set_icon(0, EditorNode::get_singleton()->get_gui_base()->get_icon("ImageTexture", "EditorIcons"));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
@ -437,11 +437,12 @@ void VisualShaderEditor::_update_graph() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static const Color type_color[4] = {
|
static const Color type_color[5] = {
|
||||||
Color(0.38, 0.85, 0.96), // scalar
|
Color(0.38, 0.85, 0.96), // scalar
|
||||||
Color(0.84, 0.49, 0.93), // vector
|
Color(0.84, 0.49, 0.93), // vector
|
||||||
Color(0.55, 0.65, 0.94), // boolean
|
Color(0.55, 0.65, 0.94), // boolean
|
||||||
Color(0.96, 0.66, 0.43) // transform
|
Color(0.96, 0.66, 0.43), // transform
|
||||||
|
Color(1.0, 1.0, 0.0) // sampler
|
||||||
};
|
};
|
||||||
|
|
||||||
List<VisualShader::Connection> connections;
|
List<VisualShader::Connection> connections;
|
||||||
|
|
@ -640,6 +641,7 @@ void VisualShaderEditor::_update_graph() {
|
||||||
type_box->add_item(TTR("Vector"));
|
type_box->add_item(TTR("Vector"));
|
||||||
type_box->add_item(TTR("Boolean"));
|
type_box->add_item(TTR("Boolean"));
|
||||||
type_box->add_item(TTR("Transform"));
|
type_box->add_item(TTR("Transform"));
|
||||||
|
type_box->add_item(TTR("Sampler"));
|
||||||
type_box->select(group_node->get_input_port_type(i));
|
type_box->select(group_node->get_input_port_type(i));
|
||||||
type_box->set_custom_minimum_size(Size2(100 * EDSCALE, 0));
|
type_box->set_custom_minimum_size(Size2(100 * EDSCALE, 0));
|
||||||
type_box->connect("item_selected", this, "_change_input_port_type", varray(nodes[n_i], i), CONNECT_DEFERRED);
|
type_box->connect("item_selected", this, "_change_input_port_type", varray(nodes[n_i], i), CONNECT_DEFERRED);
|
||||||
|
|
@ -704,7 +706,7 @@ void VisualShaderEditor::_update_graph() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (valid_right && edit_type->get_selected() == VisualShader::TYPE_FRAGMENT && port_right != VisualShaderNode::PORT_TYPE_TRANSFORM) {
|
if (valid_right && edit_type->get_selected() == VisualShader::TYPE_FRAGMENT && port_right != VisualShaderNode::PORT_TYPE_TRANSFORM && port_right != VisualShaderNode::PORT_TYPE_SAMPLER) {
|
||||||
TextureButton *preview = memnew(TextureButton);
|
TextureButton *preview = memnew(TextureButton);
|
||||||
preview->set_toggle_mode(true);
|
preview->set_toggle_mode(true);
|
||||||
preview->set_normal_texture(get_icon("GuiVisibilityHidden", "EditorIcons"));
|
preview->set_normal_texture(get_icon("GuiVisibilityHidden", "EditorIcons"));
|
||||||
|
|
@ -731,15 +733,19 @@ void VisualShaderEditor::_update_graph() {
|
||||||
node->set_slot(i + port_offset, valid_left, port_left, type_color[port_left], valid_right, port_right, type_color[port_right]);
|
node->set_slot(i + port_offset, valid_left, port_left, type_color[port_left], valid_right, port_right, type_color[port_right]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vsnode->get_output_port_for_preview() >= 0 && vsnode->get_output_port_type(vsnode->get_output_port_for_preview()) != VisualShaderNode::PORT_TYPE_TRANSFORM) {
|
if (vsnode->get_output_port_for_preview() >= 0) {
|
||||||
offset = memnew(Control);
|
int port_type = vsnode->get_output_port_type(vsnode->get_output_port_for_preview());
|
||||||
offset->set_custom_minimum_size(Size2(0, 5 * EDSCALE));
|
|
||||||
node->add_child(offset);
|
|
||||||
|
|
||||||
VisualShaderNodePortPreview *port_preview = memnew(VisualShaderNodePortPreview);
|
if (port_type != VisualShaderNode::PORT_TYPE_TRANSFORM && port_type != VisualShaderNode::PORT_TYPE_SAMPLER) {
|
||||||
port_preview->setup(visual_shader, type, nodes[n_i], vsnode->get_output_port_for_preview());
|
offset = memnew(Control);
|
||||||
port_preview->set_h_size_flags(SIZE_SHRINK_CENTER);
|
offset->set_custom_minimum_size(Size2(0, 5 * EDSCALE));
|
||||||
node->add_child(port_preview);
|
node->add_child(offset);
|
||||||
|
|
||||||
|
VisualShaderNodePortPreview *port_preview = memnew(VisualShaderNodePortPreview);
|
||||||
|
port_preview->setup(visual_shader, type, nodes[n_i], vsnode->get_output_port_for_preview());
|
||||||
|
port_preview->set_h_size_flags(SIZE_SHRINK_CENTER);
|
||||||
|
node->add_child(port_preview);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
offset = memnew(Control);
|
offset = memnew(Control);
|
||||||
|
|
@ -2214,6 +2220,7 @@ VisualShaderEditor::VisualShaderEditor() {
|
||||||
graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_BOOLEAN);
|
graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_BOOLEAN);
|
||||||
graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_VECTOR);
|
graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_VECTOR);
|
||||||
graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_TRANSFORM);
|
graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_TRANSFORM);
|
||||||
|
graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_SAMPLER);
|
||||||
//graph->add_valid_left_disconnect_type(0);
|
//graph->add_valid_left_disconnect_type(0);
|
||||||
graph->set_v_size_flags(SIZE_EXPAND_FILL);
|
graph->set_v_size_flags(SIZE_EXPAND_FILL);
|
||||||
graph->connect("connection_request", this, "_connection_request", varray(), CONNECT_DEFERRED);
|
graph->connect("connection_request", this, "_connection_request", varray(), CONNECT_DEFERRED);
|
||||||
|
|
@ -2237,6 +2244,7 @@ VisualShaderEditor::VisualShaderEditor() {
|
||||||
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_BOOLEAN, VisualShaderNode::PORT_TYPE_VECTOR);
|
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_BOOLEAN, VisualShaderNode::PORT_TYPE_VECTOR);
|
||||||
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_BOOLEAN, VisualShaderNode::PORT_TYPE_BOOLEAN);
|
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_BOOLEAN, VisualShaderNode::PORT_TYPE_BOOLEAN);
|
||||||
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_TRANSFORM, VisualShaderNode::PORT_TYPE_TRANSFORM);
|
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_TRANSFORM, VisualShaderNode::PORT_TYPE_TRANSFORM);
|
||||||
|
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_SAMPLER, VisualShaderNode::PORT_TYPE_SAMPLER);
|
||||||
|
|
||||||
VSeparator *vs = memnew(VSeparator);
|
VSeparator *vs = memnew(VSeparator);
|
||||||
graph->get_zoom_hbox()->add_child(vs);
|
graph->get_zoom_hbox()->add_child(vs);
|
||||||
|
|
@ -2373,8 +2381,8 @@ VisualShaderEditor::VisualShaderEditor() {
|
||||||
add_options.push_back(AddOption("Screen", "Color", "Operators", "VisualShaderNodeColorOp", TTR("Screen operator."), VisualShaderNodeColorOp::OP_SCREEN, VisualShaderNode::PORT_TYPE_VECTOR));
|
add_options.push_back(AddOption("Screen", "Color", "Operators", "VisualShaderNodeColorOp", TTR("Screen operator."), VisualShaderNodeColorOp::OP_SCREEN, VisualShaderNode::PORT_TYPE_VECTOR));
|
||||||
add_options.push_back(AddOption("SoftLight", "Color", "Operators", "VisualShaderNodeColorOp", TTR("SoftLight operator."), VisualShaderNodeColorOp::OP_SOFT_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR));
|
add_options.push_back(AddOption("SoftLight", "Color", "Operators", "VisualShaderNodeColorOp", TTR("SoftLight operator."), VisualShaderNodeColorOp::OP_SOFT_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR));
|
||||||
|
|
||||||
add_options.push_back(AddOption("ColorConstant", "Color", "Variables", "VisualShaderNodeColorConstant", TTR("Color constant."), -1, VisualShaderNode::PORT_TYPE_ICON_COLOR));
|
add_options.push_back(AddOption("ColorConstant", "Color", "Variables", "VisualShaderNodeColorConstant", TTR("Color constant."), -1, -1));
|
||||||
add_options.push_back(AddOption("ColorUniform", "Color", "Variables", "VisualShaderNodeColorUniform", TTR("Color uniform."), -1, VisualShaderNode::PORT_TYPE_ICON_COLOR));
|
add_options.push_back(AddOption("ColorUniform", "Color", "Variables", "VisualShaderNodeColorUniform", TTR("Color uniform."), -1, -1));
|
||||||
|
|
||||||
// CONDITIONAL
|
// CONDITIONAL
|
||||||
|
|
||||||
|
|
@ -2580,13 +2588,13 @@ VisualShaderEditor::VisualShaderEditor() {
|
||||||
|
|
||||||
// TEXTURES
|
// TEXTURES
|
||||||
|
|
||||||
add_options.push_back(AddOption("CubeMap", "Textures", "Functions", "VisualShaderNodeCubeMap", TTR("Perform the cubic texture lookup."), -1, VisualShaderNode::PORT_TYPE_ICON_COLOR));
|
add_options.push_back(AddOption("CubeMap", "Textures", "Functions", "VisualShaderNodeCubeMap", TTR("Perform the cubic texture lookup."), -1, -1));
|
||||||
texture_node_option_idx = add_options.size();
|
texture_node_option_idx = add_options.size();
|
||||||
add_options.push_back(AddOption("Texture", "Textures", "Functions", "VisualShaderNodeTexture", TTR("Perform the texture lookup."), -1, VisualShaderNode::PORT_TYPE_ICON_COLOR));
|
add_options.push_back(AddOption("Texture", "Textures", "Functions", "VisualShaderNodeTexture", TTR("Perform the texture lookup."), -1, -1));
|
||||||
|
|
||||||
add_options.push_back(AddOption("CubeMapUniform", "Textures", "Variables", "VisualShaderNodeCubeMapUniform", TTR("Cubic texture uniform lookup."), -1, VisualShaderNode::PORT_TYPE_ICON_COLOR));
|
add_options.push_back(AddOption("CubeMapUniform", "Textures", "Variables", "VisualShaderNodeCubeMapUniform", TTR("Cubic texture uniform lookup."), -1, -1));
|
||||||
add_options.push_back(AddOption("TextureUniform", "Textures", "Variables", "VisualShaderNodeTextureUniform", TTR("2D texture uniform lookup."), -1, VisualShaderNode::PORT_TYPE_ICON_COLOR));
|
add_options.push_back(AddOption("TextureUniform", "Textures", "Variables", "VisualShaderNodeTextureUniform", TTR("2D texture uniform lookup."), -1, -1));
|
||||||
add_options.push_back(AddOption("TextureUniformTriplanar", "Textures", "Variables", "VisualShaderNodeTextureUniformTriplanar", TTR("2D texture uniform lookup with triplanar."), -1, VisualShaderNode::PORT_TYPE_ICON_COLOR, VisualShader::TYPE_FRAGMENT | VisualShader::TYPE_LIGHT, Shader::MODE_SPATIAL));
|
add_options.push_back(AddOption("TextureUniformTriplanar", "Textures", "Variables", "VisualShaderNodeTextureUniformTriplanar", TTR("2D texture uniform lookup with triplanar."), -1, -1, VisualShader::TYPE_FRAGMENT | VisualShader::TYPE_LIGHT, Shader::MODE_SPATIAL));
|
||||||
|
|
||||||
// TRANSFORM
|
// TRANSFORM
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -122,7 +122,8 @@ void VisualShaderNode::_bind_methods() {
|
||||||
BIND_ENUM_CONSTANT(PORT_TYPE_VECTOR);
|
BIND_ENUM_CONSTANT(PORT_TYPE_VECTOR);
|
||||||
BIND_ENUM_CONSTANT(PORT_TYPE_BOOLEAN);
|
BIND_ENUM_CONSTANT(PORT_TYPE_BOOLEAN);
|
||||||
BIND_ENUM_CONSTANT(PORT_TYPE_TRANSFORM);
|
BIND_ENUM_CONSTANT(PORT_TYPE_TRANSFORM);
|
||||||
BIND_ENUM_CONSTANT(PORT_TYPE_ICON_COLOR);
|
BIND_ENUM_CONSTANT(PORT_TYPE_SAMPLER);
|
||||||
|
BIND_ENUM_CONSTANT(PORT_TYPE_MAX);
|
||||||
}
|
}
|
||||||
|
|
||||||
VisualShaderNode::VisualShaderNode() {
|
VisualShaderNode::VisualShaderNode() {
|
||||||
|
|
@ -1058,7 +1059,15 @@ Error VisualShader::_write_node(Type type, StringBuilder &global_code, StringBui
|
||||||
|
|
||||||
String src_var = "n_out" + itos(from_node) + "p" + itos(from_port);
|
String src_var = "n_out" + itos(from_node) + "p" + itos(from_port);
|
||||||
|
|
||||||
if (in_type == out_type) {
|
if (in_type == VisualShaderNode::PORT_TYPE_SAMPLER && out_type == VisualShaderNode::PORT_TYPE_SAMPLER) {
|
||||||
|
|
||||||
|
VisualShaderNodeUniform *uniform = (VisualShaderNodeUniform *)graph[type].nodes[from_node].node.ptr();
|
||||||
|
if (uniform) {
|
||||||
|
inputs[i] = uniform->get_uniform_name();
|
||||||
|
} else {
|
||||||
|
inputs[i] = "";
|
||||||
|
}
|
||||||
|
} else if (in_type == out_type) {
|
||||||
inputs[i] = src_var;
|
inputs[i] = src_var;
|
||||||
} else if (in_type == VisualShaderNode::PORT_TYPE_SCALAR && out_type == VisualShaderNode::PORT_TYPE_VECTOR) {
|
} else if (in_type == VisualShaderNode::PORT_TYPE_SCALAR && out_type == VisualShaderNode::PORT_TYPE_VECTOR) {
|
||||||
inputs[i] = "dot(" + src_var + ",vec3(0.333333,0.333333,0.333333))";
|
inputs[i] = "dot(" + src_var + ",vec3(0.333333,0.333333,0.333333))";
|
||||||
|
|
@ -2207,7 +2216,7 @@ void VisualShaderNodeGroupBase::clear_output_ports() {
|
||||||
void VisualShaderNodeGroupBase::set_input_port_type(int p_id, int p_type) {
|
void VisualShaderNodeGroupBase::set_input_port_type(int p_id, int p_type) {
|
||||||
|
|
||||||
ERR_FAIL_COND(!has_input_port(p_id));
|
ERR_FAIL_COND(!has_input_port(p_id));
|
||||||
ERR_FAIL_COND(p_type < 0 || p_type > PORT_TYPE_TRANSFORM);
|
ERR_FAIL_COND(p_type < 0 || p_type >= PORT_TYPE_MAX);
|
||||||
|
|
||||||
if (input_ports[p_id].type == p_type)
|
if (input_ports[p_id].type == p_type)
|
||||||
return;
|
return;
|
||||||
|
|
@ -2273,7 +2282,7 @@ String VisualShaderNodeGroupBase::get_input_port_name(int p_id) const {
|
||||||
void VisualShaderNodeGroupBase::set_output_port_type(int p_id, int p_type) {
|
void VisualShaderNodeGroupBase::set_output_port_type(int p_id, int p_type) {
|
||||||
|
|
||||||
ERR_FAIL_COND(!has_output_port(p_id));
|
ERR_FAIL_COND(!has_output_port(p_id));
|
||||||
ERR_FAIL_COND(p_type < 0 || p_type > PORT_TYPE_TRANSFORM);
|
ERR_FAIL_COND(p_type < 0 || p_type >= PORT_TYPE_MAX);
|
||||||
|
|
||||||
if (output_ports[p_id].type == p_type)
|
if (output_ports[p_id].type == p_type)
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -184,7 +184,8 @@ public:
|
||||||
PORT_TYPE_VECTOR,
|
PORT_TYPE_VECTOR,
|
||||||
PORT_TYPE_BOOLEAN,
|
PORT_TYPE_BOOLEAN,
|
||||||
PORT_TYPE_TRANSFORM,
|
PORT_TYPE_TRANSFORM,
|
||||||
PORT_TYPE_ICON_COLOR // just a hint for node tree icons, do not use it as actual port type !
|
PORT_TYPE_SAMPLER,
|
||||||
|
PORT_TYPE_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual String get_caption() const = 0;
|
virtual String get_caption() const = 0;
|
||||||
|
|
|
||||||
|
|
@ -361,15 +361,35 @@ String VisualShaderNodeTexture::get_caption() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
int VisualShaderNodeTexture::get_input_port_count() const {
|
int VisualShaderNodeTexture::get_input_port_count() const {
|
||||||
return 2;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
VisualShaderNodeTexture::PortType VisualShaderNodeTexture::get_input_port_type(int p_port) const {
|
VisualShaderNodeTexture::PortType VisualShaderNodeTexture::get_input_port_type(int p_port) const {
|
||||||
return p_port == 0 ? PORT_TYPE_VECTOR : PORT_TYPE_SCALAR;
|
|
||||||
|
switch (p_port) {
|
||||||
|
case 0:
|
||||||
|
return PORT_TYPE_VECTOR;
|
||||||
|
case 1:
|
||||||
|
return PORT_TYPE_SCALAR;
|
||||||
|
case 2:
|
||||||
|
return PORT_TYPE_SAMPLER;
|
||||||
|
default:
|
||||||
|
return PORT_TYPE_SCALAR;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String VisualShaderNodeTexture::get_input_port_name(int p_port) const {
|
String VisualShaderNodeTexture::get_input_port_name(int p_port) const {
|
||||||
return p_port == 0 ? "uv" : "lod";
|
|
||||||
|
switch (p_port) {
|
||||||
|
case 0:
|
||||||
|
return "uv";
|
||||||
|
case 1:
|
||||||
|
return "lod";
|
||||||
|
case 2:
|
||||||
|
return "sampler";
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int VisualShaderNodeTexture::get_output_port_count() const {
|
int VisualShaderNodeTexture::get_output_port_count() const {
|
||||||
|
|
@ -440,6 +460,29 @@ String VisualShaderNodeTexture::generate_code(Shader::Mode p_mode, VisualShader:
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (source == SOURCE_PORT) {
|
||||||
|
String id = p_input_vars[2];
|
||||||
|
String code;
|
||||||
|
if (id == String()) {
|
||||||
|
code += "\tvec4 " + id + "_tex_read = vec4(0.0);\n";
|
||||||
|
} else {
|
||||||
|
if (p_input_vars[0] == String()) { //none bound, do nothing
|
||||||
|
|
||||||
|
code += "\tvec4 " + id + "_tex_read = vec4(0.0);\n";
|
||||||
|
|
||||||
|
} else if (p_input_vars[1] == String()) {
|
||||||
|
//no lod
|
||||||
|
code += "\tvec4 " + id + "_tex_read = texture( " + id + " , " + p_input_vars[0] + ".xy );\n";
|
||||||
|
} else {
|
||||||
|
code += "\tvec4 " + id + "_tex_read = textureLod( " + id + " , " + p_input_vars[0] + ".xy , " + p_input_vars[1] + " );\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
code += "\t" + p_output_vars[0] + " = " + id + "_tex_read.rgb;\n";
|
||||||
|
code += "\t" + p_output_vars[1] + " = " + id + "_tex_read.a;\n";
|
||||||
|
}
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
if (source == SOURCE_SCREEN && (p_mode == Shader::MODE_SPATIAL || p_mode == Shader::MODE_CANVAS_ITEM) && p_type == VisualShader::TYPE_FRAGMENT) {
|
if (source == SOURCE_SCREEN && (p_mode == Shader::MODE_SPATIAL || p_mode == Shader::MODE_CANVAS_ITEM) && p_type == VisualShader::TYPE_FRAGMENT) {
|
||||||
|
|
||||||
String code = "\t{\n";
|
String code = "\t{\n";
|
||||||
|
|
@ -588,6 +631,10 @@ String VisualShaderNodeTexture::get_warning(Shader::Mode p_mode, VisualShader::T
|
||||||
return String(); // all good
|
return String(); // all good
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (source == SOURCE_PORT) {
|
||||||
|
return String(); // all good
|
||||||
|
}
|
||||||
|
|
||||||
if (source == SOURCE_SCREEN && (p_mode == Shader::MODE_SPATIAL || p_mode == Shader::MODE_CANVAS_ITEM) && p_type == VisualShader::TYPE_FRAGMENT) {
|
if (source == SOURCE_SCREEN && (p_mode == Shader::MODE_SPATIAL || p_mode == Shader::MODE_CANVAS_ITEM) && p_type == VisualShader::TYPE_FRAGMENT) {
|
||||||
|
|
||||||
return String(); // all good
|
return String(); // all good
|
||||||
|
|
@ -625,7 +672,7 @@ void VisualShaderNodeTexture::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("set_texture_type", "value"), &VisualShaderNodeTexture::set_texture_type);
|
ClassDB::bind_method(D_METHOD("set_texture_type", "value"), &VisualShaderNodeTexture::set_texture_type);
|
||||||
ClassDB::bind_method(D_METHOD("get_texture_type"), &VisualShaderNodeTexture::get_texture_type);
|
ClassDB::bind_method(D_METHOD("get_texture_type"), &VisualShaderNodeTexture::get_texture_type);
|
||||||
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "source", PROPERTY_HINT_ENUM, "Texture,Screen,Texture2D,NormalMap2D,Depth"), "set_source", "get_source");
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "source", PROPERTY_HINT_ENUM, "Texture,Screen,Texture2D,NormalMap2D,Depth,SamplerPort"), "set_source", "get_source");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture");
|
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "texture_type", PROPERTY_HINT_ENUM, "Data,Color,Normalmap"), "set_texture_type", "get_texture_type");
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "texture_type", PROPERTY_HINT_ENUM, "Data,Color,Normalmap"), "set_texture_type", "get_texture_type");
|
||||||
|
|
||||||
|
|
@ -3023,15 +3070,35 @@ String VisualShaderNodeTextureUniform::get_input_port_name(int p_port) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
int VisualShaderNodeTextureUniform::get_output_port_count() const {
|
int VisualShaderNodeTextureUniform::get_output_port_count() const {
|
||||||
return 2;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
VisualShaderNodeTextureUniform::PortType VisualShaderNodeTextureUniform::get_output_port_type(int p_port) const {
|
VisualShaderNodeTextureUniform::PortType VisualShaderNodeTextureUniform::get_output_port_type(int p_port) const {
|
||||||
return p_port == 0 ? PORT_TYPE_VECTOR : PORT_TYPE_SCALAR;
|
|
||||||
|
switch (p_port) {
|
||||||
|
case 0:
|
||||||
|
return PORT_TYPE_VECTOR;
|
||||||
|
case 1:
|
||||||
|
return PORT_TYPE_SCALAR;
|
||||||
|
case 2:
|
||||||
|
return PORT_TYPE_SAMPLER;
|
||||||
|
default:
|
||||||
|
return PORT_TYPE_SCALAR;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String VisualShaderNodeTextureUniform::get_output_port_name(int p_port) const {
|
String VisualShaderNodeTextureUniform::get_output_port_name(int p_port) const {
|
||||||
return p_port == 0 ? "rgb" : "alpha";
|
|
||||||
|
switch (p_port) {
|
||||||
|
case 0:
|
||||||
|
return "rgb";
|
||||||
|
case 1:
|
||||||
|
return "alpha";
|
||||||
|
case 2:
|
||||||
|
return "sampler";
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String VisualShaderNodeTextureUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const {
|
String VisualShaderNodeTextureUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const {
|
||||||
|
|
|
||||||
|
|
@ -199,7 +199,8 @@ public:
|
||||||
SOURCE_SCREEN,
|
SOURCE_SCREEN,
|
||||||
SOURCE_2D_TEXTURE,
|
SOURCE_2D_TEXTURE,
|
||||||
SOURCE_2D_NORMAL,
|
SOURCE_2D_NORMAL,
|
||||||
SOURCE_DEPTH
|
SOURCE_DEPTH,
|
||||||
|
SOURCE_PORT,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum TextureType {
|
enum TextureType {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue