mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-09 16:48:43 +08:00
[godot] Improve debug renderer.
This commit is contained in:
parent
4f69cdd6af
commit
d9b640254a
@ -831,6 +831,24 @@ void SpineSprite::update_meshes(Ref<SpineSkeleton> skeleton_ref) {
|
||||
skeleton_clipper->clipEnd();
|
||||
}
|
||||
|
||||
void createLinesFromMesh(Vector<Vector2> &scratch_points, spine::Vector<unsigned short> &triangles, spine::Vector<float> *vertices) {
|
||||
scratch_points.resize(0);
|
||||
for (int i = 0; i < triangles.size(); i += 3) {
|
||||
int i1 = triangles[i];
|
||||
int i2 = triangles[i + 1];
|
||||
int i3 = triangles[i + 2];
|
||||
Vector2 v1(vertices->buffer()[i1 * 2], vertices->buffer()[i1 * 2 + 1]);
|
||||
Vector2 v2(vertices->buffer()[i2 * 2], vertices->buffer()[i2 * 2 + 1]);
|
||||
Vector2 v3(vertices->buffer()[i3 * 2], vertices->buffer()[i3 * 2 + 1]);
|
||||
scratch_points.push_back(v1);
|
||||
scratch_points.push_back(v2);
|
||||
scratch_points.push_back(v2);
|
||||
scratch_points.push_back(v3);
|
||||
scratch_points.push_back(v3);
|
||||
scratch_points.push_back(v1);
|
||||
}
|
||||
}
|
||||
|
||||
void SpineSprite::draw() {
|
||||
if (!animation_state.is_valid() && !skeleton.is_valid()) return;
|
||||
if (!Engine::get_singleton()->is_editor_hint() && !get_tree()->is_debugging_collisions_hint()) return;
|
||||
@ -857,6 +875,12 @@ void SpineSprite::draw() {
|
||||
auto *vertices = &scratch_vertices;
|
||||
vertices->setSize(8, 0);
|
||||
region->computeWorldVertices(*slot, *vertices, 0);
|
||||
|
||||
// Render triangles.
|
||||
createLinesFromMesh(scratch_points, quad_indices, vertices);
|
||||
draw_polyline(scratch_points, debug_regions_color);
|
||||
|
||||
// Render hull.
|
||||
scratch_points.resize(0);
|
||||
for (int i = 0, j = 0; i < 4; i++, j += 2) {
|
||||
float x = vertices->buffer()[j];
|
||||
@ -888,6 +912,12 @@ void SpineSprite::draw() {
|
||||
auto *vertices = &scratch_vertices;
|
||||
vertices->setSize(mesh->getWorldVerticesLength(), 0);
|
||||
mesh->computeWorldVertices(*slot, *vertices);
|
||||
|
||||
// Render triangles.
|
||||
createLinesFromMesh(scratch_points, mesh->getTriangles(), vertices);
|
||||
draw_polyline(scratch_points, debug_meshes_color);
|
||||
|
||||
// Render hull
|
||||
scratch_points.resize(0);
|
||||
for (int i = 0, j = 0; i < mesh->getHullLength(); i++, j += 2) {
|
||||
float x = vertices->buffer()[j];
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user