|
@@ -146,7 +146,9 @@ void LineBuilder::build() {
|
|
|
float current_distance1 = 0.f;
|
|
|
float total_distance = 0.f;
|
|
|
_interpolate_color = gradient != NULL;
|
|
|
- bool distance_required = _interpolate_color || texture_mode == Line2D::LINE_TEXTURE_TILE;
|
|
|
+ bool distance_required = _interpolate_color ||
|
|
|
+ texture_mode == Line2D::LINE_TEXTURE_TILE ||
|
|
|
+ texture_mode == Line2D::LINE_TEXTURE_STRETCH;
|
|
|
if (distance_required)
|
|
|
total_distance = calculate_total_distance(points);
|
|
|
if (_interpolate_color)
|
|
@@ -170,7 +172,7 @@ void LineBuilder::build() {
|
|
|
if (texture_mode == Line2D::LINE_TEXTURE_TILE) {
|
|
|
uvx0 = 0.5f / tile_aspect;
|
|
|
}
|
|
|
- new_arc(pos0, pos_up0 - pos0, -Math_PI, color0, Rect2(0.f, 0.f, 1.f, 1.f));
|
|
|
+ new_arc(pos0, pos_up0 - pos0, -Math_PI, color0, Rect2(0.f, 0.f, fmin(uvx0 * 2, 1.f), 1.f));
|
|
|
total_distance += width;
|
|
|
current_distance0 += hw;
|
|
|
current_distance1 = current_distance0;
|
|
@@ -292,6 +294,9 @@ void LineBuilder::build() {
|
|
|
if (texture_mode == Line2D::LINE_TEXTURE_TILE) {
|
|
|
uvx0 = current_distance0 / (width * tile_aspect);
|
|
|
uvx1 = current_distance1 / (width * tile_aspect);
|
|
|
+ } else if (texture_mode == Line2D::LINE_TEXTURE_STRETCH) {
|
|
|
+ uvx0 = current_distance0 / total_distance;
|
|
|
+ uvx1 = current_distance1 / total_distance;
|
|
|
}
|
|
|
|
|
|
strip_add_quad(pos_up1, pos_down1, color1, uvx1);
|
|
@@ -378,6 +383,8 @@ void LineBuilder::build() {
|
|
|
}
|
|
|
if (texture_mode == Line2D::LINE_TEXTURE_TILE) {
|
|
|
uvx1 = current_distance1 / (width * tile_aspect);
|
|
|
+ } else if (texture_mode == Line2D::LINE_TEXTURE_STRETCH) {
|
|
|
+ uvx1 = current_distance1 / total_distance;
|
|
|
}
|
|
|
|
|
|
strip_add_quad(pos_up1, pos_down1, color1, uvx1);
|
|
@@ -386,7 +393,7 @@ void LineBuilder::build() {
|
|
|
if (end_cap_mode == Line2D::LINE_CAP_ROUND) {
|
|
|
// Note: color is not used in case we don't interpolate...
|
|
|
Color color = _interpolate_color ? gradient->get_color(gradient->get_points_count() - 1) : Color(0, 0, 0);
|
|
|
- new_arc(pos1, pos_up1 - pos1, Math_PI, color, Rect2(uvx1 - 0.5f, 0.f, 1.f, 1.f));
|
|
|
+ new_arc(pos1, pos_up1 - pos1, Math_PI, color, Rect2(uvx1 - 0.5f / tile_aspect, 0.f, 1.0f / tile_aspect, 1.f));
|
|
|
}
|
|
|
}
|
|
|
|