You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-22 15:06:45 +00:00
Added sampler inputs for visual shaders
This commit is contained in:
@@ -1064,12 +1064,16 @@ Error VisualShader::_write_node(Type type, StringBuilder &global_code, StringBui
|
||||
String src_var = "n_out" + itos(from_node) + "p" + itos(from_port);
|
||||
|
||||
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();
|
||||
VisualShaderNodeInput *input = (VisualShaderNodeInput *)graph[type].nodes[from_node].node.ptr();
|
||||
if (input) {
|
||||
inputs[i] = input->get_input_real_name();
|
||||
} else {
|
||||
inputs[i] = "";
|
||||
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;
|
||||
@@ -1442,6 +1446,8 @@ const VisualShaderNodeInput::Port VisualShaderNodeInput::ports[] = {
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_VECTOR, "viewport_size", "vec3(VIEWPORT_SIZE, 0.0)" },
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_BOOLEAN, "output_is_srgb", "OUTPUT_IS_SRGB" },
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_BOOLEAN, "front_facing", "FRONT_FACING" },
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SAMPLER, "screen_texture", "SCREEN_TEXTURE" },
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SAMPLER, "depth_texture", "DEPTH_TEXTURE" },
|
||||
|
||||
// Spatial, Light
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "fragcoord", "FRAGCOORD.xyz" },
|
||||
@@ -1488,6 +1494,9 @@ const VisualShaderNodeInput::Port VisualShaderNodeInput::ports[] = {
|
||||
{ Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_VECTOR, "point_coord", "vec3(POINT_COORD,0.0)" },
|
||||
{ Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SCALAR, "time", "TIME" },
|
||||
{ Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SCALAR, "light_pass", "float(AT_LIGHT_PASS ? 1.0 : 0.0)" },
|
||||
{ Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SAMPLER, "texture", "TEXTURE" },
|
||||
{ Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SAMPLER, "normal_texture", "NORMAL_TEXTURE" },
|
||||
{ Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SAMPLER, "screen_texture", "SCREEN_TEXTURE" },
|
||||
// Canvas Item, Light
|
||||
{ Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "fragcoord", "FRAGCOORD.xyz" },
|
||||
{ Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "uv", "vec3(UV,0.0)" },
|
||||
@@ -1504,6 +1513,7 @@ const VisualShaderNodeInput::Port VisualShaderNodeInput::ports[] = {
|
||||
{ Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "texture_pixel_size", "vec3(TEXTURE_PIXEL_SIZE, 1.0)" },
|
||||
{ Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "point_coord", "vec3(POINT_COORD,0.0)" },
|
||||
{ Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_SCALAR, "time", "TIME" },
|
||||
{ Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_SAMPLER, "texture", "TEXTURE" },
|
||||
|
||||
// Particles, Vertex
|
||||
{ Shader::MODE_PARTICLES, VisualShader::TYPE_VERTEX, VisualShaderNode::PORT_TYPE_VECTOR, "color", "COLOR.rgb" },
|
||||
@@ -1604,6 +1614,10 @@ String VisualShaderNodeInput::get_caption() const {
|
||||
|
||||
String VisualShaderNodeInput::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) const {
|
||||
|
||||
if (get_output_port_type(0) == PORT_TYPE_SAMPLER) {
|
||||
return "";
|
||||
}
|
||||
|
||||
if (p_for_preview) {
|
||||
int idx = 0;
|
||||
|
||||
@@ -1672,6 +1686,20 @@ String VisualShaderNodeInput::get_input_name() const {
|
||||
return input_name;
|
||||
}
|
||||
|
||||
String VisualShaderNodeInput::get_input_real_name() const {
|
||||
|
||||
int idx = 0;
|
||||
|
||||
while (ports[idx].mode != Shader::MODE_MAX) {
|
||||
if (ports[idx].mode == shader_mode && ports[idx].shader_type == shader_type && ports[idx].name == input_name) {
|
||||
return String(ports[idx].string);
|
||||
}
|
||||
idx++;
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
VisualShaderNodeInput::PortType VisualShaderNodeInput::get_input_type_by_name(String p_name) const {
|
||||
|
||||
int idx = 0;
|
||||
|
||||
Reference in New Issue
Block a user