You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-07 12:30:27 +00:00
Merge pull request #75612 from lawnjelly/fix_skele2d_bounds2
[3.x] Fix Polygon2D skinned bounds (for culling)
This commit is contained in:
@@ -943,6 +943,38 @@ void VisualServerCanvas::canvas_item_set_z_as_relative_to_parent(RID p_item, boo
|
||||
canvas_item->z_relative = p_enable;
|
||||
}
|
||||
|
||||
Rect2 VisualServerCanvas::_debug_canvas_item_get_rect(RID p_item) {
|
||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||
ERR_FAIL_COND_V(!canvas_item, Rect2());
|
||||
return canvas_item->get_rect();
|
||||
}
|
||||
|
||||
void VisualServerCanvas::canvas_item_set_skeleton_relative_xform(RID p_item, Transform2D p_relative_xform) {
|
||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||
ERR_FAIL_COND(!canvas_item);
|
||||
|
||||
if (!canvas_item->skinning_data) {
|
||||
canvas_item->skinning_data = memnew(Item::SkinningData);
|
||||
}
|
||||
canvas_item->skinning_data->skeleton_relative_xform = p_relative_xform;
|
||||
canvas_item->skinning_data->skeleton_relative_xform_inv = p_relative_xform.affine_inverse();
|
||||
|
||||
// Set any Polygon2Ds pre-calced bone bounds to dirty.
|
||||
for (int n = 0; n < canvas_item->commands.size(); n++) {
|
||||
Item::Command *c = canvas_item->commands[n];
|
||||
if (c->type == Item::Command::TYPE_POLYGON) {
|
||||
Item::CommandPolygon *polygon = static_cast<Item::CommandPolygon *>(c);
|
||||
|
||||
// Make sure skinning data is present.
|
||||
if (!polygon->skinning_data) {
|
||||
polygon->skinning_data = memnew(Item::CommandPolygon::SkinningData);
|
||||
}
|
||||
|
||||
polygon->skinning_data->dirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void VisualServerCanvas::canvas_item_attach_skeleton(RID p_item, RID p_skeleton) {
|
||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||
ERR_FAIL_COND(!canvas_item);
|
||||
|
||||
Reference in New Issue
Block a user