Add antialias support for CanvasItem draw primitives
including - rect, circle; both filled and unfilled. - polyline, multiline
This commit is contained in:
parent
c6f1f614bb
commit
ed3d311687
|
@ -84,6 +84,7 @@
|
||||||
Draws a circle. See also [method draw_arc], [method draw_polyline], and [method draw_polygon].
|
Draws a circle. See also [method draw_arc], [method draw_polyline], and [method draw_polygon].
|
||||||
If [param filled] is [code]true[/code], the circle will be filled with the [param color] specified. If [param filled] is [code]false[/code], the circle will be drawn as a stroke with the [param color] and [param width] specified.
|
If [param filled] is [code]true[/code], the circle will be filled with the [param color] specified. If [param filled] is [code]false[/code], the circle will be drawn as a stroke with the [param color] and [param width] specified.
|
||||||
If [param width] is negative, then two-point primitives will be drawn instead of a four-point ones. This means that when the CanvasItem is scaled, the lines will remain thin. If this behavior is not desired, then pass a positive [param width] like [code]1.0[/code].
|
If [param width] is negative, then two-point primitives will be drawn instead of a four-point ones. This means that when the CanvasItem is scaled, the lines will remain thin. If this behavior is not desired, then pass a positive [param width] like [code]1.0[/code].
|
||||||
|
If [param antialiased] is [code]true[/code], half transparent "feathers" will be attached to the boundary, making outlines smooth.
|
||||||
[b]Note:[/b] [param width] is only effective if [param filled] is [code]false[/code].
|
[b]Note:[/b] [param width] is only effective if [param filled] is [code]false[/code].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
@ -105,9 +106,12 @@
|
||||||
<param index="3" name="width" type="float" default="-1.0" />
|
<param index="3" name="width" type="float" default="-1.0" />
|
||||||
<param index="4" name="dash" type="float" default="2.0" />
|
<param index="4" name="dash" type="float" default="2.0" />
|
||||||
<param index="5" name="aligned" type="bool" default="true" />
|
<param index="5" name="aligned" type="bool" default="true" />
|
||||||
|
<param index="6" name="antialiased" type="bool" default="false" />
|
||||||
<description>
|
<description>
|
||||||
Draws a dashed line from a 2D point to another, with a given color and width. See also [method draw_multiline] and [method draw_polyline].
|
Draws a dashed line from a 2D point to another, with a given color and width. See also [method draw_multiline] and [method draw_polyline].
|
||||||
If [param width] is negative, then a two-point primitives will be drawn instead of a four-point ones. This means that when the CanvasItem is scaled, the line parts will remain thin. If this behavior is not desired, then pass a positive [param width] like [code]1.0[/code].
|
If [param width] is negative, then a two-point primitives will be drawn instead of a four-point ones. This means that when the CanvasItem is scaled, the line parts will remain thin. If this behavior is not desired, then pass a positive [param width] like [code]1.0[/code].
|
||||||
|
If [param antialiased] is [code]true[/code], half transparent "feathers" will be attached to the boundary, making outlines smooth.
|
||||||
|
[b]Note:[/b] [param antialiased] is only effective if [param width] is greater than [code]0.0[/code].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="draw_end_animation">
|
<method name="draw_end_animation">
|
||||||
|
@ -175,9 +179,11 @@
|
||||||
<param index="0" name="points" type="PackedVector2Array" />
|
<param index="0" name="points" type="PackedVector2Array" />
|
||||||
<param index="1" name="color" type="Color" />
|
<param index="1" name="color" type="Color" />
|
||||||
<param index="2" name="width" type="float" default="-1.0" />
|
<param index="2" name="width" type="float" default="-1.0" />
|
||||||
|
<param index="3" name="antialiased" type="bool" default="false" />
|
||||||
<description>
|
<description>
|
||||||
Draws multiple disconnected lines with a uniform [param width] and [param color]. Each line is defined by two consecutive points from [param points] array, i.e. i-th segment consists of [code]points[2 * i][/code], [code]points[2 * i + 1][/code] endpoints. When drawing large amounts of lines, this is faster than using individual [method draw_line] calls. To draw interconnected lines, use [method draw_polyline] instead.
|
Draws multiple disconnected lines with a uniform [param width] and [param color]. Each line is defined by two consecutive points from [param points] array, i.e. i-th segment consists of [code]points[2 * i][/code], [code]points[2 * i + 1][/code] endpoints. When drawing large amounts of lines, this is faster than using individual [method draw_line] calls. To draw interconnected lines, use [method draw_polyline] instead.
|
||||||
If [param width] is negative, then two-point primitives will be drawn instead of a four-point ones. This means that when the CanvasItem is scaled, the lines will remain thin. If this behavior is not desired, then pass a positive [param width] like [code]1.0[/code].
|
If [param width] is negative, then two-point primitives will be drawn instead of a four-point ones. This means that when the CanvasItem is scaled, the lines will remain thin. If this behavior is not desired, then pass a positive [param width] like [code]1.0[/code].
|
||||||
|
[b]Note:[/b] [param antialiased] is only effective if [param width] is greater than [code]0.0[/code].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="draw_multiline_colors">
|
<method name="draw_multiline_colors">
|
||||||
|
@ -185,9 +191,11 @@
|
||||||
<param index="0" name="points" type="PackedVector2Array" />
|
<param index="0" name="points" type="PackedVector2Array" />
|
||||||
<param index="1" name="colors" type="PackedColorArray" />
|
<param index="1" name="colors" type="PackedColorArray" />
|
||||||
<param index="2" name="width" type="float" default="-1.0" />
|
<param index="2" name="width" type="float" default="-1.0" />
|
||||||
|
<param index="3" name="antialiased" type="bool" default="false" />
|
||||||
<description>
|
<description>
|
||||||
Draws multiple disconnected lines with a uniform [param width] and segment-by-segment coloring. Each segment is defined by two consecutive points from [param points] array and a corresponding color from [param colors] array, i.e. i-th segment consists of [code]points[2 * i][/code], [code]points[2 * i + 1][/code] endpoints and has [code]colors[i][/code] color. When drawing large amounts of lines, this is faster than using individual [method draw_line] calls. To draw interconnected lines, use [method draw_polyline_colors] instead.
|
Draws multiple disconnected lines with a uniform [param width] and segment-by-segment coloring. Each segment is defined by two consecutive points from [param points] array and a corresponding color from [param colors] array, i.e. i-th segment consists of [code]points[2 * i][/code], [code]points[2 * i + 1][/code] endpoints and has [code]colors[i][/code] color. When drawing large amounts of lines, this is faster than using individual [method draw_line] calls. To draw interconnected lines, use [method draw_polyline_colors] instead.
|
||||||
If [param width] is negative, then two-point primitives will be drawn instead of a four-point ones. This means that when the CanvasItem is scaled, the lines will remain thin. If this behavior is not desired, then pass a positive [param width] like [code]1.0[/code].
|
If [param width] is negative, then two-point primitives will be drawn instead of a four-point ones. This means that when the CanvasItem is scaled, the lines will remain thin. If this behavior is not desired, then pass a positive [param width] like [code]1.0[/code].
|
||||||
|
[b]Note:[/b] [param antialiased] is only effective if [param width] is greater than [code]0.0[/code].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="draw_multiline_string" qualifiers="const">
|
<method name="draw_multiline_string" qualifiers="const">
|
||||||
|
@ -283,9 +291,11 @@
|
||||||
<param index="1" name="color" type="Color" />
|
<param index="1" name="color" type="Color" />
|
||||||
<param index="2" name="filled" type="bool" default="true" />
|
<param index="2" name="filled" type="bool" default="true" />
|
||||||
<param index="3" name="width" type="float" default="-1.0" />
|
<param index="3" name="width" type="float" default="-1.0" />
|
||||||
|
<param index="4" name="antialiased" type="bool" default="false" />
|
||||||
<description>
|
<description>
|
||||||
Draws a rectangle. If [param filled] is [code]true[/code], the rectangle will be filled with the [param color] specified. If [param filled] is [code]false[/code], the rectangle will be drawn as a stroke with the [param color] and [param width] specified. See also [method draw_texture_rect].
|
Draws a rectangle. If [param filled] is [code]true[/code], the rectangle will be filled with the [param color] specified. If [param filled] is [code]false[/code], the rectangle will be drawn as a stroke with the [param color] and [param width] specified. See also [method draw_texture_rect].
|
||||||
If [param width] is negative, then two-point primitives will be drawn instead of a four-point ones. This means that when the CanvasItem is scaled, the lines will remain thin. If this behavior is not desired, then pass a positive [param width] like [code]1.0[/code].
|
If [param width] is negative, then two-point primitives will be drawn instead of a four-point ones. This means that when the CanvasItem is scaled, the lines will remain thin. If this behavior is not desired, then pass a positive [param width] like [code]1.0[/code].
|
||||||
|
If [param antialiased] is [code]true[/code], half transparent "feathers" will be attached to the boundary, making outlines smooth.
|
||||||
[b]Note:[/b] [param width] is only effective if [param filled] is [code]false[/code].
|
[b]Note:[/b] [param width] is only effective if [param filled] is [code]false[/code].
|
||||||
[b]Note:[/b] Unfilled rectangles drawn with a negative [param width] may not display perfectly. For example, corners may be missing or brighter due to overlapping lines (for a translucent [param color]).
|
[b]Note:[/b] Unfilled rectangles drawn with a negative [param width] may not display perfectly. For example, corners may be missing or brighter due to overlapping lines (for a translucent [param color]).
|
||||||
</description>
|
</description>
|
||||||
|
|
|
@ -214,6 +214,7 @@
|
||||||
<param index="1" name="pos" type="Vector2" />
|
<param index="1" name="pos" type="Vector2" />
|
||||||
<param index="2" name="radius" type="float" />
|
<param index="2" name="radius" type="float" />
|
||||||
<param index="3" name="color" type="Color" />
|
<param index="3" name="color" type="Color" />
|
||||||
|
<param index="4" name="antialiased" type="bool" default="false" />
|
||||||
<description>
|
<description>
|
||||||
Draws a circle on the [CanvasItem] pointed to by the [param item] [RID]. See also [method CanvasItem.draw_circle].
|
Draws a circle on the [CanvasItem] pointed to by the [param item] [RID]. See also [method CanvasItem.draw_circle].
|
||||||
</description>
|
</description>
|
||||||
|
@ -280,6 +281,7 @@
|
||||||
<param index="1" name="points" type="PackedVector2Array" />
|
<param index="1" name="points" type="PackedVector2Array" />
|
||||||
<param index="2" name="colors" type="PackedColorArray" />
|
<param index="2" name="colors" type="PackedColorArray" />
|
||||||
<param index="3" name="width" type="float" default="-1.0" />
|
<param index="3" name="width" type="float" default="-1.0" />
|
||||||
|
<param index="4" name="antialiased" type="bool" default="false" />
|
||||||
<description>
|
<description>
|
||||||
Draws a 2D multiline on the [CanvasItem] pointed to by the [param item] [RID]. See also [method CanvasItem.draw_multiline] and [method CanvasItem.draw_multiline_colors].
|
Draws a 2D multiline on the [CanvasItem] pointed to by the [param item] [RID]. See also [method CanvasItem.draw_multiline] and [method CanvasItem.draw_multiline_colors].
|
||||||
</description>
|
</description>
|
||||||
|
@ -356,6 +358,7 @@
|
||||||
<param index="0" name="item" type="RID" />
|
<param index="0" name="item" type="RID" />
|
||||||
<param index="1" name="rect" type="Rect2" />
|
<param index="1" name="rect" type="Rect2" />
|
||||||
<param index="2" name="color" type="Color" />
|
<param index="2" name="color" type="Color" />
|
||||||
|
<param index="3" name="antialiased" type="bool" default="false" />
|
||||||
<description>
|
<description>
|
||||||
Draws a rectangle on the [CanvasItem] pointed to by the [param item] [RID]. See also [method CanvasItem.draw_rect].
|
Draws a rectangle on the [CanvasItem] pointed to by the [param item] [RID]. See also [method CanvasItem.draw_rect].
|
||||||
</description>
|
</description>
|
||||||
|
|
|
@ -344,3 +344,16 @@ GH-91143
|
||||||
Validate extension JSON: Error: Field 'classes/Input/methods/vibrate_handheld/arguments': size changed value in new API, from 1 to 2.
|
Validate extension JSON: Error: Field 'classes/Input/methods/vibrate_handheld/arguments': size changed value in new API, from 1 to 2.
|
||||||
|
|
||||||
Added optional argument. Compatibility method registered.
|
Added optional argument. Compatibility method registered.
|
||||||
|
|
||||||
|
|
||||||
|
GH-84523
|
||||||
|
--------
|
||||||
|
Validate extension JSON: Error: Field 'classes/CanvasItem/methods/draw_dashed_line/arguments': size changed value in new API, from 6 to 7.
|
||||||
|
Validate extension JSON: Error: Field 'classes/CanvasItem/methods/draw_multiline/arguments': size changed value in new API, from 3 to 4.
|
||||||
|
Validate extension JSON: Error: Field 'classes/CanvasItem/methods/draw_multiline_colors/arguments': size changed value in new API, from 3 to 4.
|
||||||
|
Validate extension JSON: Error: Field 'classes/CanvasItem/methods/draw_rect/arguments': size changed value in new API, from 4 to 5.
|
||||||
|
Validate extension JSON: Error: Field 'classes/RenderingServer/methods/canvas_item_add_circle/arguments': size changed value in new API, from 4 to 5.
|
||||||
|
Validate extension JSON: Error: Field 'classes/RenderingServer/methods/canvas_item_add_multiline/arguments': size changed value in new API, from 4 to 5.
|
||||||
|
Validate extension JSON: Error: Field 'classes/RenderingServer/methods/canvas_item_add_rect/arguments': size changed value in new API, from 3 to 4.
|
||||||
|
|
||||||
|
Optional arguments added. Compatibility methods registered.
|
||||||
|
|
|
@ -30,12 +30,32 @@
|
||||||
|
|
||||||
#ifndef DISABLE_DEPRECATED
|
#ifndef DISABLE_DEPRECATED
|
||||||
|
|
||||||
void CanvasItem::_draw_circle_compat_84472(const Point2 &p_pos, real_t p_radius, const Color &p_color) {
|
void CanvasItem::_draw_circle_bind_compat_84472(const Point2 &p_pos, real_t p_radius, const Color &p_color) {
|
||||||
draw_circle(p_pos, p_radius, p_color, true, -1.0, false);
|
draw_circle(p_pos, p_radius, p_color, true, -1.0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CanvasItem::_draw_rect_bind_compat_84523(const Rect2 &p_rect, const Color &p_color, bool p_filled, real_t p_width) {
|
||||||
|
draw_rect(p_rect, p_color, p_filled, p_width, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CanvasItem::_draw_dashed_line_bind_compat_84523(const Point2 &p_from, const Point2 &p_to, const Color &p_color, real_t p_width, real_t p_dash, bool p_aligned) {
|
||||||
|
draw_dashed_line(p_from, p_to, p_color, p_width, p_dash, p_aligned, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CanvasItem::_draw_multiline_bind_compat_84523(const Vector<Point2> &p_points, const Color &p_color, real_t p_width) {
|
||||||
|
draw_multiline(p_points, p_color, p_width, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CanvasItem::_draw_multiline_colors_bind_compat_84523(const Vector<Point2> &p_points, const Vector<Color> &p_colors, real_t p_width) {
|
||||||
|
draw_multiline_colors(p_points, p_colors, p_width, false);
|
||||||
|
}
|
||||||
|
|
||||||
void CanvasItem::_bind_compatibility_methods() {
|
void CanvasItem::_bind_compatibility_methods() {
|
||||||
ClassDB::bind_compatibility_method(D_METHOD("draw_circle", "position", "radius", "color"), &CanvasItem::_draw_circle_compat_84472);
|
ClassDB::bind_compatibility_method(D_METHOD("draw_circle", "position", "radius", "color"), &CanvasItem::_draw_circle_bind_compat_84472);
|
||||||
|
ClassDB::bind_compatibility_method(D_METHOD("draw_rect", "rect", "color", "filled", "width"), &CanvasItem::_draw_rect_bind_compat_84523, DEFVAL(true), DEFVAL(-1.0));
|
||||||
|
ClassDB::bind_compatibility_method(D_METHOD("draw_dashed_line", "from", "to", "color", "width", "dash", "aligned"), &CanvasItem::_draw_dashed_line_bind_compat_84523, DEFVAL(-1.0), DEFVAL(2.0), DEFVAL(true));
|
||||||
|
ClassDB::bind_compatibility_method(D_METHOD("draw_multiline", "points", "color", "width"), &CanvasItem::_draw_multiline_bind_compat_84523, DEFVAL(-1.0));
|
||||||
|
ClassDB::bind_compatibility_method(D_METHOD("draw_multiline_colors", "points", "colors", "width"), &CanvasItem::_draw_multiline_colors_bind_compat_84523, DEFVAL(-1.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -609,7 +609,7 @@ bool CanvasItem::is_y_sort_enabled() const {
|
||||||
return y_sort_enabled;
|
return y_sort_enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CanvasItem::draw_dashed_line(const Point2 &p_from, const Point2 &p_to, const Color &p_color, real_t p_width, real_t p_dash, bool p_aligned) {
|
void CanvasItem::draw_dashed_line(const Point2 &p_from, const Point2 &p_to, const Color &p_color, real_t p_width, real_t p_dash, bool p_aligned, bool p_antialiased) {
|
||||||
ERR_THREAD_GUARD;
|
ERR_THREAD_GUARD;
|
||||||
ERR_DRAW_GUARD;
|
ERR_DRAW_GUARD;
|
||||||
ERR_FAIL_COND(p_dash <= 0.0);
|
ERR_FAIL_COND(p_dash <= 0.0);
|
||||||
|
@ -618,7 +618,7 @@ void CanvasItem::draw_dashed_line(const Point2 &p_from, const Point2 &p_to, cons
|
||||||
Vector2 step = p_dash * (p_to - p_from).normalized();
|
Vector2 step = p_dash * (p_to - p_from).normalized();
|
||||||
|
|
||||||
if (length < p_dash || step == Vector2()) {
|
if (length < p_dash || step == Vector2()) {
|
||||||
RenderingServer::get_singleton()->canvas_item_add_line(canvas_item, p_from, p_to, p_color, p_width);
|
RenderingServer::get_singleton()->canvas_item_add_line(canvas_item, p_from, p_to, p_color, p_width, p_antialiased);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -642,7 +642,7 @@ void CanvasItem::draw_dashed_line(const Point2 &p_from, const Point2 &p_to, cons
|
||||||
|
|
||||||
Vector<Color> colors = { p_color };
|
Vector<Color> colors = { p_color };
|
||||||
|
|
||||||
RenderingServer::get_singleton()->canvas_item_add_multiline(canvas_item, points, colors, p_width);
|
RenderingServer::get_singleton()->canvas_item_add_multiline(canvas_item, points, colors, p_width, p_antialiased);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CanvasItem::draw_line(const Point2 &p_from, const Point2 &p_to, const Color &p_color, real_t p_width, bool p_antialiased) {
|
void CanvasItem::draw_line(const Point2 &p_from, const Point2 &p_to, const Color &p_color, real_t p_width, bool p_antialiased) {
|
||||||
|
@ -683,22 +683,22 @@ void CanvasItem::draw_arc(const Vector2 &p_center, real_t p_radius, real_t p_sta
|
||||||
draw_polyline(points, p_color, p_width, p_antialiased);
|
draw_polyline(points, p_color, p_width, p_antialiased);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CanvasItem::draw_multiline(const Vector<Point2> &p_points, const Color &p_color, real_t p_width) {
|
void CanvasItem::draw_multiline(const Vector<Point2> &p_points, const Color &p_color, real_t p_width, bool p_antialiased) {
|
||||||
ERR_THREAD_GUARD;
|
ERR_THREAD_GUARD;
|
||||||
ERR_DRAW_GUARD;
|
ERR_DRAW_GUARD;
|
||||||
|
|
||||||
Vector<Color> colors = { p_color };
|
Vector<Color> colors = { p_color };
|
||||||
RenderingServer::get_singleton()->canvas_item_add_multiline(canvas_item, p_points, colors, p_width);
|
RenderingServer::get_singleton()->canvas_item_add_multiline(canvas_item, p_points, colors, p_width, p_antialiased);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CanvasItem::draw_multiline_colors(const Vector<Point2> &p_points, const Vector<Color> &p_colors, real_t p_width) {
|
void CanvasItem::draw_multiline_colors(const Vector<Point2> &p_points, const Vector<Color> &p_colors, real_t p_width, bool p_antialiased) {
|
||||||
ERR_THREAD_GUARD;
|
ERR_THREAD_GUARD;
|
||||||
ERR_DRAW_GUARD;
|
ERR_DRAW_GUARD;
|
||||||
|
|
||||||
RenderingServer::get_singleton()->canvas_item_add_multiline(canvas_item, p_points, p_colors, p_width);
|
RenderingServer::get_singleton()->canvas_item_add_multiline(canvas_item, p_points, p_colors, p_width, p_antialiased);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CanvasItem::draw_rect(const Rect2 &p_rect, const Color &p_color, bool p_filled, real_t p_width) {
|
void CanvasItem::draw_rect(const Rect2 &p_rect, const Color &p_color, bool p_filled, real_t p_width, bool p_antialiased) {
|
||||||
ERR_THREAD_GUARD;
|
ERR_THREAD_GUARD;
|
||||||
ERR_DRAW_GUARD;
|
ERR_DRAW_GUARD;
|
||||||
|
|
||||||
|
@ -709,9 +709,9 @@ void CanvasItem::draw_rect(const Rect2 &p_rect, const Color &p_color, bool p_fil
|
||||||
WARN_PRINT("The draw_rect() \"width\" argument has no effect when \"filled\" is \"true\".");
|
WARN_PRINT("The draw_rect() \"width\" argument has no effect when \"filled\" is \"true\".");
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderingServer::get_singleton()->canvas_item_add_rect(canvas_item, rect, p_color);
|
RenderingServer::get_singleton()->canvas_item_add_rect(canvas_item, rect, p_color, p_antialiased);
|
||||||
} else if (p_width >= rect.size.width || p_width >= rect.size.height) {
|
} else if (p_width >= rect.size.width || p_width >= rect.size.height) {
|
||||||
RenderingServer::get_singleton()->canvas_item_add_rect(canvas_item, rect.grow(0.5f * p_width), p_color);
|
RenderingServer::get_singleton()->canvas_item_add_rect(canvas_item, rect.grow(0.5f * p_width), p_color, p_antialiased);
|
||||||
} else {
|
} else {
|
||||||
Vector<Vector2> points;
|
Vector<Vector2> points;
|
||||||
points.resize(5);
|
points.resize(5);
|
||||||
|
@ -723,7 +723,7 @@ void CanvasItem::draw_rect(const Rect2 &p_rect, const Color &p_color, bool p_fil
|
||||||
|
|
||||||
Vector<Color> colors = { p_color };
|
Vector<Color> colors = { p_color };
|
||||||
|
|
||||||
RenderingServer::get_singleton()->canvas_item_add_polyline(canvas_item, points, colors, p_width);
|
RenderingServer::get_singleton()->canvas_item_add_polyline(canvas_item, points, colors, p_width, p_antialiased);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -736,9 +736,9 @@ void CanvasItem::draw_circle(const Point2 &p_pos, real_t p_radius, const Color &
|
||||||
WARN_PRINT("The draw_circle() \"width\" argument has no effect when \"filled\" is \"true\".");
|
WARN_PRINT("The draw_circle() \"width\" argument has no effect when \"filled\" is \"true\".");
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderingServer::get_singleton()->canvas_item_add_circle(canvas_item, p_pos, p_radius, p_color);
|
RenderingServer::get_singleton()->canvas_item_add_circle(canvas_item, p_pos, p_radius, p_color, p_antialiased);
|
||||||
} else if (p_width >= 2.0 * p_radius) {
|
} else if (p_width >= 2.0 * p_radius) {
|
||||||
RenderingServer::get_singleton()->canvas_item_add_circle(canvas_item, p_pos, p_radius + 0.5 * p_width, p_color);
|
RenderingServer::get_singleton()->canvas_item_add_circle(canvas_item, p_pos, p_radius + 0.5 * p_width, p_color, p_antialiased);
|
||||||
} else {
|
} else {
|
||||||
// Tessellation count is hardcoded. Keep in sync with the same variable in `RendererCanvasCull::canvas_item_add_circle()`.
|
// Tessellation count is hardcoded. Keep in sync with the same variable in `RendererCanvasCull::canvas_item_add_circle()`.
|
||||||
const int circle_segments = 64;
|
const int circle_segments = 64;
|
||||||
|
@ -1186,13 +1186,13 @@ void CanvasItem::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("is_draw_behind_parent_enabled"), &CanvasItem::is_draw_behind_parent_enabled);
|
ClassDB::bind_method(D_METHOD("is_draw_behind_parent_enabled"), &CanvasItem::is_draw_behind_parent_enabled);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("draw_line", "from", "to", "color", "width", "antialiased"), &CanvasItem::draw_line, DEFVAL(-1.0), DEFVAL(false));
|
ClassDB::bind_method(D_METHOD("draw_line", "from", "to", "color", "width", "antialiased"), &CanvasItem::draw_line, DEFVAL(-1.0), DEFVAL(false));
|
||||||
ClassDB::bind_method(D_METHOD("draw_dashed_line", "from", "to", "color", "width", "dash", "aligned"), &CanvasItem::draw_dashed_line, DEFVAL(-1.0), DEFVAL(2.0), DEFVAL(true));
|
ClassDB::bind_method(D_METHOD("draw_dashed_line", "from", "to", "color", "width", "dash", "aligned", "antialiased"), &CanvasItem::draw_dashed_line, DEFVAL(-1.0), DEFVAL(2.0), DEFVAL(true), DEFVAL(false));
|
||||||
ClassDB::bind_method(D_METHOD("draw_polyline", "points", "color", "width", "antialiased"), &CanvasItem::draw_polyline, DEFVAL(-1.0), DEFVAL(false));
|
ClassDB::bind_method(D_METHOD("draw_polyline", "points", "color", "width", "antialiased"), &CanvasItem::draw_polyline, DEFVAL(-1.0), DEFVAL(false));
|
||||||
ClassDB::bind_method(D_METHOD("draw_polyline_colors", "points", "colors", "width", "antialiased"), &CanvasItem::draw_polyline_colors, DEFVAL(-1.0), DEFVAL(false));
|
ClassDB::bind_method(D_METHOD("draw_polyline_colors", "points", "colors", "width", "antialiased"), &CanvasItem::draw_polyline_colors, DEFVAL(-1.0), DEFVAL(false));
|
||||||
ClassDB::bind_method(D_METHOD("draw_arc", "center", "radius", "start_angle", "end_angle", "point_count", "color", "width", "antialiased"), &CanvasItem::draw_arc, DEFVAL(-1.0), DEFVAL(false));
|
ClassDB::bind_method(D_METHOD("draw_arc", "center", "radius", "start_angle", "end_angle", "point_count", "color", "width", "antialiased"), &CanvasItem::draw_arc, DEFVAL(-1.0), DEFVAL(false));
|
||||||
ClassDB::bind_method(D_METHOD("draw_multiline", "points", "color", "width"), &CanvasItem::draw_multiline, DEFVAL(-1.0));
|
ClassDB::bind_method(D_METHOD("draw_multiline", "points", "color", "width", "antialiased"), &CanvasItem::draw_multiline, DEFVAL(-1.0), DEFVAL(false));
|
||||||
ClassDB::bind_method(D_METHOD("draw_multiline_colors", "points", "colors", "width"), &CanvasItem::draw_multiline_colors, DEFVAL(-1.0));
|
ClassDB::bind_method(D_METHOD("draw_multiline_colors", "points", "colors", "width", "antialiased"), &CanvasItem::draw_multiline_colors, DEFVAL(-1.0), DEFVAL(false));
|
||||||
ClassDB::bind_method(D_METHOD("draw_rect", "rect", "color", "filled", "width"), &CanvasItem::draw_rect, DEFVAL(true), DEFVAL(-1.0));
|
ClassDB::bind_method(D_METHOD("draw_rect", "rect", "color", "filled", "width", "antialiased"), &CanvasItem::draw_rect, DEFVAL(true), DEFVAL(-1.0), DEFVAL(false));
|
||||||
ClassDB::bind_method(D_METHOD("draw_circle", "position", "radius", "color", "filled", "width", "antialiased"), &CanvasItem::draw_circle, DEFVAL(true), DEFVAL(-1.0), DEFVAL(false));
|
ClassDB::bind_method(D_METHOD("draw_circle", "position", "radius", "color", "filled", "width", "antialiased"), &CanvasItem::draw_circle, DEFVAL(true), DEFVAL(-1.0), DEFVAL(false));
|
||||||
ClassDB::bind_method(D_METHOD("draw_texture", "texture", "position", "modulate"), &CanvasItem::draw_texture, DEFVAL(Color(1, 1, 1, 1)));
|
ClassDB::bind_method(D_METHOD("draw_texture", "texture", "position", "modulate"), &CanvasItem::draw_texture, DEFVAL(Color(1, 1, 1, 1)));
|
||||||
ClassDB::bind_method(D_METHOD("draw_texture_rect", "texture", "rect", "tile", "modulate", "transpose"), &CanvasItem::draw_texture_rect, DEFVAL(Color(1, 1, 1, 1)), DEFVAL(false));
|
ClassDB::bind_method(D_METHOD("draw_texture_rect", "texture", "rect", "tile", "modulate", "transpose"), &CanvasItem::draw_texture_rect, DEFVAL(Color(1, 1, 1, 1)), DEFVAL(false));
|
||||||
|
|
|
@ -168,7 +168,11 @@ protected:
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
|
||||||
#ifndef DISABLE_DEPRECATED
|
#ifndef DISABLE_DEPRECATED
|
||||||
void _draw_circle_compat_84472(const Point2 &p_pos, real_t p_radius, const Color &p_color);
|
void _draw_circle_bind_compat_84472(const Point2 &p_pos, real_t p_radius, const Color &p_color);
|
||||||
|
void _draw_rect_bind_compat_84523(const Rect2 &p_rect, const Color &p_color, bool p_filled, real_t p_width);
|
||||||
|
void _draw_dashed_line_bind_compat_84523(const Point2 &p_from, const Point2 &p_to, const Color &p_color, real_t p_width, real_t p_dash, bool p_aligned);
|
||||||
|
void _draw_multiline_bind_compat_84523(const Vector<Point2> &p_points, const Color &p_color, real_t p_width);
|
||||||
|
void _draw_multiline_colors_bind_compat_84523(const Vector<Point2> &p_points, const Vector<Color> &p_colors, real_t p_width);
|
||||||
static void _bind_compatibility_methods();
|
static void _bind_compatibility_methods();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -271,14 +275,14 @@ public:
|
||||||
|
|
||||||
/* DRAWING API */
|
/* DRAWING API */
|
||||||
|
|
||||||
void draw_dashed_line(const Point2 &p_from, const Point2 &p_to, const Color &p_color, real_t p_width = -1.0, real_t p_dash = 2.0, bool p_aligned = true);
|
void draw_dashed_line(const Point2 &p_from, const Point2 &p_to, const Color &p_color, real_t p_width = -1.0, real_t p_dash = 2.0, bool p_aligned = true, bool p_antialiased = false);
|
||||||
void draw_line(const Point2 &p_from, const Point2 &p_to, const Color &p_color, real_t p_width = -1.0, bool p_antialiased = false);
|
void draw_line(const Point2 &p_from, const Point2 &p_to, const Color &p_color, real_t p_width = -1.0, bool p_antialiased = false);
|
||||||
void draw_polyline(const Vector<Point2> &p_points, const Color &p_color, real_t p_width = -1.0, bool p_antialiased = false);
|
void draw_polyline(const Vector<Point2> &p_points, const Color &p_color, real_t p_width = -1.0, bool p_antialiased = false);
|
||||||
void draw_polyline_colors(const Vector<Point2> &p_points, const Vector<Color> &p_colors, real_t p_width = -1.0, bool p_antialiased = false);
|
void draw_polyline_colors(const Vector<Point2> &p_points, const Vector<Color> &p_colors, real_t p_width = -1.0, bool p_antialiased = false);
|
||||||
void draw_arc(const Vector2 &p_center, real_t p_radius, real_t p_start_angle, real_t p_end_angle, int p_point_count, const Color &p_color, real_t p_width = -1.0, bool p_antialiased = false);
|
void draw_arc(const Vector2 &p_center, real_t p_radius, real_t p_start_angle, real_t p_end_angle, int p_point_count, const Color &p_color, real_t p_width = -1.0, bool p_antialiased = false);
|
||||||
void draw_multiline(const Vector<Point2> &p_points, const Color &p_color, real_t p_width = -1.0);
|
void draw_multiline(const Vector<Point2> &p_points, const Color &p_color, real_t p_width = -1.0, bool p_antialiased = false);
|
||||||
void draw_multiline_colors(const Vector<Point2> &p_points, const Vector<Color> &p_colors, real_t p_width = -1.0);
|
void draw_multiline_colors(const Vector<Point2> &p_points, const Vector<Color> &p_colors, real_t p_width = -1.0, bool p_antialiased = false);
|
||||||
void draw_rect(const Rect2 &p_rect, const Color &p_color, bool p_filled = true, real_t p_width = -1.0);
|
void draw_rect(const Rect2 &p_rect, const Color &p_color, bool p_filled = true, real_t p_width = -1.0, bool p_antialiased = false);
|
||||||
void draw_circle(const Point2 &p_pos, real_t p_radius, const Color &p_color, bool p_filled = true, real_t p_width = -1.0, bool p_antialiased = false);
|
void draw_circle(const Point2 &p_pos, real_t p_radius, const Color &p_color, bool p_filled = true, real_t p_width = -1.0, bool p_antialiased = false);
|
||||||
void draw_texture(const Ref<Texture2D> &p_texture, const Point2 &p_pos, const Color &p_modulate = Color(1, 1, 1, 1));
|
void draw_texture(const Ref<Texture2D> &p_texture, const Point2 &p_pos, const Color &p_modulate = Color(1, 1, 1, 1));
|
||||||
void draw_texture_rect(const Ref<Texture2D> &p_texture, const Rect2 &p_rect, bool p_tile = false, const Color &p_modulate = Color(1, 1, 1), bool p_transpose = false);
|
void draw_texture_rect(const Ref<Texture2D> &p_texture, const Rect2 &p_rect, bool p_tile = false, const Color &p_modulate = Color(1, 1, 1), bool p_transpose = false);
|
||||||
|
|
|
@ -38,6 +38,12 @@
|
||||||
#include "rendering_server_globals.h"
|
#include "rendering_server_globals.h"
|
||||||
#include "servers/rendering/storage/texture_storage.h"
|
#include "servers/rendering/storage/texture_storage.h"
|
||||||
|
|
||||||
|
// Use the same antialiasing feather size as StyleBoxFlat's default
|
||||||
|
// (but doubled, as it's specified for both sides here).
|
||||||
|
// This value is empirically determined to provide good antialiasing quality
|
||||||
|
// while not making lines appear too soft.
|
||||||
|
const static float FEATHER_SIZE = 1.25f;
|
||||||
|
|
||||||
void RendererCanvasCull::_render_canvas_item_tree(RID p_to_render_target, Canvas::ChildItem *p_child_items, int p_child_item_count, const Transform2D &p_transform, const Rect2 &p_clip_rect, const Color &p_modulate, RendererCanvasRender::Light *p_lights, RendererCanvasRender::Light *p_directional_lights, RenderingServer::CanvasItemTextureFilter p_default_filter, RenderingServer::CanvasItemTextureRepeat p_default_repeat, bool p_snap_2d_vertices_to_pixel, uint32_t p_canvas_cull_mask, RenderingMethod::RenderInfo *r_render_info) {
|
void RendererCanvasCull::_render_canvas_item_tree(RID p_to_render_target, Canvas::ChildItem *p_child_items, int p_child_item_count, const Transform2D &p_transform, const Rect2 &p_clip_rect, const Color &p_modulate, RendererCanvasRender::Light *p_lights, RendererCanvasRender::Light *p_directional_lights, RenderingServer::CanvasItemTextureFilter p_default_filter, RenderingServer::CanvasItemTextureRepeat p_default_repeat, bool p_snap_2d_vertices_to_pixel, uint32_t p_canvas_cull_mask, RenderingMethod::RenderInfo *r_render_info) {
|
||||||
RENDER_TIMESTAMP("Cull CanvasItem Tree");
|
RENDER_TIMESTAMP("Cull CanvasItem Tree");
|
||||||
|
|
||||||
|
@ -638,11 +644,8 @@ void RendererCanvasCull::canvas_item_add_line(RID p_item, const Point2 &p_from,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_antialiased) {
|
if (p_antialiased) {
|
||||||
// Use the same antialiasing feather size as StyleBoxFlat's default
|
float border_size = FEATHER_SIZE;
|
||||||
// (but doubled, as it's specified for both sides here).
|
|
||||||
// This value is empirically determined to provide good antialiasing quality
|
|
||||||
// while not making lines appear too soft.
|
|
||||||
float border_size = 1.25f;
|
|
||||||
if (0.0f <= p_width && p_width < 1.0f) {
|
if (0.0f <= p_width && p_width < 1.0f) {
|
||||||
border_size *= p_width;
|
border_size *= p_width;
|
||||||
}
|
}
|
||||||
|
@ -651,7 +654,7 @@ void RendererCanvasCull::canvas_item_add_line(RID p_item, const Point2 &p_from,
|
||||||
Vector2 border = dir * border_size;
|
Vector2 border = dir * border_size;
|
||||||
Vector2 border2 = dir2 * border_size;
|
Vector2 border2 = dir2 * border_size;
|
||||||
|
|
||||||
Color transparent = Color(p_color.r, p_color.g, p_color.b, 0.0);
|
Color transparent = Color(p_color, 0.0);
|
||||||
|
|
||||||
{
|
{
|
||||||
Item::CommandPrimitive *left_border = canvas_item->alloc_command<Item::CommandPrimitive>();
|
Item::CommandPrimitive *left_border = canvas_item->alloc_command<Item::CommandPrimitive>();
|
||||||
|
@ -903,11 +906,7 @@ void RendererCanvasCull::canvas_item_add_polyline(RID p_item, const Vector<Point
|
||||||
Color *colors_ptr = colors.ptrw();
|
Color *colors_ptr = colors.ptrw();
|
||||||
|
|
||||||
if (p_antialiased) {
|
if (p_antialiased) {
|
||||||
// Use the same antialiasing feather size as StyleBoxFlat's default
|
float border_size = FEATHER_SIZE;
|
||||||
// (but doubled, as it's specified for both sides here).
|
|
||||||
// This value is empirically determined to provide good antialiasing quality
|
|
||||||
// while not making lines appear too soft.
|
|
||||||
float border_size = 1.25f;
|
|
||||||
if (p_width < 1.0f) {
|
if (p_width < 1.0f) {
|
||||||
border_size *= p_width;
|
border_size *= p_width;
|
||||||
}
|
}
|
||||||
|
@ -1094,12 +1093,15 @@ void RendererCanvasCull::canvas_item_add_polyline(RID p_item, const Vector<Point
|
||||||
pline->polygon.create(indices, points, colors);
|
pline->polygon.create(indices, points, colors);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RendererCanvasCull::canvas_item_add_multiline(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width) {
|
void RendererCanvasCull::canvas_item_add_multiline(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width, bool p_antialiased) {
|
||||||
ERR_FAIL_COND(p_points.is_empty() || p_points.size() % 2 != 0);
|
ERR_FAIL_COND(p_points.is_empty() || p_points.size() % 2 != 0);
|
||||||
ERR_FAIL_COND(p_colors.size() != 1 && p_colors.size() * 2 != p_points.size());
|
ERR_FAIL_COND(p_colors.size() != 1 && p_colors.size() * 2 != p_points.size());
|
||||||
|
|
||||||
// TODO: `canvas_item_add_line`(`multiline`, `polyline`) share logic, should factor out.
|
// TODO: `canvas_item_add_line`(`multiline`, `polyline`) share logic, should factor out.
|
||||||
if (p_width < 0) {
|
if (p_width < 0) {
|
||||||
|
if (p_antialiased) {
|
||||||
|
WARN_PRINT("Antialiasing is not supported for thin multilines drawn using line strips (`p_width < 0`).");
|
||||||
|
}
|
||||||
Item *canvas_item = canvas_item_owner.get_or_null(p_item);
|
Item *canvas_item = canvas_item_owner.get_or_null(p_item);
|
||||||
ERR_FAIL_NULL(canvas_item);
|
ERR_FAIL_NULL(canvas_item);
|
||||||
|
|
||||||
|
@ -1127,7 +1129,7 @@ void RendererCanvasCull::canvas_item_add_multiline(RID p_item, const Vector<Poin
|
||||||
Vector2 from = p_points[i * 2 + 0];
|
Vector2 from = p_points[i * 2 + 0];
|
||||||
Vector2 to = p_points[i * 2 + 1];
|
Vector2 to = p_points[i * 2 + 1];
|
||||||
|
|
||||||
canvas_item_add_line(p_item, from, to, color, p_width);
|
canvas_item_add_line(p_item, from, to, color, p_width, p_antialiased);
|
||||||
}
|
}
|
||||||
} else { //} else if (p_colors.size() << 1 == p_points.size()) {
|
} else { //} else if (p_colors.size() << 1 == p_points.size()) {
|
||||||
for (int i = 0; i < p_colors.size(); i++) {
|
for (int i = 0; i < p_colors.size(); i++) {
|
||||||
|
@ -1135,13 +1137,13 @@ void RendererCanvasCull::canvas_item_add_multiline(RID p_item, const Vector<Poin
|
||||||
Vector2 from = p_points[i * 2 + 0];
|
Vector2 from = p_points[i * 2 + 0];
|
||||||
Vector2 to = p_points[i * 2 + 1];
|
Vector2 to = p_points[i * 2 + 1];
|
||||||
|
|
||||||
canvas_item_add_line(p_item, from, to, color, p_width);
|
canvas_item_add_line(p_item, from, to, color, p_width, p_antialiased);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RendererCanvasCull::canvas_item_add_rect(RID p_item, const Rect2 &p_rect, const Color &p_color) {
|
void RendererCanvasCull::canvas_item_add_rect(RID p_item, const Rect2 &p_rect, const Color &p_color, bool p_antialiased) {
|
||||||
Item *canvas_item = canvas_item_owner.get_or_null(p_item);
|
Item *canvas_item = canvas_item_owner.get_or_null(p_item);
|
||||||
ERR_FAIL_NULL(canvas_item);
|
ERR_FAIL_NULL(canvas_item);
|
||||||
|
|
||||||
|
@ -1149,45 +1151,251 @@ void RendererCanvasCull::canvas_item_add_rect(RID p_item, const Rect2 &p_rect, c
|
||||||
ERR_FAIL_NULL(rect);
|
ERR_FAIL_NULL(rect);
|
||||||
rect->modulate = p_color;
|
rect->modulate = p_color;
|
||||||
rect->rect = p_rect;
|
rect->rect = p_rect;
|
||||||
|
|
||||||
|
// Add feathers.
|
||||||
|
if (p_antialiased) {
|
||||||
|
float border_size = FEATHER_SIZE;
|
||||||
|
|
||||||
|
const real_t size = MIN(p_rect.size.width, p_rect.size.height);
|
||||||
|
if (0.0f <= size && size < 1.0f) {
|
||||||
|
border_size *= size;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Vector2 vec_down = Vector2(0.0f, p_rect.size.height);
|
||||||
|
const Vector2 vec_right = Vector2(p_rect.size.width, 0.0f);
|
||||||
|
|
||||||
|
const Vector2 begin_left = p_rect.position;
|
||||||
|
const Vector2 begin_right = p_rect.position + vec_down;
|
||||||
|
const Vector2 end_left = p_rect.position + vec_right;
|
||||||
|
const Vector2 end_right = p_rect.position + p_rect.size;
|
||||||
|
|
||||||
|
const Vector2 dir = Vector2(0.0f, -1.0f);
|
||||||
|
const Vector2 dir2 = Vector2(-1.0f, 0.0f);
|
||||||
|
const Vector2 border = dir * border_size;
|
||||||
|
const Vector2 border2 = dir2 * border_size;
|
||||||
|
|
||||||
|
Color transparent = Color(p_color, 0.0);
|
||||||
|
|
||||||
|
{
|
||||||
|
Item::CommandPrimitive *left_border = canvas_item->alloc_command<Item::CommandPrimitive>();
|
||||||
|
ERR_FAIL_NULL(left_border);
|
||||||
|
|
||||||
|
left_border->points[0] = begin_left;
|
||||||
|
left_border->points[1] = begin_left + border;
|
||||||
|
left_border->points[2] = end_left + border;
|
||||||
|
left_border->points[3] = end_left;
|
||||||
|
|
||||||
|
left_border->colors[0] = p_color;
|
||||||
|
left_border->colors[1] = transparent;
|
||||||
|
left_border->colors[2] = transparent;
|
||||||
|
left_border->colors[3] = p_color;
|
||||||
|
|
||||||
|
left_border->point_count = 4;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
Item::CommandPrimitive *right_border = canvas_item->alloc_command<Item::CommandPrimitive>();
|
||||||
|
ERR_FAIL_NULL(right_border);
|
||||||
|
|
||||||
|
right_border->points[0] = begin_right;
|
||||||
|
right_border->points[1] = begin_right - border;
|
||||||
|
right_border->points[2] = end_right - border;
|
||||||
|
right_border->points[3] = end_right;
|
||||||
|
|
||||||
|
right_border->colors[0] = p_color;
|
||||||
|
right_border->colors[1] = transparent;
|
||||||
|
right_border->colors[2] = transparent;
|
||||||
|
right_border->colors[3] = p_color;
|
||||||
|
|
||||||
|
right_border->point_count = 4;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
Item::CommandPrimitive *top_border = canvas_item->alloc_command<Item::CommandPrimitive>();
|
||||||
|
ERR_FAIL_NULL(top_border);
|
||||||
|
|
||||||
|
top_border->points[0] = begin_left;
|
||||||
|
top_border->points[1] = begin_left + border2;
|
||||||
|
top_border->points[2] = begin_right + border2;
|
||||||
|
top_border->points[3] = begin_right;
|
||||||
|
|
||||||
|
top_border->colors[0] = p_color;
|
||||||
|
top_border->colors[1] = transparent;
|
||||||
|
top_border->colors[2] = transparent;
|
||||||
|
top_border->colors[3] = p_color;
|
||||||
|
|
||||||
|
top_border->point_count = 4;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
Item::CommandPrimitive *bottom_border = canvas_item->alloc_command<Item::CommandPrimitive>();
|
||||||
|
ERR_FAIL_NULL(bottom_border);
|
||||||
|
|
||||||
|
bottom_border->points[0] = end_left;
|
||||||
|
bottom_border->points[1] = end_left - border2;
|
||||||
|
bottom_border->points[2] = end_right - border2;
|
||||||
|
bottom_border->points[3] = end_right;
|
||||||
|
|
||||||
|
bottom_border->colors[0] = p_color;
|
||||||
|
bottom_border->colors[1] = transparent;
|
||||||
|
bottom_border->colors[2] = transparent;
|
||||||
|
bottom_border->colors[3] = p_color;
|
||||||
|
|
||||||
|
bottom_border->point_count = 4;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
Item::CommandPrimitive *top_left_corner = canvas_item->alloc_command<Item::CommandPrimitive>();
|
||||||
|
ERR_FAIL_NULL(top_left_corner);
|
||||||
|
|
||||||
|
top_left_corner->points[0] = begin_left;
|
||||||
|
top_left_corner->points[1] = begin_left + border2;
|
||||||
|
top_left_corner->points[2] = begin_left + border + border2;
|
||||||
|
top_left_corner->points[3] = begin_left + border;
|
||||||
|
|
||||||
|
top_left_corner->colors[0] = p_color;
|
||||||
|
top_left_corner->colors[1] = transparent;
|
||||||
|
top_left_corner->colors[2] = transparent;
|
||||||
|
top_left_corner->colors[3] = transparent;
|
||||||
|
|
||||||
|
top_left_corner->point_count = 4;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
Item::CommandPrimitive *top_right_corner = canvas_item->alloc_command<Item::CommandPrimitive>();
|
||||||
|
ERR_FAIL_NULL(top_right_corner);
|
||||||
|
|
||||||
|
top_right_corner->points[0] = begin_right;
|
||||||
|
top_right_corner->points[1] = begin_right + border2;
|
||||||
|
top_right_corner->points[2] = begin_right - border + border2;
|
||||||
|
top_right_corner->points[3] = begin_right - border;
|
||||||
|
|
||||||
|
top_right_corner->colors[0] = p_color;
|
||||||
|
top_right_corner->colors[1] = transparent;
|
||||||
|
top_right_corner->colors[2] = transparent;
|
||||||
|
top_right_corner->colors[3] = transparent;
|
||||||
|
|
||||||
|
top_right_corner->point_count = 4;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
Item::CommandPrimitive *bottom_left_corner = canvas_item->alloc_command<Item::CommandPrimitive>();
|
||||||
|
ERR_FAIL_NULL(bottom_left_corner);
|
||||||
|
|
||||||
|
bottom_left_corner->points[0] = end_left;
|
||||||
|
bottom_left_corner->points[1] = end_left - border2;
|
||||||
|
bottom_left_corner->points[2] = end_left + border - border2;
|
||||||
|
bottom_left_corner->points[3] = end_left + border;
|
||||||
|
|
||||||
|
bottom_left_corner->colors[0] = p_color;
|
||||||
|
bottom_left_corner->colors[1] = transparent;
|
||||||
|
bottom_left_corner->colors[2] = transparent;
|
||||||
|
bottom_left_corner->colors[3] = transparent;
|
||||||
|
|
||||||
|
bottom_left_corner->point_count = 4;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
Item::CommandPrimitive *bottom_right_corner = canvas_item->alloc_command<Item::CommandPrimitive>();
|
||||||
|
ERR_FAIL_NULL(bottom_right_corner);
|
||||||
|
|
||||||
|
bottom_right_corner->points[0] = end_right;
|
||||||
|
bottom_right_corner->points[1] = end_right - border2;
|
||||||
|
bottom_right_corner->points[2] = end_right - border - border2;
|
||||||
|
bottom_right_corner->points[3] = end_right - border;
|
||||||
|
|
||||||
|
bottom_right_corner->colors[0] = p_color;
|
||||||
|
bottom_right_corner->colors[1] = transparent;
|
||||||
|
bottom_right_corner->colors[2] = transparent;
|
||||||
|
bottom_right_corner->colors[3] = transparent;
|
||||||
|
|
||||||
|
bottom_right_corner->point_count = 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RendererCanvasCull::canvas_item_add_circle(RID p_item, const Point2 &p_pos, float p_radius, const Color &p_color) {
|
void RendererCanvasCull::canvas_item_add_circle(RID p_item, const Point2 &p_pos, float p_radius, const Color &p_color, bool p_antialiased) {
|
||||||
Item *canvas_item = canvas_item_owner.get_or_null(p_item);
|
Item *canvas_item = canvas_item_owner.get_or_null(p_item);
|
||||||
ERR_FAIL_NULL(canvas_item);
|
ERR_FAIL_NULL(canvas_item);
|
||||||
|
|
||||||
Item::CommandPolygon *circle = canvas_item->alloc_command<Item::CommandPolygon>();
|
static const int circle_segments = 64;
|
||||||
ERR_FAIL_NULL(circle);
|
|
||||||
|
|
||||||
circle->primitive = RS::PRIMITIVE_TRIANGLES;
|
{
|
||||||
|
Item::CommandPolygon *circle = canvas_item->alloc_command<Item::CommandPolygon>();
|
||||||
|
ERR_FAIL_NULL(circle);
|
||||||
|
|
||||||
Vector<int> indices;
|
circle->primitive = RS::PRIMITIVE_TRIANGLES;
|
||||||
Vector<Vector2> points;
|
|
||||||
|
|
||||||
static const int circle_points = 64;
|
Vector<int> indices;
|
||||||
|
Vector<Vector2> points;
|
||||||
|
|
||||||
points.resize(circle_points);
|
points.resize(circle_segments + 2);
|
||||||
Vector2 *points_ptr = points.ptrw();
|
Vector2 *points_ptr = points.ptrw();
|
||||||
const real_t circle_point_step = Math_TAU / circle_points;
|
|
||||||
|
|
||||||
for (int i = 0; i < circle_points; i++) {
|
// Store circle center in the last point.
|
||||||
float angle = i * circle_point_step;
|
points_ptr[circle_segments + 1] = p_pos;
|
||||||
points_ptr[i].x = Math::cos(angle) * p_radius;
|
|
||||||
points_ptr[i].y = Math::sin(angle) * p_radius;
|
const real_t circle_point_step = Math_TAU / circle_segments;
|
||||||
points_ptr[i] += p_pos;
|
|
||||||
|
for (int i = 0; i < circle_segments + 1; i++) {
|
||||||
|
float angle = i * circle_point_step;
|
||||||
|
points_ptr[i].x = Math::cos(angle) * p_radius;
|
||||||
|
points_ptr[i].y = Math::sin(angle) * p_radius;
|
||||||
|
points_ptr[i] += p_pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
indices.resize(circle_segments * 3);
|
||||||
|
int *indices_ptr = indices.ptrw();
|
||||||
|
|
||||||
|
for (int i = 0; i < circle_segments; i++) {
|
||||||
|
indices_ptr[i * 3 + 0] = circle_segments + 1;
|
||||||
|
indices_ptr[i * 3 + 1] = i;
|
||||||
|
indices_ptr[i * 3 + 2] = i + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector<Color> color;
|
||||||
|
color.push_back(p_color);
|
||||||
|
circle->polygon.create(indices, points, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
indices.resize((circle_points - 2) * 3);
|
if (p_antialiased) {
|
||||||
int *indices_ptr = indices.ptrw();
|
float border_size = FEATHER_SIZE;
|
||||||
|
|
||||||
for (int i = 0; i < circle_points - 2; i++) {
|
const float diameter = p_radius * 2.0f;
|
||||||
indices_ptr[i * 3 + 0] = 0;
|
if (0.0f <= diameter && diameter < 1.0f) {
|
||||||
indices_ptr[i * 3 + 1] = i + 1;
|
border_size *= p_radius;
|
||||||
indices_ptr[i * 3 + 2] = i + 2;
|
}
|
||||||
|
|
||||||
|
Item::CommandPolygon *feather = canvas_item->alloc_command<Item::CommandPolygon>();
|
||||||
|
ERR_FAIL_NULL(feather);
|
||||||
|
feather->primitive = RS::PRIMITIVE_TRIANGLE_STRIP;
|
||||||
|
|
||||||
|
Color transparent = Color(p_color, 0.0);
|
||||||
|
|
||||||
|
Vector<int> indices;
|
||||||
|
Vector<Color> colors;
|
||||||
|
Vector<Vector2> points;
|
||||||
|
|
||||||
|
points.resize(2 * circle_segments + 2);
|
||||||
|
colors.resize(2 * circle_segments + 2);
|
||||||
|
|
||||||
|
const real_t circle_point_step = Math_TAU / circle_segments;
|
||||||
|
|
||||||
|
Vector2 *points_ptr = points.ptrw();
|
||||||
|
Color *colors_ptr = colors.ptrw();
|
||||||
|
|
||||||
|
for (int i = 0; i < circle_segments + 1; i++) {
|
||||||
|
const float angle = i * circle_point_step;
|
||||||
|
const float c = Math::cos(angle);
|
||||||
|
const float s = Math::sin(angle);
|
||||||
|
|
||||||
|
points_ptr[i * 2].x = c * p_radius;
|
||||||
|
points_ptr[i * 2].y = s * p_radius;
|
||||||
|
points_ptr[i * 2] += p_pos;
|
||||||
|
|
||||||
|
points_ptr[i * 2 + 1].x = c * (p_radius + border_size);
|
||||||
|
points_ptr[i * 2 + 1].y = s * (p_radius + border_size);
|
||||||
|
points_ptr[i * 2 + 1] += p_pos;
|
||||||
|
|
||||||
|
colors_ptr[i * 2] = p_color;
|
||||||
|
colors_ptr[i * 2 + 1] = transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
feather->polygon.create(indices, points, colors);
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<Color> color;
|
|
||||||
color.push_back(p_color);
|
|
||||||
circle->polygon.create(indices, points, color);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RendererCanvasCull::canvas_item_add_texture_rect(RID p_item, const Rect2 &p_rect, RID p_texture, bool p_tile, const Color &p_modulate, bool p_transpose) {
|
void RendererCanvasCull::canvas_item_add_texture_rect(RID p_item, const Rect2 &p_rect, RID p_texture, bool p_tile, const Color &p_modulate, bool p_transpose) {
|
||||||
|
|
|
@ -233,9 +233,9 @@ public:
|
||||||
|
|
||||||
void canvas_item_add_line(RID p_item, const Point2 &p_from, const Point2 &p_to, const Color &p_color, float p_width = -1.0, bool p_antialiased = false);
|
void canvas_item_add_line(RID p_item, const Point2 &p_from, const Point2 &p_to, const Color &p_color, float p_width = -1.0, bool p_antialiased = false);
|
||||||
void canvas_item_add_polyline(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width = -1.0, bool p_antialiased = false);
|
void canvas_item_add_polyline(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width = -1.0, bool p_antialiased = false);
|
||||||
void canvas_item_add_multiline(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width = -1.0);
|
void canvas_item_add_multiline(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width = -1.0, bool p_antialiased = false);
|
||||||
void canvas_item_add_rect(RID p_item, const Rect2 &p_rect, const Color &p_color);
|
void canvas_item_add_rect(RID p_item, const Rect2 &p_rect, const Color &p_color, bool p_antialiased);
|
||||||
void canvas_item_add_circle(RID p_item, const Point2 &p_pos, float p_radius, const Color &p_color);
|
void canvas_item_add_circle(RID p_item, const Point2 &p_pos, float p_radius, const Color &p_color, bool p_antialiased);
|
||||||
void canvas_item_add_texture_rect(RID p_item, const Rect2 &p_rect, RID p_texture, bool p_tile = false, const Color &p_modulate = Color(1, 1, 1), bool p_transpose = false);
|
void canvas_item_add_texture_rect(RID p_item, const Rect2 &p_rect, RID p_texture, bool p_tile = false, const Color &p_modulate = Color(1, 1, 1), bool p_transpose = false);
|
||||||
void canvas_item_add_texture_rect_region(RID p_item, const Rect2 &p_rect, RID p_texture, const Rect2 &p_src_rect, const Color &p_modulate = Color(1, 1, 1), bool p_transpose = false, bool p_clip_uv = false);
|
void canvas_item_add_texture_rect_region(RID p_item, const Rect2 &p_rect, RID p_texture, const Rect2 &p_src_rect, const Color &p_modulate = Color(1, 1, 1), bool p_transpose = false, bool p_clip_uv = false);
|
||||||
void canvas_item_add_msdf_texture_rect_region(RID p_item, const Rect2 &p_rect, RID p_texture, const Rect2 &p_src_rect, const Color &p_modulate = Color(1, 1, 1), int p_outline_size = 0, float p_px_range = 1.0, float p_scale = 1.0);
|
void canvas_item_add_msdf_texture_rect_region(RID p_item, const Rect2 &p_rect, RID p_texture, const Rect2 &p_src_rect, const Color &p_modulate = Color(1, 1, 1), int p_outline_size = 0, float p_px_range = 1.0, float p_scale = 1.0);
|
||||||
|
|
|
@ -885,9 +885,9 @@ public:
|
||||||
|
|
||||||
FUNC6(canvas_item_add_line, RID, const Point2 &, const Point2 &, const Color &, float, bool)
|
FUNC6(canvas_item_add_line, RID, const Point2 &, const Point2 &, const Color &, float, bool)
|
||||||
FUNC5(canvas_item_add_polyline, RID, const Vector<Point2> &, const Vector<Color> &, float, bool)
|
FUNC5(canvas_item_add_polyline, RID, const Vector<Point2> &, const Vector<Color> &, float, bool)
|
||||||
FUNC4(canvas_item_add_multiline, RID, const Vector<Point2> &, const Vector<Color> &, float)
|
FUNC5(canvas_item_add_multiline, RID, const Vector<Point2> &, const Vector<Color> &, float, bool)
|
||||||
FUNC3(canvas_item_add_rect, RID, const Rect2 &, const Color &)
|
FUNC4(canvas_item_add_rect, RID, const Rect2 &, const Color &, bool)
|
||||||
FUNC4(canvas_item_add_circle, RID, const Point2 &, float, const Color &)
|
FUNC5(canvas_item_add_circle, RID, const Point2 &, float, const Color &, bool)
|
||||||
FUNC6(canvas_item_add_texture_rect, RID, const Rect2 &, RID, bool, const Color &, bool)
|
FUNC6(canvas_item_add_texture_rect, RID, const Rect2 &, RID, bool, const Color &, bool)
|
||||||
FUNC7(canvas_item_add_texture_rect_region, RID, const Rect2 &, RID, const Rect2 &, const Color &, bool, bool)
|
FUNC7(canvas_item_add_texture_rect_region, RID, const Rect2 &, RID, const Rect2 &, const Color &, bool, bool)
|
||||||
FUNC8(canvas_item_add_msdf_texture_rect_region, RID, const Rect2 &, RID, const Rect2 &, const Color &, int, float, float)
|
FUNC8(canvas_item_add_msdf_texture_rect_region, RID, const Rect2 &, RID, const Rect2 &, const Color &, int, float, float)
|
||||||
|
|
|
@ -34,8 +34,23 @@ void RenderingServer::_environment_set_fog_bind_compat_84792(RID p_env, bool p_e
|
||||||
environment_set_fog(p_env, p_enable, p_light_color, p_light_energy, p_sun_scatter, p_density, p_height, p_height_density, p_aerial_perspective, p_sky_affect, RS::EnvironmentFogMode::ENV_FOG_MODE_EXPONENTIAL);
|
environment_set_fog(p_env, p_enable, p_light_color, p_light_energy, p_sun_scatter, p_density, p_height, p_height_density, p_aerial_perspective, p_sky_affect, RS::EnvironmentFogMode::ENV_FOG_MODE_EXPONENTIAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RenderingServer::_canvas_item_add_multiline_bind_compat_84523(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width) {
|
||||||
|
canvas_item_add_multiline(p_item, p_points, p_colors, p_width, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RenderingServer::_canvas_item_add_rect_bind_compat_84523(RID p_item, const Rect2 &p_rect, const Color &p_color) {
|
||||||
|
canvas_item_add_rect(p_item, p_rect, p_color, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RenderingServer::_canvas_item_add_circle_bind_compat_84523(RID p_item, const Point2 &p_pos, float p_radius, const Color &p_color) {
|
||||||
|
canvas_item_add_circle(p_item, p_pos, p_radius, p_color, false);
|
||||||
|
}
|
||||||
|
|
||||||
void RenderingServer::_bind_compatibility_methods() {
|
void RenderingServer::_bind_compatibility_methods() {
|
||||||
ClassDB::bind_compatibility_method(D_METHOD("environment_set_fog", "env", "enable", "light_color", "light_energy", "sun_scatter", "density", "height", "height_density", "aerial_perspective", "sky_affect"), &RenderingServer::_environment_set_fog_bind_compat_84792);
|
ClassDB::bind_compatibility_method(D_METHOD("environment_set_fog", "env", "enable", "light_color", "light_energy", "sun_scatter", "density", "height", "height_density", "aerial_perspective", "sky_affect"), &RenderingServer::_environment_set_fog_bind_compat_84792);
|
||||||
|
ClassDB::bind_compatibility_method(D_METHOD("canvas_item_add_multiline", "item", "points", "colors", "width"), &RenderingServer::_canvas_item_add_multiline_bind_compat_84523, DEFVAL(-1.0));
|
||||||
|
ClassDB::bind_compatibility_method(D_METHOD("canvas_item_add_rect", "item", "rect", "color"), &RenderingServer::_canvas_item_add_rect_bind_compat_84523);
|
||||||
|
ClassDB::bind_compatibility_method(D_METHOD("canvas_item_add_circle", "item", "pos", "radius", "color"), &RenderingServer::_canvas_item_add_circle_bind_compat_84523);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -3229,9 +3229,9 @@ void RenderingServer::_bind_methods() {
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("canvas_item_add_line", "item", "from", "to", "color", "width", "antialiased"), &RenderingServer::canvas_item_add_line, DEFVAL(-1.0), DEFVAL(false));
|
ClassDB::bind_method(D_METHOD("canvas_item_add_line", "item", "from", "to", "color", "width", "antialiased"), &RenderingServer::canvas_item_add_line, DEFVAL(-1.0), DEFVAL(false));
|
||||||
ClassDB::bind_method(D_METHOD("canvas_item_add_polyline", "item", "points", "colors", "width", "antialiased"), &RenderingServer::canvas_item_add_polyline, DEFVAL(-1.0), DEFVAL(false));
|
ClassDB::bind_method(D_METHOD("canvas_item_add_polyline", "item", "points", "colors", "width", "antialiased"), &RenderingServer::canvas_item_add_polyline, DEFVAL(-1.0), DEFVAL(false));
|
||||||
ClassDB::bind_method(D_METHOD("canvas_item_add_multiline", "item", "points", "colors", "width"), &RenderingServer::canvas_item_add_multiline, DEFVAL(-1.0));
|
ClassDB::bind_method(D_METHOD("canvas_item_add_multiline", "item", "points", "colors", "width", "antialiased"), &RenderingServer::canvas_item_add_multiline, DEFVAL(-1.0), DEFVAL(false));
|
||||||
ClassDB::bind_method(D_METHOD("canvas_item_add_rect", "item", "rect", "color"), &RenderingServer::canvas_item_add_rect);
|
ClassDB::bind_method(D_METHOD("canvas_item_add_rect", "item", "rect", "color", "antialiased"), &RenderingServer::canvas_item_add_rect, DEFVAL(false));
|
||||||
ClassDB::bind_method(D_METHOD("canvas_item_add_circle", "item", "pos", "radius", "color"), &RenderingServer::canvas_item_add_circle);
|
ClassDB::bind_method(D_METHOD("canvas_item_add_circle", "item", "pos", "radius", "color", "antialiased"), &RenderingServer::canvas_item_add_circle, DEFVAL(false));
|
||||||
ClassDB::bind_method(D_METHOD("canvas_item_add_texture_rect", "item", "rect", "texture", "tile", "modulate", "transpose"), &RenderingServer::canvas_item_add_texture_rect, DEFVAL(false), DEFVAL(Color(1, 1, 1)), DEFVAL(false));
|
ClassDB::bind_method(D_METHOD("canvas_item_add_texture_rect", "item", "rect", "texture", "tile", "modulate", "transpose"), &RenderingServer::canvas_item_add_texture_rect, DEFVAL(false), DEFVAL(Color(1, 1, 1)), DEFVAL(false));
|
||||||
ClassDB::bind_method(D_METHOD("canvas_item_add_msdf_texture_rect_region", "item", "rect", "texture", "src_rect", "modulate", "outline_size", "px_range", "scale"), &RenderingServer::canvas_item_add_msdf_texture_rect_region, DEFVAL(Color(1, 1, 1)), DEFVAL(0), DEFVAL(1.0), DEFVAL(1.0));
|
ClassDB::bind_method(D_METHOD("canvas_item_add_msdf_texture_rect_region", "item", "rect", "texture", "src_rect", "modulate", "outline_size", "px_range", "scale"), &RenderingServer::canvas_item_add_msdf_texture_rect_region, DEFVAL(Color(1, 1, 1)), DEFVAL(0), DEFVAL(1.0), DEFVAL(1.0));
|
||||||
ClassDB::bind_method(D_METHOD("canvas_item_add_lcd_texture_rect_region", "item", "rect", "texture", "src_rect", "modulate"), &RenderingServer::canvas_item_add_lcd_texture_rect_region);
|
ClassDB::bind_method(D_METHOD("canvas_item_add_lcd_texture_rect_region", "item", "rect", "texture", "src_rect", "modulate"), &RenderingServer::canvas_item_add_lcd_texture_rect_region);
|
||||||
|
|
|
@ -99,6 +99,10 @@ protected:
|
||||||
|
|
||||||
#ifndef DISABLE_DEPRECATED
|
#ifndef DISABLE_DEPRECATED
|
||||||
void _environment_set_fog_bind_compat_84792(RID p_env, bool p_enable, const Color &p_light_color, float p_light_energy, float p_sun_scatter, float p_density, float p_height, float p_height_density, float p_aerial_perspective, float p_sky_affect);
|
void _environment_set_fog_bind_compat_84792(RID p_env, bool p_enable, const Color &p_light_color, float p_light_energy, float p_sun_scatter, float p_density, float p_height, float p_height_density, float p_aerial_perspective, float p_sky_affect);
|
||||||
|
void _canvas_item_add_multiline_bind_compat_84523(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width = -1.0);
|
||||||
|
void _canvas_item_add_rect_bind_compat_84523(RID p_item, const Rect2 &p_rect, const Color &p_color);
|
||||||
|
void _canvas_item_add_circle_bind_compat_84523(RID p_item, const Point2 &p_pos, float p_radius, const Color &p_color);
|
||||||
|
|
||||||
static void _bind_compatibility_methods();
|
static void _bind_compatibility_methods();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1465,9 +1469,9 @@ public:
|
||||||
|
|
||||||
virtual void canvas_item_add_line(RID p_item, const Point2 &p_from, const Point2 &p_to, const Color &p_color, float p_width = -1.0, bool p_antialiased = false) = 0;
|
virtual void canvas_item_add_line(RID p_item, const Point2 &p_from, const Point2 &p_to, const Color &p_color, float p_width = -1.0, bool p_antialiased = false) = 0;
|
||||||
virtual void canvas_item_add_polyline(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width = -1.0, bool p_antialiased = false) = 0;
|
virtual void canvas_item_add_polyline(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width = -1.0, bool p_antialiased = false) = 0;
|
||||||
virtual void canvas_item_add_multiline(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width = -1.0) = 0;
|
virtual void canvas_item_add_multiline(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width = -1.0, bool p_antialiased = false) = 0;
|
||||||
virtual void canvas_item_add_rect(RID p_item, const Rect2 &p_rect, const Color &p_color) = 0;
|
virtual void canvas_item_add_rect(RID p_item, const Rect2 &p_rect, const Color &p_color, bool p_antialiased = false) = 0;
|
||||||
virtual void canvas_item_add_circle(RID p_item, const Point2 &p_pos, float p_radius, const Color &p_color) = 0;
|
virtual void canvas_item_add_circle(RID p_item, const Point2 &p_pos, float p_radius, const Color &p_color, bool p_antialiased = false) = 0;
|
||||||
virtual void canvas_item_add_texture_rect(RID p_item, const Rect2 &p_rect, RID p_texture, bool p_tile = false, const Color &p_modulate = Color(1, 1, 1), bool p_transpose = false) = 0;
|
virtual void canvas_item_add_texture_rect(RID p_item, const Rect2 &p_rect, RID p_texture, bool p_tile = false, const Color &p_modulate = Color(1, 1, 1), bool p_transpose = false) = 0;
|
||||||
virtual void canvas_item_add_texture_rect_region(RID p_item, const Rect2 &p_rect, RID p_texture, const Rect2 &p_src_rect, const Color &p_modulate = Color(1, 1, 1), bool p_transpose = false, bool p_clip_uv = false) = 0;
|
virtual void canvas_item_add_texture_rect_region(RID p_item, const Rect2 &p_rect, RID p_texture, const Rect2 &p_src_rect, const Color &p_modulate = Color(1, 1, 1), bool p_transpose = false, bool p_clip_uv = false) = 0;
|
||||||
virtual void canvas_item_add_msdf_texture_rect_region(RID p_item, const Rect2 &p_rect, RID p_texture, const Rect2 &p_src_rect, const Color &p_modulate = Color(1, 1, 1), int p_outline_size = 0, float p_px_range = 1.0, float p_scale = 1.0) = 0;
|
virtual void canvas_item_add_msdf_texture_rect_region(RID p_item, const Rect2 &p_rect, RID p_texture, const Rect2 &p_src_rect, const Color &p_modulate = Color(1, 1, 1), int p_outline_size = 0, float p_px_range = 1.0, float p_scale = 1.0) = 0;
|
||||||
|
|
Loading…
Reference in New Issue