vello

所属分类:GPU/显卡
开发工具:Rust
文件大小:778KB
下载次数:0
上传日期:2023-06-01 15:10:27
上 传 者sh-1993
说明:  实验性的以GPU计算为中心的2D渲染器。
(An experimental GPU compute-centric 2D renderer.)

文件列表:
.cargo (0, 2023-07-14)
.cargo\config.toml (191, 2023-07-14)
.vscode (0, 2023-07-14)
.vscode\settings.json (944, 2023-07-14)
Cargo.toml (1788, 2023-07-14)
LICENSE-APACHE (11358, 2023-07-14)
LICENSE-MIT (1055, 2023-07-14)
crates (0, 2023-07-14)
crates\encoding (0, 2023-07-14)
crates\encoding\Cargo.toml (417, 2023-07-14)
crates\encoding\src (0, 2023-07-14)
crates\encoding\src\binning.rs (280, 2023-07-14)
crates\encoding\src\clip.rs (1163, 2023-07-14)
crates\encoding\src\config.rs (11441, 2023-07-14)
crates\encoding\src\draw.rs (3899, 2023-07-14)
crates\encoding\src\encoding.rs (16468, 2023-07-14)
crates\encoding\src\glyph.rs (1178, 2023-07-14)
crates\encoding\src\glyph_cache.rs (2904, 2023-07-14)
crates\encoding\src\image_cache.rs (2213, 2023-07-14)
crates\encoding\src\lib.rs (1134, 2023-07-14)
crates\encoding\src\math.rs (2225, 2023-07-14)
crates\encoding\src\monoid.rs (479, 2023-07-14)
crates\encoding\src\path.rs (12775, 2023-07-14)
crates\encoding\src\ramp_cache.rs (4228, 2023-07-14)
crates\encoding\src\resolve.rs (24893, 2023-07-14)
crates\shaders (0, 2023-07-14)
crates\shaders\Cargo.toml (448, 2023-07-14)
crates\shaders\build.rs (4034, 2023-07-14)
crates\shaders\src (0, 2023-07-14)
crates\shaders\src\compile (0, 2023-07-14)
crates\shaders\src\compile\mod.rs (7815, 2023-07-14)
crates\shaders\src\compile\msl.rs (1819, 2023-07-14)
crates\shaders\src\compile\permutations.rs (1463, 2023-07-14)
... ...

