diff options
Diffstat (limited to 'scene/resources')
| -rw-r--r-- | scene/resources/capsule_shape_2d.cpp | 3 | ||||
| -rw-r--r-- | scene/resources/curve.cpp | 4 | ||||
| -rw-r--r-- | scene/resources/dynamic_font.cpp | 28 | ||||
| -rw-r--r-- | scene/resources/dynamic_font.h | 6 | ||||
| -rw-r--r-- | scene/resources/font.cpp | 10 | ||||
| -rw-r--r-- | scene/resources/font.h | 4 | ||||
| -rw-r--r-- | scene/resources/line_shape_2d.cpp | 26 | ||||
| -rw-r--r-- | scene/resources/line_shape_2d.h | 6 | ||||
| -rw-r--r-- | scene/resources/mesh.cpp | 2 | ||||
| -rw-r--r-- | scene/resources/mesh_data_tool.cpp | 2 | ||||
| -rw-r--r-- | scene/resources/surface_tool.cpp | 6 | ||||
| -rw-r--r-- | scene/resources/visual_shader.cpp | 45 | ||||
| -rw-r--r-- | scene/resources/visual_shader.h | 17 | ||||
| -rw-r--r-- | scene/resources/visual_shader_nodes.cpp | 66 | ||||
| -rw-r--r-- | scene/resources/visual_shader_nodes.h | 14 | ||||
| -rw-r--r-- | scene/resources/world_margin_shape_3d.cpp | 12 |
16 files changed, 206 insertions, 45 deletions
diff --git a/scene/resources/capsule_shape_2d.cpp b/scene/resources/capsule_shape_2d.cpp index ab2657c892..5a3282478c 100644 --- a/scene/resources/capsule_shape_2d.cpp +++ b/scene/resources/capsule_shape_2d.cpp @@ -72,6 +72,9 @@ real_t CapsuleShape2D::get_radius() const { void CapsuleShape2D::set_height(real_t p_height) { height = p_height; + if (height < 0) + height = 0; + _update_shape(); } diff --git a/scene/resources/curve.cpp b/scene/resources/curve.cpp index ae705a47e8..d96013a081 100644 --- a/scene/resources/curve.cpp +++ b/scene/resources/curve.cpp @@ -1237,7 +1237,7 @@ void Curve3D::_bake() const { p = mid; Plane post; post.normal = pos; - post.d = Math::lerp(points[i].tilt, points[i + 1].tilt, mid); + post.distance = Math::lerp(points[i].tilt, points[i + 1].tilt, mid); pointlist.push_back(post); } else { @@ -1274,7 +1274,7 @@ void Curve3D::_bake() const { for (List<Plane>::Element *E = pointlist.front(); E; E = E->next()) { w[idx] = E->get().normal; - wt[idx] = E->get().d; + wt[idx] = E->get().distance; if (!up_vector_enabled) { idx++; diff --git a/scene/resources/dynamic_font.cpp b/scene/resources/dynamic_font.cpp index eea4d12d0e..442151de36 100644 --- a/scene/resources/dynamic_font.cpp +++ b/scene/resources/dynamic_font.cpp @@ -221,6 +221,8 @@ Error DynamicFontAtSize::_load() { ascent = (face->size->metrics.ascender / 64.0) / oversampling * scale_color_font; descent = (-face->size->metrics.descender / 64.0) / oversampling * scale_color_font; + underline_position = -face->underline_position / 64.0 / oversampling * scale_color_font; + underline_thickness = face->underline_thickness / 64.0 / oversampling * scale_color_font; linegap = 0; valid = true; @@ -243,6 +245,16 @@ float DynamicFontAtSize::get_descent() const { return descent; } +float DynamicFontAtSize::get_underline_position() const { + + return underline_position; +} + +float DynamicFontAtSize::get_underline_thickness() const { + + return underline_thickness; +} + const Pair<const DynamicFontAtSize::Character *, DynamicFontAtSize *> DynamicFontAtSize::_find_char_with_font(CharType p_char, const Vector<Ref<DynamicFontAtSize>> &p_fallbacks) const { const Character *chr = char_map.getptr(p_char); ERR_FAIL_COND_V(!chr, (Pair<const Character *, DynamicFontAtSize *>(nullptr, nullptr))); @@ -821,6 +833,22 @@ float DynamicFont::get_descent() const { return data_at_size->get_descent() + spacing_bottom; } +float DynamicFont::get_underline_position() const { + + if (!data_at_size.is_valid()) + return 2; + + return data_at_size->get_underline_position(); +} + +float DynamicFont::get_underline_thickness() const { + + if (!data_at_size.is_valid()) + return 1; + + return data_at_size->get_underline_thickness(); +} + Size2 DynamicFont::get_char_size(CharType p_char, CharType p_next) const { if (!data_at_size.is_valid()) diff --git a/scene/resources/dynamic_font.h b/scene/resources/dynamic_font.h index ef4b9dd9d0..2fa1951d27 100644 --- a/scene/resources/dynamic_font.h +++ b/scene/resources/dynamic_font.h @@ -124,6 +124,8 @@ class DynamicFontAtSize : public Reference { float rect_margin; float oversampling; float scale_color_font; + float underline_position; + float underline_thickness; bool valid; @@ -187,6 +189,8 @@ public: float get_ascent() const; float get_descent() const; + float get_underline_position() const; + float get_underline_thickness() const; Size2 get_char_size(CharType p_char, CharType p_next, const Vector<Ref<DynamicFontAtSize>> &p_fallbacks) const; @@ -274,6 +278,8 @@ public: virtual float get_ascent() const; virtual float get_descent() const; + virtual float get_underline_position() const; + virtual float get_underline_thickness() const; virtual Size2 get_char_size(CharType p_char, CharType p_next = 0) const; diff --git a/scene/resources/font.cpp b/scene/resources/font.cpp index 267816f267..51c2ff389a 100644 --- a/scene/resources/font.cpp +++ b/scene/resources/font.cpp @@ -356,6 +356,16 @@ float BitmapFont::get_descent() const { return height - ascent; } +float BitmapFont::get_underline_position() const { + + return 2; +} + +float BitmapFont::get_underline_thickness() const { + + return 1; +} + void BitmapFont::add_texture(const Ref<Texture2D> &p_texture) { ERR_FAIL_COND_MSG(p_texture.is_null(), "It's not a reference to a valid Texture object."); diff --git a/scene/resources/font.h b/scene/resources/font.h index c233344529..54b1eaa1b9 100644 --- a/scene/resources/font.h +++ b/scene/resources/font.h @@ -47,6 +47,8 @@ public: virtual float get_ascent() const = 0; virtual float get_descent() const = 0; + virtual float get_underline_position() const = 0; + virtual float get_underline_thickness() const = 0; virtual Size2 get_char_size(CharType p_char, CharType p_next = 0) const = 0; Size2 get_string_size(const String &p_string) const; @@ -167,6 +169,8 @@ public: void set_ascent(float p_ascent); float get_ascent() const; float get_descent() const; + float get_underline_position() const; + float get_underline_thickness() const; void add_texture(const Ref<Texture2D> &p_texture); void add_char(CharType p_char, int p_texture_idx, const Rect2 &p_rect, const Size2 &p_align, float p_advance = -1); diff --git a/scene/resources/line_shape_2d.cpp b/scene/resources/line_shape_2d.cpp index a1c1b2f9f4..71d4f79e48 100644 --- a/scene/resources/line_shape_2d.cpp +++ b/scene/resources/line_shape_2d.cpp @@ -35,7 +35,7 @@ bool LineShape2D::_edit_is_selected_on_click(const Point2 &p_point, double p_tolerance) const { - Vector2 point = get_d() * get_normal(); + Vector2 point = get_distance() * get_normal(); Vector2 l[2][2] = { { point - get_normal().tangent() * 100, point + get_normal().tangent() * 100 }, { point, point + get_normal() * 30 } }; for (int i = 0; i < 2; i++) { @@ -51,7 +51,7 @@ void LineShape2D::_update_shape() { Array arr; arr.push_back(normal); - arr.push_back(d); + arr.push_back(distance); PhysicsServer2D::get_singleton()->shape_set_data(get_rid(), arr); emit_changed(); } @@ -62,9 +62,9 @@ void LineShape2D::set_normal(const Vector2 &p_normal) { _update_shape(); } -void LineShape2D::set_d(real_t p_d) { +void LineShape2D::set_distance(real_t p_distance) { - d = p_d; + distance = p_distance; _update_shape(); } @@ -72,14 +72,14 @@ Vector2 LineShape2D::get_normal() const { return normal; } -real_t LineShape2D::get_d() const { +real_t LineShape2D::get_distance() const { - return d; + return distance; } void LineShape2D::draw(const RID &p_to_rid, const Color &p_color) { - Vector2 point = get_d() * get_normal(); + Vector2 point = get_distance() * get_normal(); Vector2 l1[2] = { point - get_normal().tangent() * 100, point + get_normal().tangent() * 100 }; RS::get_singleton()->canvas_item_add_line(p_to_rid, l1[0], l1[1], p_color, 3); @@ -88,7 +88,7 @@ void LineShape2D::draw(const RID &p_to_rid, const Color &p_color) { } Rect2 LineShape2D::get_rect() const { - Vector2 point = get_d() * get_normal(); + Vector2 point = get_distance() * get_normal(); Vector2 l1[2] = { point - get_normal().tangent() * 100, point + get_normal().tangent() * 100 }; Vector2 l2[2] = { point, point + get_normal() * 30 }; @@ -101,7 +101,7 @@ Rect2 LineShape2D::get_rect() const { } real_t LineShape2D::get_enclosing_radius() const { - return d; + return distance; } void LineShape2D::_bind_methods() { @@ -109,17 +109,17 @@ void LineShape2D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_normal", "normal"), &LineShape2D::set_normal); ClassDB::bind_method(D_METHOD("get_normal"), &LineShape2D::get_normal); - ClassDB::bind_method(D_METHOD("set_d", "d"), &LineShape2D::set_d); - ClassDB::bind_method(D_METHOD("get_d"), &LineShape2D::get_d); + ClassDB::bind_method(D_METHOD("set_distance", "distance"), &LineShape2D::set_distance); + ClassDB::bind_method(D_METHOD("get_distance"), &LineShape2D::get_distance); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "normal"), "set_normal", "get_normal"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "d"), "set_d", "get_d"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "distance"), "set_distance", "get_distance"); } LineShape2D::LineShape2D() : Shape2D(PhysicsServer2D::get_singleton()->line_shape_create()) { normal = Vector2(0, 1); - d = 0; + distance = 0; _update_shape(); } diff --git a/scene/resources/line_shape_2d.h b/scene/resources/line_shape_2d.h index 5bf9e85bb9..74e8d57d03 100644 --- a/scene/resources/line_shape_2d.h +++ b/scene/resources/line_shape_2d.h @@ -37,7 +37,7 @@ class LineShape2D : public Shape2D { GDCLASS(LineShape2D, Shape2D); Vector2 normal; - real_t d; + real_t distance; void _update_shape(); @@ -48,10 +48,10 @@ public: virtual bool _edit_is_selected_on_click(const Point2 &p_point, double p_tolerance) const; void set_normal(const Vector2 &p_normal); - void set_d(real_t p_d); + void set_distance(real_t p_distance); Vector2 get_normal() const; - real_t get_d() const; + real_t get_distance() const; virtual void draw(const RID &p_to_rid, const Color &p_color); virtual Rect2 get_rect() const; diff --git a/scene/resources/mesh.cpp b/scene/resources/mesh.cpp index 401b689145..adecf5cf8f 100644 --- a/scene/resources/mesh.cpp +++ b/scene/resources/mesh.cpp @@ -1522,7 +1522,7 @@ Error ArrayMesh::lightmap_unwrap_cached(int *&r_cache_data, unsigned int &r_cach if (lightmap_surfaces[surface].format & ARRAY_FORMAT_TANGENT) { Plane t; t.normal = v.tangent; - t.d = v.binormal.dot(v.normal.cross(v.tangent)) < 0 ? -1 : 1; + t.distance = v.binormal.dot(v.normal.cross(v.tangent)) < 0 ? -1 : 1; surfaces_tools.write[surface]->add_tangent(t); } if (lightmap_surfaces[surface].format & ARRAY_FORMAT_BONES) { diff --git a/scene/resources/mesh_data_tool.cpp b/scene/resources/mesh_data_tool.cpp index 76d96786bc..e4d402479f 100644 --- a/scene/resources/mesh_data_tool.cpp +++ b/scene/resources/mesh_data_tool.cpp @@ -255,7 +255,7 @@ Error MeshDataTool::commit_to_surface(const Ref<ArrayMesh> &p_mesh) { ta[i * 4 + 0] = vtx.tangent.normal.x; ta[i * 4 + 1] = vtx.tangent.normal.y; ta[i * 4 + 2] = vtx.tangent.normal.z; - ta[i * 4 + 3] = vtx.tangent.d; + ta[i * 4 + 3] = vtx.tangent.distance; } if (uv) uv[i] = vtx.uv; diff --git a/scene/resources/surface_tool.cpp b/scene/resources/surface_tool.cpp index 4b392e23b7..c5e1aa7c80 100644 --- a/scene/resources/surface_tool.cpp +++ b/scene/resources/surface_tool.cpp @@ -107,7 +107,7 @@ void SurfaceTool::add_vertex(const Vector3 &p_vertex) { vtx.weights = last_weights; vtx.bones = last_bones; vtx.tangent = last_tangent.normal; - vtx.binormal = last_normal.cross(last_tangent.normal).normalized() * last_tangent.d; + vtx.binormal = last_normal.cross(last_tangent.normal).normalized() * last_tangent.distance; const int expected_vertices = 4; @@ -575,7 +575,7 @@ Vector<SurfaceTool::Vertex> SurfaceTool::create_vertex_array_from_triangle_array if (lformat & RS::ARRAY_FORMAT_TANGENT) { Plane p(tarr[i * 4 + 0], tarr[i * 4 + 1], tarr[i * 4 + 2], tarr[i * 4 + 3]); v.tangent = p.normal; - v.binormal = p.normal.cross(v.tangent).normalized() * p.d; + v.binormal = p.normal.cross(v.tangent).normalized() * p.distance; } if (lformat & RS::ARRAY_FORMAT_COLOR) v.color = carr[i]; @@ -658,7 +658,7 @@ void SurfaceTool::_create_list_from_arrays(Array arr, List<Vertex> *r_vertex, Li if (lformat & RS::ARRAY_FORMAT_TANGENT) { Plane p(tarr[i * 4 + 0], tarr[i * 4 + 1], tarr[i * 4 + 2], tarr[i * 4 + 3]); v.tangent = p.normal; - v.binormal = p.normal.cross(v.tangent).normalized() * p.d; + v.binormal = p.normal.cross(v.tangent).normalized() * p.distance; } if (lformat & RS::ARRAY_FORMAT_COLOR) v.color = carr[i]; diff --git a/scene/resources/visual_shader.cpp b/scene/resources/visual_shader.cpp index 310a7ef4e4..3b245f908a 100644 --- a/scene/resources/visual_shader.cpp +++ b/scene/resources/visual_shader.cpp @@ -1630,9 +1630,11 @@ const VisualShaderNodeInput::Port VisualShaderNodeInput::ports[] = { { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "light_vec", "vec3(LIGHT_VEC, 0.0)" }, { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_SCALAR, "light_height", "LIGHT_HEIGHT" }, { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "light_color", "LIGHT_COLOR.rgb" }, - { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "light_alpha", "LIGHT_COLOR.a" }, + { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_SCALAR, "light_alpha", "LIGHT_COLOR.a" }, { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "light_uv", "vec3(LIGHT_UV, 0.0)" }, { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "shadow_color", "SHADOW_COLOR.rgb" }, + { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_SCALAR, "shadow_alpha", "SHADOW_COLOR.a" }, + { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "shadow_vec", "vec3(SHADOW_VEC, 0.0)" }, { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "screen_uv", "vec3(SCREEN_UV, 0.0)" }, { 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)" }, @@ -2156,12 +2158,43 @@ String VisualShaderNodeUniform::get_uniform_name() const { return uniform_name; } +void VisualShaderNodeUniform::set_qualifier(VisualShaderNodeUniform::Qualifier p_qual) { + qualifier = p_qual; + emit_changed(); +} + +VisualShaderNodeUniform::Qualifier VisualShaderNodeUniform::get_qualifier() const { + return qualifier; +} + void VisualShaderNodeUniform::_bind_methods() { ClassDB::bind_method(D_METHOD("set_uniform_name", "name"), &VisualShaderNodeUniform::set_uniform_name); ClassDB::bind_method(D_METHOD("get_uniform_name"), &VisualShaderNodeUniform::get_uniform_name); + ClassDB::bind_method(D_METHOD("set_qualifier", "qualifier"), &VisualShaderNodeUniform::set_qualifier); + ClassDB::bind_method(D_METHOD("get_qualifier"), &VisualShaderNodeUniform::get_qualifier); + ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "uniform_name"), "set_uniform_name", "get_uniform_name"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "qualifier", PROPERTY_HINT_ENUM, "None,Global,Instance"), "set_qualifier", "get_qualifier"); + + BIND_ENUM_CONSTANT(QUAL_NONE); + BIND_ENUM_CONSTANT(QUAL_GLOBAL); + BIND_ENUM_CONSTANT(QUAL_INSTANCE); +} + +String VisualShaderNodeUniform::_get_qual_str() const { + if (is_qualifier_supported(qualifier)) { + switch (qualifier) { + case QUAL_NONE: + break; + case QUAL_GLOBAL: + return "global "; + case QUAL_INSTANCE: + return "instance "; + } + } + return String(); } String VisualShaderNodeUniform::get_warning(Shader::Mode p_mode, VisualShader::Type p_type) const { @@ -2171,11 +2204,21 @@ String VisualShaderNodeUniform::get_warning(Shader::Mode p_mode, VisualShader::T if (keyword_list.find(uniform_name)) { return TTR("Uniform name cannot be equal to a shader keyword. Choose another name."); } + if (!is_qualifier_supported(qualifier)) { + return "This uniform type does not support that qualifier."; + } return String(); } +Vector<StringName> VisualShaderNodeUniform::get_editable_properties() const { + Vector<StringName> props; + props.push_back("qualifier"); + return props; +} + VisualShaderNodeUniform::VisualShaderNodeUniform() { + qualifier = QUAL_NONE; } ////////////// GroupBase diff --git a/scene/resources/visual_shader.h b/scene/resources/visual_shader.h index ecf3f93fbb..56f8e74d2b 100644 --- a/scene/resources/visual_shader.h +++ b/scene/resources/visual_shader.h @@ -369,21 +369,38 @@ public: class VisualShaderNodeUniform : public VisualShaderNode { GDCLASS(VisualShaderNodeUniform, VisualShaderNode); +public: + enum Qualifier { + QUAL_NONE, + QUAL_GLOBAL, + QUAL_INSTANCE, + }; + private: String uniform_name; + Qualifier qualifier; protected: static void _bind_methods(); + String _get_qual_str() const; public: void set_uniform_name(const String &p_name); String get_uniform_name() const; + void set_qualifier(Qualifier p_qual); + Qualifier get_qualifier() const; + + virtual bool is_qualifier_supported(Qualifier p_qual) const = 0; + + virtual Vector<StringName> get_editable_properties() const; virtual String get_warning(Shader::Mode p_mode, VisualShader::Type p_type) const; VisualShaderNodeUniform(); }; +VARIANT_ENUM_CAST(VisualShaderNodeUniform::Qualifier) + class VisualShaderNodeGroupBase : public VisualShaderNode { GDCLASS(VisualShaderNodeGroupBase, VisualShaderNode); diff --git a/scene/resources/visual_shader_nodes.cpp b/scene/resources/visual_shader_nodes.cpp index 2064ca10f3..7b9953a90f 100644 --- a/scene/resources/visual_shader_nodes.cpp +++ b/scene/resources/visual_shader_nodes.cpp @@ -3283,11 +3283,11 @@ String VisualShaderNodeFloatUniform::get_output_port_name(int p_port) const { String VisualShaderNodeFloatUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { if (hint == HINT_RANGE) { - return "uniform float " + get_uniform_name() + " : hint_range(" + rtos(hint_range_min) + ", " + rtos(hint_range_max) + ");\n"; + return _get_qual_str() + "uniform float " + get_uniform_name() + " : hint_range(" + rtos(hint_range_min) + ", " + rtos(hint_range_max) + ");\n"; } else if (hint == HINT_RANGE_STEP) { - return "uniform float " + get_uniform_name() + " : hint_range(" + rtos(hint_range_min) + ", " + rtos(hint_range_max) + ", " + rtos(hint_range_step) + ");\n"; + return _get_qual_str() + "uniform float " + get_uniform_name() + " : hint_range(" + rtos(hint_range_min) + ", " + rtos(hint_range_max) + ", " + rtos(hint_range_step) + ");\n"; } - return "uniform float " + get_uniform_name() + ";\n"; + return _get_qual_str() + "uniform float " + get_uniform_name() + ";\n"; } String VisualShaderNodeFloatUniform::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 { @@ -3353,8 +3353,12 @@ void VisualShaderNodeFloatUniform::_bind_methods() { BIND_ENUM_CONSTANT(HINT_RANGE_STEP); } +bool VisualShaderNodeFloatUniform::is_qualifier_supported(Qualifier p_qual) const { + return true; // all qualifiers are supported +} + Vector<StringName> VisualShaderNodeFloatUniform::get_editable_properties() const { - Vector<StringName> props; + Vector<StringName> props = VisualShaderNodeUniform::get_editable_properties(); props.push_back("hint"); if (hint == HINT_RANGE || hint == HINT_RANGE_STEP) { props.push_back("min"); @@ -3405,11 +3409,11 @@ String VisualShaderNodeIntUniform::get_output_port_name(int p_port) const { String VisualShaderNodeIntUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { if (hint == HINT_RANGE) { - return "uniform int " + get_uniform_name() + " : hint_range(" + rtos(hint_range_min) + ", " + rtos(hint_range_max) + ");\n"; + return _get_qual_str() + "uniform int " + get_uniform_name() + " : hint_range(" + rtos(hint_range_min) + ", " + rtos(hint_range_max) + ");\n"; } else if (hint == HINT_RANGE_STEP) { - return "uniform int " + get_uniform_name() + " : hint_range(" + rtos(hint_range_min) + ", " + rtos(hint_range_max) + ", " + rtos(hint_range_step) + ");\n"; + return _get_qual_str() + "uniform int " + get_uniform_name() + " : hint_range(" + rtos(hint_range_min) + ", " + rtos(hint_range_max) + ", " + rtos(hint_range_step) + ");\n"; } - return "uniform int " + get_uniform_name() + ";\n"; + return _get_qual_str() + "uniform int " + get_uniform_name() + ";\n"; } String VisualShaderNodeIntUniform::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 { @@ -3475,8 +3479,12 @@ void VisualShaderNodeIntUniform::_bind_methods() { BIND_ENUM_CONSTANT(HINT_RANGE_STEP); } +bool VisualShaderNodeIntUniform::is_qualifier_supported(Qualifier p_qual) const { + return true; // all qualifiers are supported +} + Vector<StringName> VisualShaderNodeIntUniform::get_editable_properties() const { - Vector<StringName> props; + Vector<StringName> props = VisualShaderNodeUniform::get_editable_properties(); props.push_back("hint"); if (hint == HINT_RANGE || hint == HINT_RANGE_STEP) { props.push_back("min"); @@ -3526,13 +3534,17 @@ String VisualShaderNodeBooleanUniform::get_output_port_name(int p_port) const { } String VisualShaderNodeBooleanUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { - return "uniform bool " + get_uniform_name() + ";\n"; + return _get_qual_str() + "uniform bool " + get_uniform_name() + ";\n"; } String VisualShaderNodeBooleanUniform::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 { return "\t" + p_output_vars[0] + " = " + get_uniform_name() + ";\n"; } +bool VisualShaderNodeBooleanUniform::is_qualifier_supported(Qualifier p_qual) const { + return true; // all qualifiers are supported +} + VisualShaderNodeBooleanUniform::VisualShaderNodeBooleanUniform() { } @@ -3568,7 +3580,7 @@ String VisualShaderNodeColorUniform::get_output_port_name(int p_port) const { String VisualShaderNodeColorUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { - return "uniform vec4 " + get_uniform_name() + " : hint_color;\n"; + return _get_qual_str() + "uniform vec4 " + get_uniform_name() + " : hint_color;\n"; } String VisualShaderNodeColorUniform::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 { @@ -3577,6 +3589,10 @@ String VisualShaderNodeColorUniform::generate_code(Shader::Mode p_mode, VisualSh return code; } +bool VisualShaderNodeColorUniform::is_qualifier_supported(Qualifier p_qual) const { + return true; // all qualifiers are supported +} + VisualShaderNodeColorUniform::VisualShaderNodeColorUniform() { } @@ -3611,13 +3627,17 @@ String VisualShaderNodeVec3Uniform::get_output_port_name(int p_port) const { } String VisualShaderNodeVec3Uniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { - return "uniform vec3 " + get_uniform_name() + ";\n"; + return _get_qual_str() + "uniform vec3 " + get_uniform_name() + ";\n"; } String VisualShaderNodeVec3Uniform::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 { return "\t" + p_output_vars[0] + " = " + get_uniform_name() + ";\n"; } +bool VisualShaderNodeVec3Uniform::is_qualifier_supported(Qualifier p_qual) const { + return true; // all qualifiers are supported +} + VisualShaderNodeVec3Uniform::VisualShaderNodeVec3Uniform() { } @@ -3652,13 +3672,17 @@ String VisualShaderNodeTransformUniform::get_output_port_name(int p_port) const } String VisualShaderNodeTransformUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { - return "uniform mat4 " + get_uniform_name() + ";\n"; + return _get_qual_str() + "uniform mat4 " + get_uniform_name() + ";\n"; } String VisualShaderNodeTransformUniform::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 { return "\t" + p_output_vars[0] + " = " + get_uniform_name() + ";\n"; } +bool VisualShaderNodeTransformUniform::is_qualifier_supported(Qualifier p_qual) const { + return true; // all qualifiers are supported +} + VisualShaderNodeTransformUniform::VisualShaderNodeTransformUniform() { } @@ -3713,7 +3737,7 @@ String VisualShaderNodeTextureUniform::get_output_port_name(int p_port) const { } String VisualShaderNodeTextureUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { - String code = "uniform sampler2D " + get_uniform_name(); + String code = _get_qual_str() + "uniform sampler2D " + get_uniform_name(); switch (texture_type) { case TYPE_DATA: @@ -3778,7 +3802,7 @@ VisualShaderNodeTextureUniform::ColorDefault VisualShaderNodeTextureUniform::get } Vector<StringName> VisualShaderNodeTextureUniform::get_editable_properties() const { - Vector<StringName> props; + Vector<StringName> props = VisualShaderNodeUniform::get_editable_properties(); props.push_back("texture_type"); props.push_back("color_default"); return props; @@ -3810,6 +3834,18 @@ String VisualShaderNodeTextureUniform::get_input_port_default_hint(int p_port) c return ""; } +bool VisualShaderNodeTextureUniform::is_qualifier_supported(Qualifier p_qual) const { + switch (p_qual) { + case Qualifier::QUAL_NONE: + return true; + case Qualifier::QUAL_GLOBAL: + return true; + case Qualifier::QUAL_INSTANCE: + return false; + } + return false; +} + VisualShaderNodeTextureUniform::VisualShaderNodeTextureUniform() { texture_type = TYPE_DATA; color_default = COLOR_DEFAULT_WHITE; @@ -3952,7 +3988,7 @@ String VisualShaderNodeCubemapUniform::get_input_port_default_hint(int p_port) c } String VisualShaderNodeCubemapUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { - String code = "uniform samplerCube " + get_uniform_name(); + String code = _get_qual_str() + "uniform samplerCube " + get_uniform_name(); switch (texture_type) { case TYPE_DATA: diff --git a/scene/resources/visual_shader_nodes.h b/scene/resources/visual_shader_nodes.h index 035e39230c..69f42f621a 100644 --- a/scene/resources/visual_shader_nodes.h +++ b/scene/resources/visual_shader_nodes.h @@ -1457,6 +1457,8 @@ public: void set_step(float p_value); float get_step() const; + bool is_qualifier_supported(Qualifier p_qual) const; + virtual Vector<StringName> get_editable_properties() const; VisualShaderNodeFloatUniform(); @@ -1509,6 +1511,8 @@ public: void set_step(int p_value); int get_step() const; + bool is_qualifier_supported(Qualifier p_qual) const; + virtual Vector<StringName> get_editable_properties() const; VisualShaderNodeIntUniform(); @@ -1535,6 +1539,8 @@ public: virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const; virtual String 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 = false) const; //if no output is connected, the output var passed will be empty. if no input is connected and input is NIL, the input var passed will be empty + bool is_qualifier_supported(Qualifier p_qual) const; + VisualShaderNodeBooleanUniform(); }; @@ -1557,6 +1563,8 @@ public: virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const; virtual String 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 = false) const; //if no output is connected, the output var passed will be empty. if no input is connected and input is NIL, the input var passed will be empty + bool is_qualifier_supported(Qualifier p_qual) const; + VisualShaderNodeColorUniform(); }; @@ -1579,6 +1587,8 @@ public: virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const; virtual String 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 = false) const; //if no output is connected, the output var passed will be empty. if no input is connected and input is NIL, the input var passed will be empty + bool is_qualifier_supported(Qualifier p_qual) const; + VisualShaderNodeVec3Uniform(); }; @@ -1601,6 +1611,8 @@ public: virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const; virtual String 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 = false) const; //if no output is connected, the output var passed will be empty. if no input is connected and input is NIL, the input var passed will be empty + bool is_qualifier_supported(Qualifier p_qual) const; + VisualShaderNodeTransformUniform(); }; @@ -1652,6 +1664,8 @@ public: void set_color_default(ColorDefault p_default); ColorDefault get_color_default() const; + bool is_qualifier_supported(Qualifier p_qual) const; + VisualShaderNodeTextureUniform(); }; diff --git a/scene/resources/world_margin_shape_3d.cpp b/scene/resources/world_margin_shape_3d.cpp index aa96f8aa68..833e7725ae 100644 --- a/scene/resources/world_margin_shape_3d.cpp +++ b/scene/resources/world_margin_shape_3d.cpp @@ -41,10 +41,10 @@ Vector<Vector3> WorldMarginShape3D::get_debug_mesh_lines() { Vector3 n2 = p.normal.cross(n1).normalized(); Vector3 pface[4] = { - p.normal * p.d + n1 * 10.0 + n2 * 10.0, - p.normal * p.d + n1 * 10.0 + n2 * -10.0, - p.normal * p.d + n1 * -10.0 + n2 * -10.0, - p.normal * p.d + n1 * -10.0 + n2 * 10.0, + p.normal * p.distance + n1 * 10.0 + n2 * 10.0, + p.normal * p.distance + n1 * 10.0 + n2 * -10.0, + p.normal * p.distance + n1 * -10.0 + n2 * -10.0, + p.normal * p.distance + n1 * -10.0 + n2 * 10.0, }; points.push_back(pface[0]); @@ -55,8 +55,8 @@ Vector<Vector3> WorldMarginShape3D::get_debug_mesh_lines() { points.push_back(pface[3]); points.push_back(pface[3]); points.push_back(pface[0]); - points.push_back(p.normal * p.d); - points.push_back(p.normal * p.d + p.normal * 3); + points.push_back(p.normal * p.distance); + points.push_back(p.normal * p.distance + p.normal * 3); return points; } |