bevy/crates
ickshonpe da305da07b ExtractedSprites slice buffer (#17041)
Instead of extracting an individual sprite per glyph of a text spawn or
slice of a nine-patched sprite, add a buffer to store the extracted
slice geometry.

Fixes #16972

* New struct `ExtractedSlice` to hold sprite slice size, position and
atlas info (for text each glyph is a slice).
* New resource `ExtractedSlices` that wraps the `ExtractedSlice` buffer.
This is a separate resource so it can be used without sprites (with a
text material, for example).
* New enum `ExtractedSpriteKind` with variants `Single` and `Slices`.
`Single` represents a single sprite, `Slices` contains a range into the
`ExtractedSlice` buffer.
* Only queue a single `ExtractedSprite` for sets of glyphs or slices and
push the geometry for each individual slice or glyph into the
`ExtractedSlice` buffer.
* Modify `ComputedTextureSlices` to return an `ExtractedSlice` iterator
instead of `ExtractedSprites`.
* Modify `extract_text2d_sprite` to only queue new `ExtractedSprite`s on
font changes and otherwise push slices.

I don't like the name `ExtractedSpriteKind` much, it's a bit redundant
and too haskellish. But although it's exported, it's not something users
will interact with most of the time so don't want to overthink it.

yellow = this pr, red = main

```cargo run --example many_glyphs --release --features "trace_tracy" -- --no-ui```

<img width="454" alt="many-glyphs" src="https://github.com/user-attachments/assets/711b52c9-2d4d-43c7-b154-e81a69c94dce" />

```cargo run --example many_text2d --release --features "trace_tracy"```
<img width="415" alt="many-text2d"
src="https://github.com/user-attachments/assets/5ea2480a-52e0-4cd0-9f12-07405cf6b8fa"
/>

* `ExtractedSprite` has a new `kind: ExtractedSpriteKind` field with
variants `Single` and `Slices`.
- `Single` represents a single sprite. `ExtractedSprite`'s `anchor`,
`rect`, `scaling_mode` and `custom_size` fields have been moved into
`Single`.
- `Slices` contains a range that indexes into a new resource
`ExtractedSlices`. Slices are used to draw elements composed from
multiple sprites such as text or nine-patched borders.
* `ComputedTextureSlices::extract_sprites` has been renamed to
`extract_slices`. Its `transform` and `original_entity` parameters have
been removed.

---------

Co-authored-by: Kristoffer Søholm <k.soeholm@gmail.com>
2025-03-25 22:43:58 +01:00
..
bevy_a11y Remove bevy_input_focus from bevy_a11y (#18483) 2025-03-24 00:14:14 +01:00
bevy_animation Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_app Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_asset fix error and lints when building for wasm32 (#18500) 2025-03-24 00:14:22 +01:00
bevy_audio Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_color Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_core_pipeline Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_derive Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_dev_tools Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_diagnostic Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_dylib Switch from OnceCell to LazyLock in bevy_tasks (#18506) 2025-03-25 22:41:01 +01:00
bevy_ecs Regression fix: Reintroduce sorting/reordering methods on Children (#18476) 2025-03-24 00:14:22 +01:00
bevy_encase_derive Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_gilrs Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_gizmos Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_gltf fix error and lints when building for wasm32 (#18500) 2025-03-24 00:14:22 +01:00
bevy_image Ensure dds enables bevy_core_pipeline/dds in bevy_anti_aliasing (#18484) 2025-03-24 00:11:37 +01:00
bevy_input Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_input_focus Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_internal enable x11 by default in bevy_winit (#18475) 2025-03-25 22:40:31 +01:00
bevy_log Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_macro_utils Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_math Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_mesh Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_mikktspace Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_pbr Fix specialize_shadows system ordering (#18412) 2025-03-19 21:36:18 +01:00
bevy_picking Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_platform_support Address lints in bevy_platform_support (#18477) 2025-03-24 00:09:30 +01:00
bevy_ptr Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_reflect Address Lints in bevy_reflect (#18479) 2025-03-25 22:40:33 +01:00
bevy_remote fix error and lints when building for wasm32 (#18500) 2025-03-24 00:14:22 +01:00
bevy_render Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_scene Properly gate imports in bevy_scene (#18482) 2025-03-24 00:09:30 +01:00
bevy_sprite ExtractedSprites slice buffer (#17041) 2025-03-25 22:43:58 +01:00
bevy_state Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_tasks Switch from OnceCell to LazyLock in bevy_tasks (#18506) 2025-03-25 22:41:01 +01:00
bevy_text ExtractedSprites slice buffer (#17041) 2025-03-25 22:43:58 +01:00
bevy_time Fix clippy::unnecessary-literal-unwrap in bevy_time (#18485) 2025-03-24 00:14:22 +01:00
bevy_transform Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_ui register ComputedNodeTarget (#18503) 2025-03-25 22:39:04 +01:00
bevy_utils Release 0.16.0-rc.1 2025-03-18 21:48:22 +01:00
bevy_window Replace VisitEntities with MapEntities (#18432) 2025-03-24 00:09:29 +01:00
bevy_winit enable x11 by default in bevy_winit (#18475) 2025-03-25 22:40:31 +01:00