# Vello **An experimental GPU compute-centric 2D renderer** [![Xi Zulip](https://img.shields.io/badge/Xi%20Zulip-%23gpu-blue?logo=Zulip)](https://xi.zulipchat.com/#narrow/stream/197075-gpu) [![dependency status](https://deps.rs/repo/github/linebender/vello/status.svg)](https://deps.rs/repo/github/linebender/vello) [![MIT/Apache 2.0](https://img.shields.io/badge/license-MIT%2FApache-blue.svg)](#license) [![wgpu version](https://img.shields.io/badge/wgpu-v0.16-orange.svg)](https://crates.io/crates/wgpu)
Vello is a 2d graphics rendering engine, using [`wgpu`]. It efficiently draws large 2d scenes with interactive or near-interactive performance. It is used as the rendering backend for [Xilem], a UI toolkit. Quickstart to run an example program: ```shell cargo run -p with_winit ``` ## Integrations ### SVG This repository also includes [`vello_svg`](./integrations/vello_svg/), which supports converting a [`usvg`](https://crates.io/crates/usvg) `Tree` into a Vello scene. This is currently incomplete; see its crate level documentation for more information. This is used in the [winit](#winit) example for the SVG rendering. ## Examples Our examples are provided in separate packages in the [`examples`](examples) folder. This allows them to have independent dependencies and faster builds. Examples must be selected using the `--package` (or `-p`) Cargo flag. ### Winit Our [winit] example ([examples/with_winit](examples/with_winit)) demonstrates rendering to a [winit] window. By default, this renders [GhostScript Tiger] all SVG files in [examples/assets/downloads](examples/assets/downloads) directory (using [`vello_svg`](#svg)). A custom list of SVG file paths (and directories to render all SVG files from) can be provided as arguments instead. It also includes a collection of test scenes showing the capabilities of `vello`, which can be shown with `--test-scenes`. ```shell cargo run -p with_winit ``` Some default test scenes can be downloaded from Wikimedia Commons using the `download` subcommand. This also supports downloading from user-provided URLS. ```shell cargo run -p with_winit -- download ``` ### Bevy The [Bevy] example ([examples/with_bevy](examples/with_bevy)) demonstrates using Vello within a [Bevy] application. This currently draws to a [`wgpu`] `Texture` using `vello`, then uses that texture as the faces of a cube. ```shell cargo run -p with_bevy ``` ## Platforms We aim to target all environments which can support WebGPU with the [default limits](https://www.w3.org/TR/webgpu/#limits). We defer to [`wgpu`] for this support. Other platforms are more tricky, and may require special building/running procedures. ### Web Because Vello relies heavily on compute shaders, we rely on the emerging WebGPU standard to run on the web. Until browser support becomes widespread, it will probably be necessary to use development browser versions (e.g. Chrome Canary) and explicitly enable WebGPU. The following command builds and runs a web version of the [winit demo](#winit). This uses [`cargo-run-wasm`](https://github.com/rukai/cargo-run-wasm) to build the example for web, and host a local server for it ```shell # Make sure the Rust toolchain supports the wasm32 target rustup target add wasm32-unknown-unknown # The binary name must also be explicitly provided as it differs from the package name cargo run_wasm -p with_winit --bin with_winit_bin ``` > **Warning** > The web is not currently a primary target for vello, and WebGPU implementations are incomplete, so you might run into issues running this example. ### Android The [`with_winit`](#winit) example supports running on Android, using [cargo apk](https://crates.io/crates/cargo-apk). ``` cargo apk run -p with_winit ``` > **Note** > cargo apk doesn't support running in release mode without configuration. > See [their crates page docs](https://crates.io/crates/cargo-apk) (around `package.metadata.android.signing.`). > > See also [cargo-apk#16](https://github.com/rust-mobile/cargo-apk/issues/16). > To run in release mode, you must add the following to `examples/with_winit/Cargo.toml` (changing `$HOME` to your home directory): ``` [package.metadata.android.signing.release] path = "$HOME/.android/debug.keystore" keystore_password = "android" ``` ## Community [![Xi Zulip](https://img.shields.io/badge/Xi%20Zulip-%23gpu-blue?logo=Zulip)](https://xi.zulipchat.com/#narrow/stream/197075-gpu) Discussion of Vello development happens in the [Xi Zulip](https://xi.zulipchat.com/), specifically the [#gpu stream](https://xi.zulipchat.com/#narrow/stream/197075-gpu). All public content can be read without logging in ## Shader templating We implement a limited, simple preprocessor for our shaders, as wgsl has insufficient code-sharing for our needs. This implements only classes of statements. 1. `import`, which imports from `shader/shared` 2. `ifdef`, `ifndef`, `else` and `endif`, as standard. These must be at the start of their lines. Note that there is no support for creating definitions in-shader, these are only specified externally (in `src/shaders.rs`). Note also that this definitions cannot currently be used in-code (`import`s may be used instead) This format is compatible with [`wgsl-analyzer`], which we recommend using. If you run into any issues, please report them on Zulip ([#gpu > wgsl-analyzer issues](https://xi.zulipchat.com/#narrow/stream/197075-gpu/topic/wgsl-analyzer.20issues)), and/or on the [`wgsl-analyzer`] issue tracker. Note that new imports must currently be added to `.vscode/settings.json` for this support to work correctly. `wgsl-analyzer` only supports imports in very few syntactic locations, so we limit their use to these places. ## GPU abstraction Our rendering code does not directly interact with `wgpu`. Instead, we generate a `Recording`, a simple value type, then an `Engine` plays that recording to the actual GPU. The only currently implemented `Engine` uses `wgpu`. The idea is that this can abstract easily over multiple GPU back-ends, without either the render logic needing to be polymorphic or having dynamic dispatch at the GPU abstraction. The goal is to be more agile. ## Goals The major goal of Vello is to provide a high quality GPU accelerated renderer suitable for a range of 2D graphics applications, including rendering for GUI applications, creative tools, and scientific visualization. The [roadmap for 2023](doc/roadmap_2023.md) explains the goals and plans for the next few months of development Vello emerges from being a research project, which attempts to answer these hypotheses: - To what extent is a compute-centered approach better than rasterization ([Direct2D])? - To what extent do "advanced" GPU features (subgroups, descriptor arrays, device-scoped barriers) help? - Can we improve quality and extend the imaging model in useful ways? Another goal of the overall project is to explain how the renderer is built, and to advance the state of building applications on GPU compute shaders more generally. Much of the progress on Vello is documented in blog entries. See [doc/blogs.md](doc/blogs.md) for pointers to those. ## History Vello was previously known as `piet-gpu`. This prior incarnation used a custom cross-API hardware abstraction layer, called `piet-gpu-hal`, instead of [`wgpu`]. An archive of this version can be found in the branches [`custom-hal-archive-with-shaders`] and [`custom-hal-archive`]. This succeeded the previous prototype, [piet-metal], and included work adapted from [piet-dx12]. The decision to lay down `piet-gpu-hal` in favor of WebGPU is discussed in detail in the blog post [Requiem for piet-gpu-hal]. A [vision](doc/vision.md) document dated December 2020 explained the longer-term goals of the project, and how we might get there. Many of these items are out-of-date or completed, but it still may provide some useful background. ## Related projects Vello takes inspiration from many other rendering projects, including: * [Pathfinder](https://github.com/servo/pathfinder) * [Spinel](https://fuchsia.googlesource.com/fuchsia/+/refs/heads/master/src/graphics/lib/compute/spinel/) * [Forma](https://github.com/google/forma) * [Massively Parallel Vector Graphics](https://w3.impa.br/~diego/projects/GanEtAl14/) * [Random-access rendering of general vector graphics](https://hhoppe.com/proj/ravg/) ## License Licensed under either of - Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or ) - MIT license ([LICENSE-MIT](LICENSE-MIT) or ) at your option. In addition, all files in the [`shader`](shader) directory and subdirectories thereof are alternatively licensed under the Unlicense ([shader/UNLICENSE](shader/UNLICENSE) or ). For clarity, these files are also licensed under either of the above licenses. The intent is for this research to be used in as broad a context as possible. The files in subdirectories of the [`examples/assets`](examples/assets) directory are licensed solely under their respective licenses, available in the `LICENSE` file in their directories. ## Contribution Contributions are welcome by pull request. The [Rust code of conduct] applies. Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions. [piet-metal]: https://github.com/linebender/piet-metal [direct2d]: https://docs.microsoft.com/en-us/windows/win32/direct2d/direct2d-portal [`wgpu`]: https://wgpu.rs/ [Xilem]: https://github.com/linebender/xilem/ [rust code of conduct]: https://www.rust-lang.org/policies/code-of-conduct [`custom-hal-archive-with-shaders`]: https://github.com/linebender/piet-gpu/tree/custom-hal-archive-with-shaders [`custom-hal-archive`]: https://github.com/linebender/piet-gpu/tree/custom-hal-archive [piet-dx12]: https://github.com/bzm3r/piet-dx12 [GhostScript tiger]: https://commons.wikimedia.org/wiki/File:Ghostscript_Tiger.svg [winit]: https://github.com/rust-windowing/winit [Bevy]: https://bevyengine.org/ [`wgsl-analyzer`]: https://marketplace.visualstudio.com/items?itemName=wgsl-analyzer.wgsl-analyzer [Requiem for piet-gpu-hal]: https://raphlinus.github.io/rust/gpu/2023/01/07/requiem-piet-gpu-hal.html

近期下载者

相关文件


收藏者