bevy/docs/cargo_features.md
ira 6a85eb3d7e
Immediate Mode Line/Gizmo Drawing (#6529)
# Objective
Add a convenient immediate mode drawing API for visual debugging.

Fixes #5619
Alternative to #1625
Partial alternative to #5734

Based off https://github.com/Toqozz/bevy_debug_lines with some changes:
 * Simultaneous support for 2D and 3D.
 * Methods for basic shapes; circles, spheres, rectangles, boxes, etc.
 * 2D methods.
 * Removed durations. Seemed niche, and can be handled by users.

<details>
<summary>Performance</summary>

Stress tested using Bevy's recommended optimization settings for the dev
profile with the
following command.
```bash
cargo run --example many_debug_lines \
    --config "profile.dev.package.\"*\".opt-level=3" \
    --config "profile.dev.opt-level=1"
```
I dipped to 65-70 FPS at 300,000 lines
CPU: 3700x
RAM Speed: 3200 Mhz
GPU: 2070 super - probably not very relevant, mostly cpu/memory bound

</details>

<details>
<summary>Fancy bloom screenshot</summary>


![Screenshot_20230207_155033](https://user-images.githubusercontent.com/29694403/217291980-f1e0500e-7a14-4131-8c96-eaaaf52596ae.png)

</details>

## Changelog
 * Added `GizmoPlugin`
 * Added `Gizmos` system parameter for drawing lines and wireshapes.

### TODO
- [ ] Update changelog
- [x] Update performance numbers
- [x] Add credit to PR description

### Future work
- Cache rendering primitives instead of constructing them out of line
segments each frame.
- Support for drawing solid meshes
- Interactions. (See
[bevy_mod_gizmos](https://github.com/LiamGallagher737/bevy_mod_gizmos))
- Fancier line drawing. (See
[bevy_polyline](https://github.com/ForesightMiningSoftwareCorporation/bevy_polyline))
- Support for `RenderLayers`
- Display gizmos for a certain duration. Currently everything displays
for one frame (ie. immediate mode)
- Changing settings per drawn item like drawing on top or drawing to
different `RenderLayers`

Co-Authored By: @lassade <felipe.jorge.pereira@gmail.com>
Co-Authored By: @The5-1 <agaku@hotmail.de> 
Co-Authored By: @Toqozz <toqoz@hotmail.com>
Co-Authored By: @nicopap <nico@nicopap.ch>

---------

Co-authored-by: Robert Swain <robert.swain@gmail.com>
Co-authored-by: IceSentry <c.giguere42@gmail.com>
Co-authored-by: Carter Anderson <mcanders1@gmail.com>
2023-03-20 20:57:54 +00:00

3.5 KiB

Cargo Features

Bevy exposes many features to customise the engine. Enabling them add functionalities but often come at the cost of longer compilation times and extra dependencies.

Default Features

The default feature set enables most of the expected features of a game engine, like rendering in both 2D and 3D, asset loading, audio and UI. To help reduce compilation time, consider disabling default features and enabling only those you need.

feature name description
android_shared_stdcxx Enable using a shared stdlib for cxx on Android
animation Enable animation support, and glTF animation loading
bevy_animation Provides animation functionality
bevy_asset Provides asset functionality
bevy_audio Provides audio functionality
bevy_core_pipeline Provides cameras and other basic render pipeline features
bevy_gilrs Adds gamepad support
bevy_gizmos Adds support for rendering gizmos
bevy_gltf glTF support
bevy_pbr Adds PBR rendering
bevy_render Provides rendering functionality
bevy_scene Provides scene functionality
bevy_sprite Provides sprite functionality
bevy_text Provides text functionality
bevy_ui A custom ECS-driven UI framework
bevy_winit winit window and input backend
filesystem_watcher Enable watching file system for asset hot reload
hdr HDR image format support
ktx2 KTX2 compressed texture support
png PNG image format support
tonemapping_luts Include tonemapping Look Up Tables KTX2 files
vorbis OGG/VORBIS audio format support
x11 X11 display server support
zstd For KTX2 supercompression

Optional Features

feature name description
accesskit_unix Enable AccessKit on Unix backends (currently only works with experimental screen readers and forks.)
basis-universal Basis Universal compressed texture support
bevy_ci_testing Enable systems that allow for automated testing on CI
bevy_dynamic_plugin Plugin for dynamic loading (using libloading)
bmp BMP image format support
dds DDS compressed texture support
debug_asset_server Enable the "debug asset server" for hot reloading internal assets
detailed_trace Enable detailed trace event logging. These trace events are expensive even when off, thus they require compile time opt-in
dynamic_linking Force dynamic linking, which improves iterative compile times
exr EXR image format support
flac FLAC audio format support
jpeg JPEG image format support
minimp3 MP3 audio format support (through minimp3)
mp3 MP3 audio format support
serialize Enable serialization support through serde
subpixel_glyph_atlas Enable rendering of font glyphs using subpixel accuracy
symphonia-aac AAC audio format support (through symphonia)
symphonia-all AAC, FLAC, MP3, MP4, OGG/VORBIS, and WAV audio formats support (through symphonia)
symphonia-flac FLAC audio format support (through symphonia)
symphonia-isomp4 MP4 audio format support (through symphonia)
symphonia-vorbis OGG/VORBIS audio format support (through symphonia)
symphonia-wav WAV audio format support (through symphonia)
tga TGA image format support
trace Tracing support
trace_chrome Tracing support, saving a file in Chrome Tracing format
trace_tracy Tracing support, exposing a port for Tracy
wav WAV audio format support
wayland Wayland display server support
wgpu_trace Save a trace of all wgpu calls
zlib For KTX2 supercompression