feat: updated engine version to 4.4-rc1
This commit is contained in:
parent
ee00efde1f
commit
21ba8e33af
5459 changed files with 1128836 additions and 198305 deletions
|
|
@ -29,8 +29,7 @@
|
|||
/**************************************************************************/
|
||||
|
||||
#include "visual_shader_nodes.h"
|
||||
|
||||
#include "scene/resources/image_texture.h"
|
||||
#include "visual_shader_nodes.compat.inc"
|
||||
|
||||
////////////// Vector Base
|
||||
|
||||
|
|
@ -581,9 +580,17 @@ Quaternion VisualShaderNodeVec4Constant::get_constant() const {
|
|||
return constant;
|
||||
}
|
||||
|
||||
void VisualShaderNodeVec4Constant::_set_constant_v4(const Vector4 &p_constant) {
|
||||
set_constant(Quaternion(p_constant.x, p_constant.y, p_constant.z, p_constant.w));
|
||||
}
|
||||
|
||||
Vector4 VisualShaderNodeVec4Constant::_get_constant_v4() const {
|
||||
return Vector4(constant.x, constant.y, constant.z, constant.w);
|
||||
}
|
||||
|
||||
Vector<StringName> VisualShaderNodeVec4Constant::get_editable_properties() const {
|
||||
Vector<StringName> props;
|
||||
props.push_back("constant");
|
||||
props.push_back("constant_v4");
|
||||
return props;
|
||||
}
|
||||
|
||||
|
|
@ -591,7 +598,11 @@ void VisualShaderNodeVec4Constant::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("set_constant", "constant"), &VisualShaderNodeVec4Constant::set_constant);
|
||||
ClassDB::bind_method(D_METHOD("get_constant"), &VisualShaderNodeVec4Constant::get_constant);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("_set_constant_v4", "constant"), &VisualShaderNodeVec4Constant::_set_constant_v4);
|
||||
ClassDB::bind_method(D_METHOD("_get_constant_v4"), &VisualShaderNodeVec4Constant::_get_constant_v4);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::QUATERNION, "constant"), "set_constant", "get_constant");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR4, "constant_v4", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_INTERNAL), "_set_constant_v4", "_get_constant_v4");
|
||||
}
|
||||
|
||||
VisualShaderNodeVec4Constant::VisualShaderNodeVec4Constant() {
|
||||
|
|
@ -1353,12 +1364,12 @@ String VisualShaderNodeTexture2DArray::generate_global(Shader::Mode p_mode, Visu
|
|||
return String();
|
||||
}
|
||||
|
||||
void VisualShaderNodeTexture2DArray::set_texture_array(Ref<Texture2DArray> p_texture_array) {
|
||||
void VisualShaderNodeTexture2DArray::set_texture_array(Ref<TextureLayered> p_texture_array) {
|
||||
texture_array = p_texture_array;
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
Ref<Texture2DArray> VisualShaderNodeTexture2DArray::get_texture_array() const {
|
||||
Ref<TextureLayered> VisualShaderNodeTexture2DArray::get_texture_array() const {
|
||||
return texture_array;
|
||||
}
|
||||
|
||||
|
|
@ -1375,7 +1386,7 @@ void VisualShaderNodeTexture2DArray::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("set_texture_array", "value"), &VisualShaderNodeTexture2DArray::set_texture_array);
|
||||
ClassDB::bind_method(D_METHOD("get_texture_array"), &VisualShaderNodeTexture2DArray::get_texture_array);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture_array", PROPERTY_HINT_RESOURCE_TYPE, "Texture2DArray"), "set_texture_array", "get_texture_array");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture_array", PROPERTY_HINT_RESOURCE_TYPE, "Texture2DArray,CompressedTexture2DArray,PlaceholderTexture2DArray,Texture2DArrayRD"), "set_texture_array", "get_texture_array");
|
||||
}
|
||||
|
||||
VisualShaderNodeTexture2DArray::VisualShaderNodeTexture2DArray() {
|
||||
|
|
@ -1568,12 +1579,12 @@ VisualShaderNodeCubemap::Source VisualShaderNodeCubemap::get_source() const {
|
|||
return source;
|
||||
}
|
||||
|
||||
void VisualShaderNodeCubemap::set_cube_map(Ref<Cubemap> p_cube_map) {
|
||||
void VisualShaderNodeCubemap::set_cube_map(Ref<TextureLayered> p_cube_map) {
|
||||
cube_map = p_cube_map;
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
Ref<Cubemap> VisualShaderNodeCubemap::get_cube_map() const {
|
||||
Ref<TextureLayered> VisualShaderNodeCubemap::get_cube_map() const {
|
||||
return cube_map;
|
||||
}
|
||||
|
||||
|
|
@ -1618,7 +1629,7 @@ void VisualShaderNodeCubemap::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("get_texture_type"), &VisualShaderNodeCubemap::get_texture_type);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "source", PROPERTY_HINT_ENUM, "Texture,SamplerPort"), "set_source", "get_source");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "cube_map", PROPERTY_HINT_RESOURCE_TYPE, "Cubemap"), "set_cube_map", "get_cube_map");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "cube_map", PROPERTY_HINT_RESOURCE_TYPE, "Cubemap,CompressedCubemap,PlaceholderCubemap,TextureCubemapRD"), "set_cube_map", "get_cube_map");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "texture_type", PROPERTY_HINT_ENUM, "Data,Color,Normal Map"), "set_texture_type", "get_texture_type");
|
||||
|
||||
BIND_ENUM_CONSTANT(SOURCE_TEXTURE);
|
||||
|
|
@ -1746,12 +1757,13 @@ String VisualShaderNodeWorldPositionFromDepth::generate_code(Shader::Mode p_mode
|
|||
|
||||
code += " float __log_depth = textureLod(" + make_unique_id(p_type, p_id, "depth_tex") + ", " + uv + ", 0.0).x;\n";
|
||||
if (!RenderingServer::get_singleton()->is_low_end()) {
|
||||
code += " vec4 __depth_view = INV_PROJECTION_MATRIX * vec4(" + uv + " * 2.0 - 1.0, __log_depth, 1.0);\n";
|
||||
code += " vec4 __ndc = vec4(" + uv + " * 2.0 - 1.0, __log_depth, 1.0);\n";
|
||||
} else {
|
||||
code += " vec4 __depth_view = INV_PROJECTION_MATRIX * vec4(vec3(" + uv + ", __log_depth) * 2.0 - 1.0, 1.0);\n";
|
||||
code += " vec4 __ndc = vec4(vec3(" + uv + ", __log_depth) * 2.0 - 1.0, 1.0);\n";
|
||||
}
|
||||
code += " __depth_view.xyz /= __depth_view.w;\n";
|
||||
code += vformat(" %s = (INV_VIEW_MATRIX * __depth_view).xyz;\n", p_output_vars[0]);
|
||||
code += " vec4 __position_world = INV_VIEW_MATRIX * INV_PROJECTION_MATRIX * __ndc;\n";
|
||||
code += " __position_world.xyz /= __position_world.w;\n";
|
||||
code += vformat(" %s = __position_world.xyz;\n", p_output_vars[0]);
|
||||
|
||||
code += " }\n";
|
||||
return code;
|
||||
|
|
@ -3242,6 +3254,29 @@ String VisualShaderNodeColorFunc::generate_code(Shader::Mode p_mode, VisualShade
|
|||
code += " " + p_output_vars[0] + " = vec3(r, g, b);\n";
|
||||
code += " }\n";
|
||||
break;
|
||||
case FUNC_LINEAR_TO_SRGB:
|
||||
code += " {\n";
|
||||
if (RenderingServer::get_singleton()->is_low_end()) {
|
||||
code += " vec3 c = " + p_input_vars[0] + ";\n";
|
||||
code += " " + p_output_vars[0] + " = max(vec3(1.055) * pow(c, vec3(0.416666667)) - vec3(0.055), vec3(0.0));\n";
|
||||
} else {
|
||||
code += " vec3 c = clamp(" + p_input_vars[0] + ", vec3(0.0), vec3(1.0));\n";
|
||||
code += " const vec3 a = vec3(0.055f);\n";
|
||||
code += " " + p_output_vars[0] + " = mix((vec3(1.0f) + a) * pow(c.rgb, vec3(1.0f / 2.4f)) - a, 12.92f * c.rgb, lessThan(c.rgb, vec3(0.0031308f)));\n";
|
||||
}
|
||||
code += " }\n";
|
||||
break;
|
||||
case FUNC_SRGB_TO_LINEAR:
|
||||
code += " {\n";
|
||||
if (RenderingServer::get_singleton()->is_low_end()) {
|
||||
code += " vec3 c = " + p_input_vars[0] + ";\n";
|
||||
code += " " + p_output_vars[0] + " = c * (c * (c * 0.305306011 + 0.682171111) + 0.012522878);\n";
|
||||
} else {
|
||||
code += " vec3 c = " + p_input_vars[0] + ";\n";
|
||||
code += " " + p_output_vars[0] + " = mix(pow((c.rgb + vec3(0.055)) * (1.0 / (1.0 + 0.055)), vec3(2.4)), c.rgb * (1.0 / 12.92), lessThan(c.rgb, vec3(0.04045)));\n";
|
||||
}
|
||||
code += " }\n";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -3272,12 +3307,14 @@ void VisualShaderNodeColorFunc::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("set_function", "func"), &VisualShaderNodeColorFunc::set_function);
|
||||
ClassDB::bind_method(D_METHOD("get_function"), &VisualShaderNodeColorFunc::get_function);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "function", PROPERTY_HINT_ENUM, "Grayscale,HSV2RGB,RGB2HSV,Sepia"), "set_function", "get_function");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "function", PROPERTY_HINT_ENUM, "Grayscale,HSV2RGB,RGB2HSV,Sepia,LinearToSRGB,SRGBToLinear"), "set_function", "get_function");
|
||||
|
||||
BIND_ENUM_CONSTANT(FUNC_GRAYSCALE);
|
||||
BIND_ENUM_CONSTANT(FUNC_HSV2RGB);
|
||||
BIND_ENUM_CONSTANT(FUNC_RGB2HSV);
|
||||
BIND_ENUM_CONSTANT(FUNC_SEPIA);
|
||||
BIND_ENUM_CONSTANT(FUNC_LINEAR_TO_SRGB);
|
||||
BIND_ENUM_CONSTANT(FUNC_SRGB_TO_LINEAR);
|
||||
BIND_ENUM_CONSTANT(FUNC_MAX);
|
||||
}
|
||||
|
||||
|
|
@ -4877,19 +4914,22 @@ void VisualShaderNodeVectorCompose::set_op_type(OpType p_op_type) {
|
|||
case OP_TYPE_VECTOR_3D: {
|
||||
float p1 = get_input_port_default_value(0);
|
||||
float p2 = get_input_port_default_value(1);
|
||||
float p3 = get_input_port_default_value(2);
|
||||
|
||||
set_input_port_default_value(0, p1);
|
||||
set_input_port_default_value(1, p2);
|
||||
set_input_port_default_value(2, 0.0);
|
||||
set_input_port_default_value(2, p3);
|
||||
} break;
|
||||
case OP_TYPE_VECTOR_4D: {
|
||||
float p1 = get_input_port_default_value(0);
|
||||
float p2 = get_input_port_default_value(1);
|
||||
float p3 = get_input_port_default_value(2);
|
||||
float p4 = get_input_port_default_value(3);
|
||||
|
||||
set_input_port_default_value(0, p1);
|
||||
set_input_port_default_value(1, p2);
|
||||
set_input_port_default_value(2, 0.0);
|
||||
set_input_port_default_value(3, 0.0);
|
||||
set_input_port_default_value(2, p3);
|
||||
set_input_port_default_value(3, p4);
|
||||
} break;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -5368,6 +5408,20 @@ String VisualShaderNodeIntParameter::generate_global(Shader::Mode p_mode, Visual
|
|||
code += _get_qual_str() + "uniform int " + get_parameter_name() + " : hint_range(" + itos(hint_range_min) + ", " + itos(hint_range_max) + ")";
|
||||
} else if (hint == HINT_RANGE_STEP) {
|
||||
code += _get_qual_str() + "uniform int " + get_parameter_name() + " : hint_range(" + itos(hint_range_min) + ", " + itos(hint_range_max) + ", " + itos(hint_range_step) + ")";
|
||||
} else if (hint == HINT_ENUM) {
|
||||
code += _get_qual_str() + "uniform int " + get_parameter_name() + " : hint_enum(";
|
||||
|
||||
bool first = true;
|
||||
for (const String &_name : hint_enum_names) {
|
||||
if (first) {
|
||||
first = false;
|
||||
} else {
|
||||
code += ", ";
|
||||
}
|
||||
code += "\"" + _name.c_escape() + "\"";
|
||||
}
|
||||
|
||||
code += ")";
|
||||
} else {
|
||||
code += _get_qual_str() + "uniform int " + get_parameter_name();
|
||||
}
|
||||
|
|
@ -5439,6 +5493,18 @@ int VisualShaderNodeIntParameter::get_step() const {
|
|||
return hint_range_step;
|
||||
}
|
||||
|
||||
void VisualShaderNodeIntParameter::set_enum_names(const PackedStringArray &p_names) {
|
||||
if (hint_enum_names == p_names) {
|
||||
return;
|
||||
}
|
||||
hint_enum_names = p_names;
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
PackedStringArray VisualShaderNodeIntParameter::get_enum_names() const {
|
||||
return hint_enum_names;
|
||||
}
|
||||
|
||||
void VisualShaderNodeIntParameter::set_default_value_enabled(bool p_default_value_enabled) {
|
||||
if (default_value_enabled == p_default_value_enabled) {
|
||||
return;
|
||||
|
|
@ -5476,22 +5542,27 @@ void VisualShaderNodeIntParameter::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("set_step", "value"), &VisualShaderNodeIntParameter::set_step);
|
||||
ClassDB::bind_method(D_METHOD("get_step"), &VisualShaderNodeIntParameter::get_step);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_enum_names", "names"), &VisualShaderNodeIntParameter::set_enum_names);
|
||||
ClassDB::bind_method(D_METHOD("get_enum_names"), &VisualShaderNodeIntParameter::get_enum_names);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_default_value_enabled", "enabled"), &VisualShaderNodeIntParameter::set_default_value_enabled);
|
||||
ClassDB::bind_method(D_METHOD("is_default_value_enabled"), &VisualShaderNodeIntParameter::is_default_value_enabled);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_default_value", "value"), &VisualShaderNodeIntParameter::set_default_value);
|
||||
ClassDB::bind_method(D_METHOD("get_default_value"), &VisualShaderNodeIntParameter::get_default_value);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "hint", PROPERTY_HINT_ENUM, "None,Range,Range + Step"), "set_hint", "get_hint");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "hint", PROPERTY_HINT_ENUM, "None,Range,Range + Step,Enum"), "set_hint", "get_hint");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "min"), "set_min", "get_min");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "max"), "set_max", "get_max");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "step"), "set_step", "get_step");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::PACKED_STRING_ARRAY, "enum_names"), "set_enum_names", "get_enum_names");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "default_value_enabled"), "set_default_value_enabled", "is_default_value_enabled");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "default_value"), "set_default_value", "get_default_value");
|
||||
|
||||
BIND_ENUM_CONSTANT(HINT_NONE);
|
||||
BIND_ENUM_CONSTANT(HINT_RANGE);
|
||||
BIND_ENUM_CONSTANT(HINT_RANGE_STEP);
|
||||
BIND_ENUM_CONSTANT(HINT_ENUM);
|
||||
BIND_ENUM_CONSTANT(HINT_MAX);
|
||||
}
|
||||
|
||||
|
|
@ -5513,6 +5584,9 @@ Vector<StringName> VisualShaderNodeIntParameter::get_editable_properties() const
|
|||
if (hint == HINT_RANGE_STEP) {
|
||||
props.push_back("step");
|
||||
}
|
||||
if (hint == HINT_ENUM) {
|
||||
props.push_back("enum_names");
|
||||
}
|
||||
props.push_back("default_value_enabled");
|
||||
if (default_value_enabled) {
|
||||
props.push_back("default_value");
|
||||
|
|
@ -7188,7 +7262,7 @@ String VisualShaderNodeFresnel::generate_code(Shader::Mode p_mode, VisualShader:
|
|||
normal = p_input_vars[0];
|
||||
}
|
||||
if (p_input_vars[1].is_empty()) {
|
||||
if (p_mode == Shader::MODE_SPATIAL) {
|
||||
if (p_mode == Shader::MODE_SPATIAL && !p_for_preview) {
|
||||
view = "VIEW";
|
||||
} else {
|
||||
view = "vec3(0.0)";
|
||||
|
|
@ -8046,17 +8120,28 @@ int VisualShaderNodeRemap::get_input_port_count() const {
|
|||
}
|
||||
|
||||
VisualShaderNodeRemap::PortType VisualShaderNodeRemap::get_input_port_type(int p_port) const {
|
||||
switch (p_port) {
|
||||
case 0:
|
||||
return PORT_TYPE_SCALAR;
|
||||
case 1:
|
||||
return PORT_TYPE_SCALAR;
|
||||
case 2:
|
||||
return PORT_TYPE_SCALAR;
|
||||
case 3:
|
||||
return PORT_TYPE_SCALAR;
|
||||
case 4:
|
||||
return PORT_TYPE_SCALAR;
|
||||
switch (op_type) {
|
||||
case OP_TYPE_VECTOR_2D:
|
||||
return PORT_TYPE_VECTOR_2D;
|
||||
case OP_TYPE_VECTOR_2D_SCALAR:
|
||||
if (p_port == 0) {
|
||||
return PORT_TYPE_VECTOR_2D;
|
||||
}
|
||||
break;
|
||||
case OP_TYPE_VECTOR_3D:
|
||||
return PORT_TYPE_VECTOR_3D;
|
||||
case OP_TYPE_VECTOR_3D_SCALAR:
|
||||
if (p_port == 0) {
|
||||
return PORT_TYPE_VECTOR_3D;
|
||||
}
|
||||
break;
|
||||
case OP_TYPE_VECTOR_4D:
|
||||
return PORT_TYPE_VECTOR_4D;
|
||||
case OP_TYPE_VECTOR_4D_SCALAR:
|
||||
if (p_port == 0) {
|
||||
return PORT_TYPE_VECTOR_4D;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -8088,23 +8173,159 @@ int VisualShaderNodeRemap::get_output_port_count() const {
|
|||
}
|
||||
|
||||
VisualShaderNodeRemap::PortType VisualShaderNodeRemap::get_output_port_type(int p_port) const {
|
||||
return PORT_TYPE_SCALAR;
|
||||
switch (op_type) {
|
||||
case OP_TYPE_VECTOR_2D:
|
||||
case OP_TYPE_VECTOR_2D_SCALAR:
|
||||
return PORT_TYPE_VECTOR_2D;
|
||||
case OP_TYPE_VECTOR_3D:
|
||||
case OP_TYPE_VECTOR_3D_SCALAR:
|
||||
return PORT_TYPE_VECTOR_3D;
|
||||
case OP_TYPE_VECTOR_4D:
|
||||
case OP_TYPE_VECTOR_4D_SCALAR:
|
||||
return PORT_TYPE_VECTOR_4D;
|
||||
default:
|
||||
return PORT_TYPE_SCALAR;
|
||||
}
|
||||
}
|
||||
|
||||
String VisualShaderNodeRemap::get_output_port_name(int p_port) const {
|
||||
return "value";
|
||||
}
|
||||
|
||||
void VisualShaderNodeRemap::set_op_type(OpType p_op_type) {
|
||||
ERR_FAIL_INDEX(int(p_op_type), int(OP_TYPE_MAX));
|
||||
if (op_type == p_op_type) {
|
||||
return;
|
||||
}
|
||||
switch (p_op_type) {
|
||||
case OP_TYPE_SCALAR: {
|
||||
set_input_port_default_value(0, 0.0, get_input_port_default_value(0));
|
||||
set_input_port_default_value(1, 0.0, get_input_port_default_value(1));
|
||||
set_input_port_default_value(2, 1.0, get_input_port_default_value(2));
|
||||
set_input_port_default_value(3, 0.0, get_input_port_default_value(3));
|
||||
set_input_port_default_value(4, 1.0, get_input_port_default_value(4));
|
||||
} break;
|
||||
case OP_TYPE_VECTOR_2D: {
|
||||
set_input_port_default_value(0, Vector2(), get_input_port_default_value(0));
|
||||
set_input_port_default_value(1, Vector2(), get_input_port_default_value(1));
|
||||
set_input_port_default_value(2, Vector2(1.0, 1.0), get_input_port_default_value(2));
|
||||
set_input_port_default_value(3, Vector2(), get_input_port_default_value(3));
|
||||
set_input_port_default_value(4, Vector2(1.0, 1.0), get_input_port_default_value(4));
|
||||
} break;
|
||||
case OP_TYPE_VECTOR_2D_SCALAR: {
|
||||
set_input_port_default_value(0, Vector2(), get_input_port_default_value(0));
|
||||
set_input_port_default_value(1, 0.0, get_input_port_default_value(1));
|
||||
set_input_port_default_value(2, 1.0, get_input_port_default_value(2));
|
||||
set_input_port_default_value(3, 0.0, get_input_port_default_value(3));
|
||||
set_input_port_default_value(4, 1.0, get_input_port_default_value(4));
|
||||
} break;
|
||||
case OP_TYPE_VECTOR_3D: {
|
||||
set_input_port_default_value(0, Vector3(), get_input_port_default_value(0));
|
||||
set_input_port_default_value(1, Vector3(), get_input_port_default_value(1));
|
||||
set_input_port_default_value(2, Vector3(1.0, 1.0, 1.0), get_input_port_default_value(2));
|
||||
set_input_port_default_value(3, Vector3(), get_input_port_default_value(3));
|
||||
set_input_port_default_value(4, Vector3(1.0, 1.0, 1.0), get_input_port_default_value(4));
|
||||
} break;
|
||||
case OP_TYPE_VECTOR_3D_SCALAR: {
|
||||
set_input_port_default_value(0, Vector3(), get_input_port_default_value(0));
|
||||
set_input_port_default_value(1, 0.0, get_input_port_default_value(1));
|
||||
set_input_port_default_value(2, 1.0, get_input_port_default_value(2));
|
||||
set_input_port_default_value(3, 0.0, get_input_port_default_value(3));
|
||||
set_input_port_default_value(4, 1.0, get_input_port_default_value(4));
|
||||
} break;
|
||||
case OP_TYPE_VECTOR_4D: {
|
||||
set_input_port_default_value(0, Quaternion(), get_input_port_default_value(0));
|
||||
set_input_port_default_value(1, Quaternion(), get_input_port_default_value(1));
|
||||
set_input_port_default_value(2, Quaternion(1.0, 1.0, 1.0, 1.0), get_input_port_default_value(2));
|
||||
set_input_port_default_value(3, Quaternion(), get_input_port_default_value(3));
|
||||
set_input_port_default_value(4, Quaternion(1.0, 1.0, 1.0, 1.0), get_input_port_default_value(4));
|
||||
} break;
|
||||
case OP_TYPE_VECTOR_4D_SCALAR: {
|
||||
set_input_port_default_value(0, Quaternion(), get_input_port_default_value(0));
|
||||
set_input_port_default_value(1, 0.0, get_input_port_default_value(1));
|
||||
set_input_port_default_value(2, 1.0, get_input_port_default_value(2));
|
||||
set_input_port_default_value(3, 0.0, get_input_port_default_value(3));
|
||||
set_input_port_default_value(4, 1.0, get_input_port_default_value(4));
|
||||
} break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
op_type = p_op_type;
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
VisualShaderNodeRemap::OpType VisualShaderNodeRemap::get_op_type() const {
|
||||
return op_type;
|
||||
}
|
||||
|
||||
String VisualShaderNodeRemap::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 {
|
||||
String code;
|
||||
code += " {\n";
|
||||
code += vformat(" float __input_range = %s - %s;\n", p_input_vars[2], p_input_vars[1]);
|
||||
code += vformat(" float __output_range = %s - %s;\n", p_input_vars[4], p_input_vars[3]);
|
||||
code += vformat(" %s = %s + __output_range * ((%s - %s) / __input_range);\n", p_output_vars[0], p_input_vars[3], p_input_vars[0], p_input_vars[1]);
|
||||
switch (op_type) {
|
||||
case OP_TYPE_SCALAR: {
|
||||
code += vformat(" float __input_range = %s - %s;\n", p_input_vars[2], p_input_vars[1]);
|
||||
code += vformat(" float __output_range = %s - %s;\n", p_input_vars[4], p_input_vars[3]);
|
||||
code += vformat(" %s = %s + __output_range * ((%s - %s) / __input_range);\n", p_output_vars[0], p_input_vars[3], p_input_vars[0], p_input_vars[1]);
|
||||
} break;
|
||||
case OP_TYPE_VECTOR_2D: {
|
||||
code += vformat(" vec2 __input_range = %s - %s;\n", p_input_vars[2], p_input_vars[1]);
|
||||
code += vformat(" vec2 __output_range = %s - %s;\n", p_input_vars[4], p_input_vars[3]);
|
||||
code += vformat(" %s = %s + __output_range * ((%s - %s) / __input_range);\n", p_output_vars[0], p_input_vars[3], p_input_vars[0], p_input_vars[1]);
|
||||
} break;
|
||||
case OP_TYPE_VECTOR_2D_SCALAR: {
|
||||
code += vformat(" vec2 __input_range = vec2(%s - %s);\n", p_input_vars[2], p_input_vars[1]);
|
||||
code += vformat(" vec2 __output_range = vec2(%s - %s);\n", p_input_vars[4], p_input_vars[3]);
|
||||
code += vformat(" %s = vec2(%s) + __output_range * ((%s - vec2(%s)) / __input_range);\n", p_output_vars[0], p_input_vars[3], p_input_vars[0], p_input_vars[1]);
|
||||
} break;
|
||||
case OP_TYPE_VECTOR_3D: {
|
||||
code += vformat(" vec3 __input_range = %s - %s;\n", p_input_vars[2], p_input_vars[1]);
|
||||
code += vformat(" vec3 __output_range = %s - %s;\n", p_input_vars[4], p_input_vars[3]);
|
||||
code += vformat(" %s = %s + __output_range * ((%s - %s) / __input_range);\n", p_output_vars[0], p_input_vars[3], p_input_vars[0], p_input_vars[1]);
|
||||
} break;
|
||||
case OP_TYPE_VECTOR_3D_SCALAR: {
|
||||
code += vformat(" vec3 __input_range = vec3(%s - %s);\n", p_input_vars[2], p_input_vars[1]);
|
||||
code += vformat(" vec3 __output_range = vec3(%s - %s);\n", p_input_vars[4], p_input_vars[3]);
|
||||
code += vformat(" %s = vec3(%s) + __output_range * ((%s - vec3(%s)) / __input_range);\n", p_output_vars[0], p_input_vars[3], p_input_vars[0], p_input_vars[1]);
|
||||
} break;
|
||||
case OP_TYPE_VECTOR_4D: {
|
||||
code += vformat(" vec4 __input_range = %s - %s;\n", p_input_vars[2], p_input_vars[1]);
|
||||
code += vformat(" vec4 __output_range = %s - %s;\n", p_input_vars[4], p_input_vars[3]);
|
||||
code += vformat(" %s = %s + __output_range * ((%s - %s) / __input_range);\n", p_output_vars[0], p_input_vars[3], p_input_vars[0], p_input_vars[1]);
|
||||
} break;
|
||||
case OP_TYPE_VECTOR_4D_SCALAR: {
|
||||
code += vformat(" vec4 __input_range = vec4(%s - %s);\n", p_input_vars[2], p_input_vars[1]);
|
||||
code += vformat(" vec4 __output_range = vec4(%s - %s);\n", p_input_vars[4], p_input_vars[3]);
|
||||
code += vformat(" %s = vec4(%s) + __output_range * ((%s - vec4(%s)) / __input_range);\n", p_output_vars[0], p_input_vars[3], p_input_vars[0], p_input_vars[1]);
|
||||
} break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
code += " }\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
Vector<StringName> VisualShaderNodeRemap::get_editable_properties() const {
|
||||
Vector<StringName> props;
|
||||
props.push_back("op_type");
|
||||
return props;
|
||||
}
|
||||
|
||||
void VisualShaderNodeRemap::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_op_type", "op_type"), &VisualShaderNodeRemap::set_op_type);
|
||||
ClassDB::bind_method(D_METHOD("get_op_type"), &VisualShaderNodeRemap::get_op_type);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "op_type", PROPERTY_HINT_ENUM, "Scalar,Vector2,Vector2Scalar,Vector3,Vector3Scalar,Vector4,Vector4Scalar"), "set_op_type", "get_op_type");
|
||||
|
||||
BIND_ENUM_CONSTANT(OP_TYPE_SCALAR);
|
||||
BIND_ENUM_CONSTANT(OP_TYPE_VECTOR_2D);
|
||||
BIND_ENUM_CONSTANT(OP_TYPE_VECTOR_2D_SCALAR);
|
||||
BIND_ENUM_CONSTANT(OP_TYPE_VECTOR_3D);
|
||||
BIND_ENUM_CONSTANT(OP_TYPE_VECTOR_3D_SCALAR);
|
||||
BIND_ENUM_CONSTANT(OP_TYPE_VECTOR_4D);
|
||||
BIND_ENUM_CONSTANT(OP_TYPE_VECTOR_4D_SCALAR);
|
||||
BIND_ENUM_CONSTANT(OP_TYPE_MAX);
|
||||
}
|
||||
|
||||
VisualShaderNodeRemap::VisualShaderNodeRemap() {
|
||||
set_input_port_default_value(1, 0.0);
|
||||
set_input_port_default_value(2, 1.0);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue