You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-13 13:31:48 +00:00
-Ability to and unwrap lightmap coordinates on import
-Added unwrap functionality to Mesh -Ability to display and debug mesh UVs -Added multiline draw, so it's easier and faster to draw UVs -Many fixes to SurfaceTool -Fixes to Thekla Unwrap, but it's a piece of ass and it keeps crashing. Will have to go away
This commit is contained in:
@@ -416,6 +416,7 @@ void VisualServerCanvas::canvas_item_add_polyline(RID p_item, const Vector<Point
|
||||
ERR_FAIL_COND(!pline);
|
||||
|
||||
pline->antialiased = p_antialiased;
|
||||
pline->multiline = false;
|
||||
|
||||
if (p_width <= 1) {
|
||||
pline->lines = p_points;
|
||||
@@ -486,6 +487,90 @@ void VisualServerCanvas::canvas_item_add_polyline(RID p_item, const Vector<Point
|
||||
canvas_item->commands.push_back(pline);
|
||||
}
|
||||
|
||||
void VisualServerCanvas::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.size() < 2);
|
||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||
ERR_FAIL_COND(!canvas_item);
|
||||
|
||||
Item::CommandPolyLine *pline = memnew(Item::CommandPolyLine);
|
||||
ERR_FAIL_COND(!pline);
|
||||
|
||||
pline->antialiased = false; //todo
|
||||
pline->multiline = true;
|
||||
|
||||
// if (p_width <= 1) {
|
||||
pline->lines = p_points;
|
||||
pline->line_colors = p_colors;
|
||||
if (pline->line_colors.size() == 0) {
|
||||
pline->line_colors.push_back(Color(1, 1, 1, 1));
|
||||
} else if (pline->line_colors.size() > 1 && pline->line_colors.size() != pline->lines.size()) {
|
||||
pline->line_colors.resize(1);
|
||||
}
|
||||
#if 0
|
||||
//width not yet
|
||||
} else {
|
||||
//make a trianglestrip for drawing the line...
|
||||
Vector2 prev_t;
|
||||
pline->triangles.resize(p_points.size() * 2);
|
||||
if (p_antialiased) {
|
||||
pline->lines.resize(p_points.size() * 2);
|
||||
}
|
||||
|
||||
if (p_colors.size() == 0) {
|
||||
pline->triangle_colors.push_back(Color(1, 1, 1, 1));
|
||||
if (p_antialiased) {
|
||||
pline->line_colors.push_back(Color(1, 1, 1, 1));
|
||||
}
|
||||
}
|
||||
if (p_colors.size() == 1) {
|
||||
pline->triangle_colors = p_colors;
|
||||
pline->line_colors = p_colors;
|
||||
} else {
|
||||
pline->triangle_colors.resize(pline->triangles.size());
|
||||
pline->line_colors.resize(pline->lines.size());
|
||||
}
|
||||
|
||||
for (int i = 0; i < p_points.size(); i++) {
|
||||
|
||||
Vector2 t;
|
||||
if (i == p_points.size() - 1) {
|
||||
t = prev_t;
|
||||
} else {
|
||||
t = (p_points[i + 1] - p_points[i]).normalized().tangent();
|
||||
if (i == 0) {
|
||||
prev_t = t;
|
||||
}
|
||||
}
|
||||
|
||||
Vector2 tangent = ((t + prev_t).normalized()) * p_width * 0.5;
|
||||
|
||||
if (p_antialiased) {
|
||||
pline->lines[i] = p_points[i] + tangent;
|
||||
pline->lines[p_points.size() * 2 - i - 1] = p_points[i] - tangent;
|
||||
if (pline->line_colors.size() > 1) {
|
||||
pline->line_colors[i] = p_colors[i];
|
||||
pline->line_colors[p_points.size() * 2 - i - 1] = p_colors[i];
|
||||
}
|
||||
}
|
||||
|
||||
pline->triangles[i * 2 + 0] = p_points[i] + tangent;
|
||||
pline->triangles[i * 2 + 1] = p_points[i] - tangent;
|
||||
|
||||
if (pline->triangle_colors.size() > 1) {
|
||||
|
||||
pline->triangle_colors[i * 2 + 0] = p_colors[i];
|
||||
pline->triangle_colors[i * 2 + 1] = p_colors[i];
|
||||
}
|
||||
|
||||
prev_t = t;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
canvas_item->rect_dirty = true;
|
||||
canvas_item->commands.push_back(pline);
|
||||
}
|
||||
|
||||
void VisualServerCanvas::canvas_item_add_rect(RID p_item, const Rect2 &p_rect, const Color &p_color) {
|
||||
|
||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||
|
||||
Reference in New Issue
Block a user