mirror of
https://github.com/bevyengine/bevy
synced 2025-02-17 06:28:34 +00:00
Merge branch 'main' into test-threads-in-ci-doc-test
This commit is contained in:
commit
fe4e0de6b4
159 changed files with 513 additions and 363 deletions
|
@ -2,7 +2,7 @@
|
||||||
name: Performance Regression
|
name: Performance Regression
|
||||||
about: Bevy running slowly after upgrading? Report a performance regression.
|
about: Bevy running slowly after upgrading? Report a performance regression.
|
||||||
title: ''
|
title: ''
|
||||||
labels: C-Bug, C-Performance, C-Regression, S-Needs-Triage
|
labels: C-Bug, C-Performance, P-Regression, S-Needs-Triage
|
||||||
assignees: ''
|
assignees: ''
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
12
.github/workflows/ci.yml
vendored
12
.github/workflows/ci.yml
vendored
|
@ -72,8 +72,7 @@ jobs:
|
||||||
run: cargo run -p ci -- lints
|
run: cargo run -p ci -- lints
|
||||||
|
|
||||||
miri:
|
miri:
|
||||||
# Explicitly use macOS 14 to take advantage of M1 chip.
|
runs-on: macos-latest
|
||||||
runs-on: macos-14
|
|
||||||
timeout-minutes: 60
|
timeout-minutes: 60
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
@ -254,8 +253,7 @@ jobs:
|
||||||
echo 'You can find the extension here: https://marketplace.visualstudio.com/items?itemName=tekumara.typos-vscode'
|
echo 'You can find the extension here: https://marketplace.visualstudio.com/items?itemName=tekumara.typos-vscode'
|
||||||
|
|
||||||
run-examples-macos-metal:
|
run-examples-macos-metal:
|
||||||
# Explicitly use macOS 14 to take advantage of M1 chip.
|
runs-on: macos-latest
|
||||||
runs-on: macos-14
|
|
||||||
timeout-minutes: 30
|
timeout-minutes: 30
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
@ -316,7 +314,9 @@ jobs:
|
||||||
~/.cargo/git/db/
|
~/.cargo/git/db/
|
||||||
target/
|
target/
|
||||||
key: ${{ runner.os }}-check-doc-${{ hashFiles('**/Cargo.toml') }}
|
key: ${{ runner.os }}-check-doc-${{ hashFiles('**/Cargo.toml') }}
|
||||||
- uses: dtolnay/rust-toolchain@stable
|
- uses: dtolnay/rust-toolchain@master
|
||||||
|
with:
|
||||||
|
toolchain: ${{ env.NIGHTLY_TOOLCHAIN }}
|
||||||
- name: Install Linux dependencies
|
- name: Install Linux dependencies
|
||||||
uses: ./.github/actions/install-linux-deps
|
uses: ./.github/actions/install-linux-deps
|
||||||
with:
|
with:
|
||||||
|
@ -327,7 +327,7 @@ jobs:
|
||||||
run: cargo run -p ci -- doc
|
run: cargo run -p ci -- doc
|
||||||
env:
|
env:
|
||||||
CARGO_INCREMENTAL: 0
|
CARGO_INCREMENTAL: 0
|
||||||
RUSTFLAGS: "-C debuginfo=0"
|
RUSTFLAGS: "-C debuginfo=0 --cfg docsrs_dep"
|
||||||
# This currently report a lot of false positives
|
# This currently report a lot of false positives
|
||||||
# Enable it again once it's fixed - https://github.com/bevyengine/bevy/issues/1983
|
# Enable it again once it's fixed - https://github.com/bevyengine/bevy/issues/1983
|
||||||
# - name: Installs cargo-deadlinks
|
# - name: Installs cargo-deadlinks
|
||||||
|
|
2
.github/workflows/validation-jobs.yml
vendored
2
.github/workflows/validation-jobs.yml
vendored
|
@ -244,7 +244,7 @@ jobs:
|
||||||
|
|
||||||
- name: First Wasm build
|
- name: First Wasm build
|
||||||
run: |
|
run: |
|
||||||
cargo build --release --example ui --target wasm32-unknown-unknown
|
cargo build --release --example testbed_ui --target wasm32-unknown-unknown
|
||||||
|
|
||||||
- name: Run examples
|
- name: Run examples
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
2
.github/workflows/weekly.yml
vendored
2
.github/workflows/weekly.yml
vendored
|
@ -75,7 +75,7 @@ jobs:
|
||||||
run: cargo run -p ci -- doc
|
run: cargo run -p ci -- doc
|
||||||
env:
|
env:
|
||||||
CARGO_INCREMENTAL: 0
|
CARGO_INCREMENTAL: 0
|
||||||
RUSTFLAGS: "-C debuginfo=0"
|
RUSTFLAGS: "-C debuginfo=0 --cfg docsrs_dep"
|
||||||
|
|
||||||
open-issue:
|
open-issue:
|
||||||
name: Warn that weekly CI fails
|
name: Warn that weekly CI fails
|
||||||
|
|
19
Cargo.toml
19
Cargo.toml
|
@ -474,6 +474,7 @@ hyper = { version = "1", features = ["server", "http1"] }
|
||||||
http-body-util = "0.1"
|
http-body-util = "0.1"
|
||||||
anyhow = "1"
|
anyhow = "1"
|
||||||
macro_rules_attribute = "0.2"
|
macro_rules_attribute = "0.2"
|
||||||
|
accesskit = "0.17"
|
||||||
|
|
||||||
[target.'cfg(not(target_family = "wasm"))'.dev-dependencies]
|
[target.'cfg(not(target_family = "wasm"))'.dev-dependencies]
|
||||||
smol = "2"
|
smol = "2"
|
||||||
|
@ -3136,17 +3137,6 @@ description = "Demonstrates how to control the relative depth (z-position) of UI
|
||||||
category = "UI (User Interface)"
|
category = "UI (User Interface)"
|
||||||
wasm = true
|
wasm = true
|
||||||
|
|
||||||
[[example]]
|
|
||||||
name = "ui"
|
|
||||||
path = "examples/ui/ui.rs"
|
|
||||||
doc-scrape-examples = true
|
|
||||||
|
|
||||||
[package.metadata.example.ui]
|
|
||||||
name = "UI"
|
|
||||||
description = "Illustrates various features of Bevy UI"
|
|
||||||
category = "UI (User Interface)"
|
|
||||||
wasm = true
|
|
||||||
|
|
||||||
[[example]]
|
[[example]]
|
||||||
name = "ui_scaling"
|
name = "ui_scaling"
|
||||||
path = "examples/ui/ui_scaling.rs"
|
path = "examples/ui/ui_scaling.rs"
|
||||||
|
@ -3857,6 +3847,13 @@ doc-scrape-examples = true
|
||||||
[package.metadata.example.testbed_3d]
|
[package.metadata.example.testbed_3d]
|
||||||
hidden = true
|
hidden = true
|
||||||
|
|
||||||
|
[[example]]
|
||||||
|
name = "testbed_ui"
|
||||||
|
path = "examples/testbed/ui.rs"
|
||||||
|
doc-scrape-examples = true
|
||||||
|
|
||||||
|
[package.metadata.example.testbed_ui]
|
||||||
|
hidden = true
|
||||||
|
|
||||||
[[example]]
|
[[example]]
|
||||||
name = "testbed_ui_layout_rounding"
|
name = "testbed_ui_layout_rounding"
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
#![expect(dead_code, reason = "Many fields are unused/unread as they are just for benchmarking purposes.")]
|
||||||
|
|
||||||
use criterion::criterion_main;
|
use criterion::criterion_main;
|
||||||
|
|
||||||
mod components;
|
mod components;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use bevy::prelude::*;
|
use bevy_ecs::prelude::*;
|
||||||
|
|
||||||
#[derive(Component)]
|
#[derive(Component, Clone)]
|
||||||
struct A(f32);
|
struct A(f32);
|
||||||
#[derive(Component)]
|
#[derive(Component)]
|
||||||
struct B(f32);
|
struct B(f32);
|
||||||
|
@ -12,19 +12,18 @@ impl Benchmark {
|
||||||
let mut world = World::default();
|
let mut world = World::default();
|
||||||
|
|
||||||
let entities = world
|
let entities = world
|
||||||
.spawn_batch((0..10000).map(|_| A(0.0)))
|
.spawn_batch(core::iter::repeat(A(0.)).take(10000))
|
||||||
.collect::<Vec<_>>();
|
.collect();
|
||||||
|
|
||||||
Self(world, entities)
|
Self(world, entities)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run(&mut self) {
|
pub fn run(&mut self) {
|
||||||
for entity in &self.1 {
|
for entity in &self.1 {
|
||||||
self.0.insert_one(*entity, B(0.0)).unwrap();
|
self.0.entity_mut(*entity).insert(B(0.));
|
||||||
}
|
}
|
||||||
|
|
||||||
for entity in &self.1 {
|
for entity in &self.1 {
|
||||||
self.0.remove_one::<B>(*entity).unwrap();
|
self.0.entity_mut(*entity).remove::<B>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ mod add_remove_big_table;
|
||||||
mod add_remove_sparse_set;
|
mod add_remove_sparse_set;
|
||||||
mod add_remove_table;
|
mod add_remove_table;
|
||||||
mod add_remove_very_big_table;
|
mod add_remove_very_big_table;
|
||||||
|
mod add_remove;
|
||||||
mod archetype_updates;
|
mod archetype_updates;
|
||||||
mod insert_simple;
|
mod insert_simple;
|
||||||
mod insert_simple_unbatched;
|
mod insert_simple_unbatched;
|
||||||
|
|
|
@ -6,13 +6,18 @@
|
||||||
)]
|
)]
|
||||||
|
|
||||||
//! Accessibility for Bevy
|
//! Accessibility for Bevy
|
||||||
|
//!
|
||||||
|
//! As of Bevy version 0.15 `accesskit` is no longer re-exported from this crate.
|
||||||
|
//!
|
||||||
|
//! If you need to use `accesskit`, you will need to add it as a separate dependency in your `Cargo.toml`.
|
||||||
|
//!
|
||||||
|
//! Make sure to use the same version of `accesskit` as Bevy.
|
||||||
|
|
||||||
extern crate alloc;
|
extern crate alloc;
|
||||||
|
|
||||||
use alloc::sync::Arc;
|
use alloc::sync::Arc;
|
||||||
use core::sync::atomic::{AtomicBool, Ordering};
|
use core::sync::atomic::{AtomicBool, Ordering};
|
||||||
|
|
||||||
pub use accesskit;
|
|
||||||
use accesskit::Node;
|
use accesskit::Node;
|
||||||
use bevy_app::Plugin;
|
use bevy_app::Plugin;
|
||||||
use bevy_derive::{Deref, DerefMut};
|
use bevy_derive::{Deref, DerefMut};
|
||||||
|
|
|
@ -746,8 +746,16 @@ impl WeightsCurveEvaluator {
|
||||||
None => {
|
None => {
|
||||||
self.blend_register_blend_weight = Some(weight_to_blend);
|
self.blend_register_blend_weight = Some(weight_to_blend);
|
||||||
self.blend_register_morph_target_weights.clear();
|
self.blend_register_morph_target_weights.clear();
|
||||||
|
|
||||||
|
// In the additive case, the values pushed onto the blend register need
|
||||||
|
// to be scaled by the weight.
|
||||||
|
if additive {
|
||||||
|
self.blend_register_morph_target_weights
|
||||||
|
.extend(stack_iter.map(|m| m * weight_to_blend));
|
||||||
|
} else {
|
||||||
self.blend_register_morph_target_weights.extend(stack_iter);
|
self.blend_register_morph_target_weights.extend(stack_iter);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Some(ref mut current_weight) => {
|
Some(ref mut current_weight) => {
|
||||||
*current_weight += weight_to_blend;
|
*current_weight += weight_to_blend;
|
||||||
|
@ -877,7 +885,9 @@ where
|
||||||
} = self.stack.pop().unwrap();
|
} = self.stack.pop().unwrap();
|
||||||
|
|
||||||
match self.blend_register.take() {
|
match self.blend_register.take() {
|
||||||
None => self.blend_register = Some((value_to_blend, weight_to_blend)),
|
None => {
|
||||||
|
self.initialize_blend_register(value_to_blend, weight_to_blend, additive);
|
||||||
|
}
|
||||||
Some((mut current_value, mut current_weight)) => {
|
Some((mut current_value, mut current_weight)) => {
|
||||||
current_weight += weight_to_blend;
|
current_weight += weight_to_blend;
|
||||||
|
|
||||||
|
@ -912,6 +922,22 @@ where
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn initialize_blend_register(&mut self, value: A, weight: f32, additive: bool) {
|
||||||
|
if additive {
|
||||||
|
let scaled_value = A::blend(
|
||||||
|
[BlendInput {
|
||||||
|
weight,
|
||||||
|
value,
|
||||||
|
additive: true,
|
||||||
|
}]
|
||||||
|
.into_iter(),
|
||||||
|
);
|
||||||
|
self.blend_register = Some((scaled_value, weight));
|
||||||
|
} else {
|
||||||
|
self.blend_register = Some((value, weight));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn push_blend_register(
|
fn push_blend_register(
|
||||||
&mut self,
|
&mut self,
|
||||||
weight: f32,
|
weight: f32,
|
||||||
|
|
|
@ -217,9 +217,8 @@ pub enum AnimationNodeType {
|
||||||
/// additively.
|
/// additively.
|
||||||
///
|
///
|
||||||
/// The weights of all the children of this node are *not* normalized to
|
/// The weights of all the children of this node are *not* normalized to
|
||||||
/// 1.0. Rather, the first child is used as a base, ignoring its weight,
|
/// 1.0. Rather, each child is multiplied by its respective weight and
|
||||||
/// while the others are multiplied by their respective weights and then
|
/// added in sequence.
|
||||||
/// added in sequence to the base.
|
|
||||||
///
|
///
|
||||||
/// Add nodes are primarily useful for superimposing an animation for a
|
/// Add nodes are primarily useful for superimposing an animation for a
|
||||||
/// portion of a rig on top of the main animation. For example, an add node
|
/// portion of a rig on top of the main animation. For example, an add node
|
||||||
|
|
0
crates/bevy_animation/src/lib.rs
Executable file → Normal file
0
crates/bevy_animation/src/lib.rs
Executable file → Normal file
|
@ -264,6 +264,17 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl AudioPlayer<AudioSource> {
|
||||||
|
/// Creates a new [`AudioPlayer`] with the given [`Handle<AudioSource>`].
|
||||||
|
///
|
||||||
|
/// For convenience reasons, this hard-codes the [`AudioSource`] type. If you want to
|
||||||
|
/// initialize an [`AudioPlayer`] with a different type, just initialize it directly using normal
|
||||||
|
/// tuple struct syntax.
|
||||||
|
pub fn new(source: Handle<AudioSource>) -> Self {
|
||||||
|
Self(source)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Bundle for playing a sound.
|
/// Bundle for playing a sound.
|
||||||
///
|
///
|
||||||
/// Insert this bundle onto an entity to trigger a sound source to begin playing.
|
/// Insert this bundle onto an entity to trigger a sound source to begin playing.
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
//!
|
//!
|
||||||
//! fn play_background_audio(asset_server: Res<AssetServer>, mut commands: Commands) {
|
//! fn play_background_audio(asset_server: Res<AssetServer>, mut commands: Commands) {
|
||||||
//! commands.spawn((
|
//! commands.spawn((
|
||||||
//! AudioPlayer::<AudioSource>(asset_server.load("background_audio.ogg")),
|
//! AudioPlayer::new(asset_server.load("background_audio.ogg")),
|
||||||
//! PlaybackSettings::LOOP,
|
//! PlaybackSettings::LOOP,
|
||||||
//! ));
|
//! ));
|
||||||
//! }
|
//! }
|
||||||
|
|
|
@ -3,11 +3,11 @@ use super::compensation_curve::{
|
||||||
};
|
};
|
||||||
use bevy_asset::prelude::*;
|
use bevy_asset::prelude::*;
|
||||||
use bevy_ecs::prelude::*;
|
use bevy_ecs::prelude::*;
|
||||||
|
use bevy_image::Image;
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
globals::GlobalsUniform,
|
globals::GlobalsUniform,
|
||||||
render_resource::{binding_types::*, *},
|
render_resource::{binding_types::*, *},
|
||||||
renderer::RenderDevice,
|
renderer::RenderDevice,
|
||||||
texture::Image,
|
|
||||||
view::ViewUniform,
|
view::ViewUniform,
|
||||||
};
|
};
|
||||||
use core::num::NonZero;
|
use core::num::NonZero;
|
||||||
|
@ -89,6 +89,7 @@ impl SpecializedComputePipeline for AutoExposurePipeline {
|
||||||
AutoExposurePass::Average => "compute_average".into(),
|
AutoExposurePass::Average => "compute_average".into(),
|
||||||
},
|
},
|
||||||
push_constant_ranges: vec![],
|
push_constant_ranges: vec![],
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,8 +3,9 @@ use core::ops::RangeInclusive;
|
||||||
use super::compensation_curve::AutoExposureCompensationCurve;
|
use super::compensation_curve::AutoExposureCompensationCurve;
|
||||||
use bevy_asset::Handle;
|
use bevy_asset::Handle;
|
||||||
use bevy_ecs::{prelude::Component, reflect::ReflectComponent};
|
use bevy_ecs::{prelude::Component, reflect::ReflectComponent};
|
||||||
|
use bevy_image::Image;
|
||||||
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
||||||
use bevy_render::{extract_component::ExtractComponent, texture::Image};
|
use bevy_render::extract_component::ExtractComponent;
|
||||||
use bevy_utils::default;
|
use bevy_utils::default;
|
||||||
|
|
||||||
/// Component that enables auto exposure for an HDR-enabled 2d or 3d camera.
|
/// Component that enables auto exposure for an HDR-enabled 2d or 3d camera.
|
||||||
|
|
|
@ -98,6 +98,7 @@ impl SpecializedRenderPipeline for BlitPipeline {
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
push_constant_ranges: Vec::new(),
|
push_constant_ranges: Vec::new(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,6 +127,7 @@ impl SpecializedRenderPipeline for BloomDownsamplingPipeline {
|
||||||
depth_stencil: None,
|
depth_stencil: None,
|
||||||
multisample: MultisampleState::default(),
|
multisample: MultisampleState::default(),
|
||||||
push_constant_ranges: Vec::new(),
|
push_constant_ranges: Vec::new(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,6 +124,7 @@ impl SpecializedRenderPipeline for BloomUpsamplingPipeline {
|
||||||
depth_stencil: None,
|
depth_stencil: None,
|
||||||
multisample: MultisampleState::default(),
|
multisample: MultisampleState::default(),
|
||||||
push_constant_ranges: Vec::new(),
|
push_constant_ranges: Vec::new(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ use crate::{
|
||||||
use bevy_app::prelude::*;
|
use bevy_app::prelude::*;
|
||||||
use bevy_asset::{load_internal_asset, Handle};
|
use bevy_asset::{load_internal_asset, Handle};
|
||||||
use bevy_ecs::{prelude::*, query::QueryItem};
|
use bevy_ecs::{prelude::*, query::QueryItem};
|
||||||
|
use bevy_image::BevyDefault as _;
|
||||||
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
extract_component::{ExtractComponent, ExtractComponentPlugin, UniformComponentPlugin},
|
extract_component::{ExtractComponent, ExtractComponentPlugin, UniformComponentPlugin},
|
||||||
|
@ -16,7 +17,6 @@ use bevy_render::{
|
||||||
*,
|
*,
|
||||||
},
|
},
|
||||||
renderer::RenderDevice,
|
renderer::RenderDevice,
|
||||||
texture::BevyDefault,
|
|
||||||
view::{ExtractedView, ViewTarget},
|
view::{ExtractedView, ViewTarget},
|
||||||
Render, RenderApp, RenderSet,
|
Render, RenderApp, RenderSet,
|
||||||
};
|
};
|
||||||
|
@ -233,6 +233,7 @@ impl SpecializedRenderPipeline for CasPipeline {
|
||||||
depth_stencil: None,
|
depth_stencil: None,
|
||||||
multisample: MultisampleState::default(),
|
multisample: MultisampleState::default(),
|
||||||
push_constant_ranges: Vec::new(),
|
push_constant_ranges: Vec::new(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,14 +65,15 @@ pub const DEPTH_TEXTURE_SAMPLING_SUPPORTED: bool = true;
|
||||||
|
|
||||||
use core::ops::Range;
|
use core::ops::Range;
|
||||||
|
|
||||||
use bevy_asset::{AssetId, UntypedAssetId};
|
|
||||||
use bevy_color::LinearRgba;
|
|
||||||
pub use camera_3d::*;
|
pub use camera_3d::*;
|
||||||
pub use main_opaque_pass_3d_node::*;
|
pub use main_opaque_pass_3d_node::*;
|
||||||
pub use main_transparent_pass_3d_node::*;
|
pub use main_transparent_pass_3d_node::*;
|
||||||
|
|
||||||
use bevy_app::{App, Plugin, PostUpdate};
|
use bevy_app::{App, Plugin, PostUpdate};
|
||||||
|
use bevy_asset::{AssetId, UntypedAssetId};
|
||||||
|
use bevy_color::LinearRgba;
|
||||||
use bevy_ecs::{entity::EntityHashSet, prelude::*};
|
use bevy_ecs::{entity::EntityHashSet, prelude::*};
|
||||||
|
use bevy_image::{BevyDefault, Image};
|
||||||
use bevy_math::FloatOrd;
|
use bevy_math::FloatOrd;
|
||||||
use bevy_render::sync_world::MainEntity;
|
use bevy_render::sync_world::MainEntity;
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
|
@ -91,7 +92,7 @@ use bevy_render::{
|
||||||
},
|
},
|
||||||
renderer::RenderDevice,
|
renderer::RenderDevice,
|
||||||
sync_world::RenderEntity,
|
sync_world::RenderEntity,
|
||||||
texture::{BevyDefault, ColorAttachment, Image, TextureCache},
|
texture::{ColorAttachment, TextureCache},
|
||||||
view::{ExtractedView, ViewDepthTexture, ViewTarget},
|
view::{ExtractedView, ViewDepthTexture, ViewTarget},
|
||||||
Extract, ExtractSchedule, Render, RenderApp, RenderSet,
|
Extract, ExtractSchedule, Render, RenderApp, RenderSet,
|
||||||
};
|
};
|
||||||
|
|
|
@ -160,6 +160,7 @@ impl FromWorld for CopyDeferredLightingIdPipeline {
|
||||||
}),
|
}),
|
||||||
multisample: MultisampleState::default(),
|
multisample: MultisampleState::default(),
|
||||||
push_constant_ranges: vec![],
|
push_constant_ranges: vec![],
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
|
|
@ -26,6 +26,7 @@ use bevy_ecs::{
|
||||||
system::{lifetimeless::Read, Commands, Query, Res, ResMut, Resource},
|
system::{lifetimeless::Read, Commands, Query, Res, ResMut, Resource},
|
||||||
world::{FromWorld, World},
|
world::{FromWorld, World},
|
||||||
};
|
};
|
||||||
|
use bevy_image::BevyDefault as _;
|
||||||
use bevy_math::ops;
|
use bevy_math::ops;
|
||||||
use bevy_reflect::{prelude::ReflectDefault, Reflect};
|
use bevy_reflect::{prelude::ReflectDefault, Reflect};
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
|
@ -48,7 +49,7 @@ use bevy_render::{
|
||||||
renderer::{RenderContext, RenderDevice},
|
renderer::{RenderContext, RenderDevice},
|
||||||
sync_component::SyncComponentPlugin,
|
sync_component::SyncComponentPlugin,
|
||||||
sync_world::RenderEntity,
|
sync_world::RenderEntity,
|
||||||
texture::{BevyDefault, CachedTexture, TextureCache},
|
texture::{CachedTexture, TextureCache},
|
||||||
view::{
|
view::{
|
||||||
prepare_view_targets, ExtractedView, Msaa, ViewDepthTexture, ViewTarget, ViewUniform,
|
prepare_view_targets, ExtractedView, Msaa, ViewDepthTexture, ViewTarget, ViewUniform,
|
||||||
ViewUniformOffset, ViewUniforms,
|
ViewUniformOffset, ViewUniforms,
|
||||||
|
@ -806,6 +807,7 @@ impl SpecializedRenderPipeline for DepthOfFieldPipeline {
|
||||||
},
|
},
|
||||||
targets,
|
targets,
|
||||||
}),
|
}),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ use crate::{
|
||||||
use bevy_app::prelude::*;
|
use bevy_app::prelude::*;
|
||||||
use bevy_asset::{load_internal_asset, Handle};
|
use bevy_asset::{load_internal_asset, Handle};
|
||||||
use bevy_ecs::prelude::*;
|
use bevy_ecs::prelude::*;
|
||||||
|
use bevy_image::BevyDefault as _;
|
||||||
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
extract_component::{ExtractComponent, ExtractComponentPlugin},
|
extract_component::{ExtractComponent, ExtractComponentPlugin},
|
||||||
|
@ -16,7 +17,6 @@ use bevy_render::{
|
||||||
*,
|
*,
|
||||||
},
|
},
|
||||||
renderer::RenderDevice,
|
renderer::RenderDevice,
|
||||||
texture::BevyDefault,
|
|
||||||
view::{ExtractedView, ViewTarget},
|
view::{ExtractedView, ViewTarget},
|
||||||
Render, RenderApp, RenderSet,
|
Render, RenderApp, RenderSet,
|
||||||
};
|
};
|
||||||
|
@ -196,6 +196,7 @@ impl SpecializedRenderPipeline for FxaaPipeline {
|
||||||
depth_stencil: None,
|
depth_stencil: None,
|
||||||
multisample: MultisampleState::default(),
|
multisample: MultisampleState::default(),
|
||||||
push_constant_ranges: Vec::new(),
|
push_constant_ranges: Vec::new(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ use bevy_ecs::{
|
||||||
system::{Commands, Query, Res, ResMut, Resource},
|
system::{Commands, Query, Res, ResMut, Resource},
|
||||||
world::FromWorld,
|
world::FromWorld,
|
||||||
};
|
};
|
||||||
|
use bevy_image::BevyDefault as _;
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
globals::GlobalsUniform,
|
globals::GlobalsUniform,
|
||||||
render_resource::{
|
render_resource::{
|
||||||
|
@ -19,7 +20,6 @@ use bevy_render::{
|
||||||
TextureFormat, TextureSampleType,
|
TextureFormat, TextureSampleType,
|
||||||
},
|
},
|
||||||
renderer::RenderDevice,
|
renderer::RenderDevice,
|
||||||
texture::BevyDefault,
|
|
||||||
view::{ExtractedView, Msaa, ViewTarget},
|
view::{ExtractedView, Msaa, ViewTarget},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -141,6 +141,7 @@ impl SpecializedRenderPipeline for MotionBlurPipeline {
|
||||||
depth_stencil: None,
|
depth_stencil: None,
|
||||||
multisample: MultisampleState::default(),
|
multisample: MultisampleState::default(),
|
||||||
push_constant_ranges: vec![],
|
push_constant_ranges: vec![],
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ use bevy_ecs::{
|
||||||
entity::{EntityHashMap, EntityHashSet},
|
entity::{EntityHashMap, EntityHashSet},
|
||||||
prelude::*,
|
prelude::*,
|
||||||
};
|
};
|
||||||
|
use bevy_image::BevyDefault as _;
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
render_resource::{
|
render_resource::{
|
||||||
binding_types::{storage_buffer_sized, texture_depth_2d, uniform_buffer},
|
binding_types::{storage_buffer_sized, texture_depth_2d, uniform_buffer},
|
||||||
|
@ -18,7 +19,6 @@ use bevy_render::{
|
||||||
Shader, ShaderDefVal, ShaderStages, TextureFormat,
|
Shader, ShaderDefVal, ShaderStages, TextureFormat,
|
||||||
},
|
},
|
||||||
renderer::{RenderAdapter, RenderDevice},
|
renderer::{RenderAdapter, RenderDevice},
|
||||||
texture::BevyDefault,
|
|
||||||
view::{ExtractedView, ViewTarget, ViewUniform, ViewUniforms},
|
view::{ExtractedView, ViewTarget, ViewUniform, ViewUniforms},
|
||||||
Render, RenderApp, RenderSet,
|
Render, RenderApp, RenderSet,
|
||||||
};
|
};
|
||||||
|
@ -208,6 +208,7 @@ fn specialize_oit_resolve_pipeline(
|
||||||
depth_stencil: None,
|
depth_stencil: None,
|
||||||
multisample: MultisampleState::default(),
|
multisample: MultisampleState::default(),
|
||||||
push_constant_ranges: vec![],
|
push_constant_ranges: vec![],
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ use bevy_ecs::{
|
||||||
system::{lifetimeless::Read, Commands, Query, Res, ResMut, Resource},
|
system::{lifetimeless::Read, Commands, Query, Res, ResMut, Resource},
|
||||||
world::{FromWorld, World},
|
world::{FromWorld, World},
|
||||||
};
|
};
|
||||||
|
use bevy_image::{BevyDefault, Image};
|
||||||
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
camera::Camera,
|
camera::Camera,
|
||||||
|
@ -32,7 +33,7 @@ use bevy_render::{
|
||||||
TextureDimension, TextureFormat, TextureSampleType,
|
TextureDimension, TextureFormat, TextureSampleType,
|
||||||
},
|
},
|
||||||
renderer::{RenderContext, RenderDevice, RenderQueue},
|
renderer::{RenderContext, RenderDevice, RenderQueue},
|
||||||
texture::{BevyDefault, GpuImage, Image},
|
texture::GpuImage,
|
||||||
view::{ExtractedView, ViewTarget},
|
view::{ExtractedView, ViewTarget},
|
||||||
Render, RenderApp, RenderSet,
|
Render, RenderApp, RenderSet,
|
||||||
};
|
};
|
||||||
|
@ -344,6 +345,7 @@ impl SpecializedRenderPipeline for PostProcessingPipeline {
|
||||||
depth_stencil: None,
|
depth_stencil: None,
|
||||||
multisample: default(),
|
multisample: default(),
|
||||||
push_constant_ranges: vec![],
|
push_constant_ranges: vec![],
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ use bevy_ecs::{
|
||||||
schedule::IntoSystemConfigs,
|
schedule::IntoSystemConfigs,
|
||||||
system::{Commands, Query, Res, ResMut, Resource},
|
system::{Commands, Query, Res, ResMut, Resource},
|
||||||
};
|
};
|
||||||
|
use bevy_image::{BevyDefault, Image};
|
||||||
use bevy_math::{Mat4, Quat};
|
use bevy_math::{Mat4, Quat};
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
camera::Exposure,
|
camera::Exposure,
|
||||||
|
@ -19,7 +20,7 @@ use bevy_render::{
|
||||||
*,
|
*,
|
||||||
},
|
},
|
||||||
renderer::RenderDevice,
|
renderer::RenderDevice,
|
||||||
texture::{BevyDefault, GpuImage, Image},
|
texture::GpuImage,
|
||||||
view::{ExtractedView, Msaa, ViewTarget, ViewUniform, ViewUniforms},
|
view::{ExtractedView, Msaa, ViewTarget, ViewUniform, ViewUniforms},
|
||||||
Render, RenderApp, RenderSet,
|
Render, RenderApp, RenderSet,
|
||||||
};
|
};
|
||||||
|
@ -233,6 +234,7 @@ impl SpecializedRenderPipeline for SkyboxPipeline {
|
||||||
write_mask: ColorWrites::ALL,
|
write_mask: ColorWrites::ALL,
|
||||||
})],
|
})],
|
||||||
}),
|
}),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,6 +105,7 @@ impl SpecializedRenderPipeline for SkyboxPrepassPipeline {
|
||||||
entry_point: "fragment".into(),
|
entry_point: "fragment".into(),
|
||||||
targets: prepass_target_descriptors(key.normal_prepass, true, false),
|
targets: prepass_target_descriptors(key.normal_prepass, true, false),
|
||||||
}),
|
}),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,10 @@
|
||||||
//!
|
//!
|
||||||
//! [SMAA]: https://www.iryoku.com/smaa/
|
//! [SMAA]: https://www.iryoku.com/smaa/
|
||||||
|
|
||||||
|
use crate::{
|
||||||
|
core_2d::graph::{Core2d, Node2d},
|
||||||
|
core_3d::graph::{Core3d, Node3d},
|
||||||
|
};
|
||||||
use bevy_app::{App, Plugin};
|
use bevy_app::{App, Plugin};
|
||||||
#[cfg(feature = "smaa_luts")]
|
#[cfg(feature = "smaa_luts")]
|
||||||
use bevy_asset::load_internal_binary_asset;
|
use bevy_asset::load_internal_binary_asset;
|
||||||
|
@ -44,6 +48,7 @@ use bevy_ecs::{
|
||||||
system::{lifetimeless::Read, Commands, Query, Res, ResMut, Resource},
|
system::{lifetimeless::Read, Commands, Query, Res, ResMut, Resource},
|
||||||
world::{FromWorld, World},
|
world::{FromWorld, World},
|
||||||
};
|
};
|
||||||
|
use bevy_image::{BevyDefault, Image};
|
||||||
use bevy_math::{vec4, Vec4};
|
use bevy_math::{vec4, Vec4};
|
||||||
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
|
@ -67,24 +72,12 @@ use bevy_render::{
|
||||||
VertexState,
|
VertexState,
|
||||||
},
|
},
|
||||||
renderer::{RenderContext, RenderDevice, RenderQueue},
|
renderer::{RenderContext, RenderDevice, RenderQueue},
|
||||||
texture::{BevyDefault, CachedTexture, GpuImage, Image, TextureCache},
|
texture::{CachedTexture, GpuImage, TextureCache},
|
||||||
view::{ExtractedView, ViewTarget},
|
view::{ExtractedView, ViewTarget},
|
||||||
Render, RenderApp, RenderSet,
|
Render, RenderApp, RenderSet,
|
||||||
};
|
};
|
||||||
#[cfg(feature = "smaa_luts")]
|
|
||||||
use bevy_render::{
|
|
||||||
render_asset::RenderAssetUsages,
|
|
||||||
texture::{CompressedImageFormats, ImageFormat, ImageSampler, ImageType},
|
|
||||||
};
|
|
||||||
use bevy_utils::prelude::default;
|
use bevy_utils::prelude::default;
|
||||||
|
|
||||||
#[cfg(not(feature = "smaa_luts"))]
|
|
||||||
use crate::tonemapping::lut_placeholder;
|
|
||||||
use crate::{
|
|
||||||
core_2d::graph::{Core2d, Node2d},
|
|
||||||
core_3d::graph::{Core3d, Node3d},
|
|
||||||
};
|
|
||||||
|
|
||||||
/// The handle of the `smaa.wgsl` shader.
|
/// The handle of the `smaa.wgsl` shader.
|
||||||
const SMAA_SHADER_HANDLE: Handle<Shader> = Handle::weak_from_u128(12247928498010601081);
|
const SMAA_SHADER_HANDLE: Handle<Shader> = Handle::weak_from_u128(12247928498010601081);
|
||||||
/// The handle of the area LUT, a KTX2 format texture that SMAA uses internally.
|
/// The handle of the area LUT, a KTX2 format texture that SMAA uses internally.
|
||||||
|
@ -306,11 +299,11 @@ impl Plugin for SmaaPlugin {
|
||||||
#[cfg(all(debug_assertions, feature = "dds"))]
|
#[cfg(all(debug_assertions, feature = "dds"))]
|
||||||
"SMAAAreaLUT".to_owned(),
|
"SMAAAreaLUT".to_owned(),
|
||||||
bytes,
|
bytes,
|
||||||
ImageType::Format(ImageFormat::Ktx2),
|
bevy_image::ImageType::Format(bevy_image::ImageFormat::Ktx2),
|
||||||
CompressedImageFormats::NONE,
|
bevy_image::CompressedImageFormats::NONE,
|
||||||
false,
|
false,
|
||||||
ImageSampler::Default,
|
bevy_image::ImageSampler::Default,
|
||||||
RenderAssetUsages::RENDER_WORLD,
|
bevy_asset::RenderAssetUsages::RENDER_WORLD,
|
||||||
)
|
)
|
||||||
.expect("Failed to load SMAA area LUT")
|
.expect("Failed to load SMAA area LUT")
|
||||||
);
|
);
|
||||||
|
@ -324,11 +317,11 @@ impl Plugin for SmaaPlugin {
|
||||||
#[cfg(all(debug_assertions, feature = "dds"))]
|
#[cfg(all(debug_assertions, feature = "dds"))]
|
||||||
"SMAASearchLUT".to_owned(),
|
"SMAASearchLUT".to_owned(),
|
||||||
bytes,
|
bytes,
|
||||||
ImageType::Format(ImageFormat::Ktx2),
|
bevy_image::ImageType::Format(bevy_image::ImageFormat::Ktx2),
|
||||||
CompressedImageFormats::NONE,
|
bevy_image::CompressedImageFormats::NONE,
|
||||||
false,
|
false,
|
||||||
ImageSampler::Default,
|
bevy_image::ImageSampler::Default,
|
||||||
RenderAssetUsages::RENDER_WORLD,
|
bevy_asset::RenderAssetUsages::RENDER_WORLD,
|
||||||
)
|
)
|
||||||
.expect("Failed to load SMAA search LUT")
|
.expect("Failed to load SMAA search LUT")
|
||||||
);
|
);
|
||||||
|
@ -512,6 +505,7 @@ impl SpecializedRenderPipeline for SmaaEdgeDetectionPipeline {
|
||||||
bias: default(),
|
bias: default(),
|
||||||
}),
|
}),
|
||||||
multisample: MultisampleState::default(),
|
multisample: MultisampleState::default(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -571,6 +565,7 @@ impl SpecializedRenderPipeline for SmaaBlendingWeightCalculationPipeline {
|
||||||
bias: default(),
|
bias: default(),
|
||||||
}),
|
}),
|
||||||
multisample: MultisampleState::default(),
|
multisample: MultisampleState::default(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -607,6 +602,7 @@ impl SpecializedRenderPipeline for SmaaNeighborhoodBlendingPipeline {
|
||||||
primitive: PrimitiveState::default(),
|
primitive: PrimitiveState::default(),
|
||||||
depth_stencil: None,
|
depth_stencil: None,
|
||||||
multisample: MultisampleState::default(),
|
multisample: MultisampleState::default(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ use bevy_ecs::{
|
||||||
system::{Commands, Query, Res, ResMut, Resource},
|
system::{Commands, Query, Res, ResMut, Resource},
|
||||||
world::{FromWorld, World},
|
world::{FromWorld, World},
|
||||||
};
|
};
|
||||||
|
use bevy_image::BevyDefault as _;
|
||||||
use bevy_math::vec2;
|
use bevy_math::vec2;
|
||||||
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
|
@ -34,7 +35,7 @@ use bevy_render::{
|
||||||
renderer::{RenderContext, RenderDevice},
|
renderer::{RenderContext, RenderDevice},
|
||||||
sync_component::SyncComponentPlugin,
|
sync_component::SyncComponentPlugin,
|
||||||
sync_world::RenderEntity,
|
sync_world::RenderEntity,
|
||||||
texture::{BevyDefault, CachedTexture, TextureCache},
|
texture::{CachedTexture, TextureCache},
|
||||||
view::{ExtractedView, Msaa, ViewTarget},
|
view::{ExtractedView, Msaa, ViewTarget},
|
||||||
ExtractSchedule, MainWorld, Render, RenderApp, RenderSet,
|
ExtractSchedule, MainWorld, Render, RenderApp, RenderSet,
|
||||||
};
|
};
|
||||||
|
@ -355,6 +356,7 @@ impl SpecializedRenderPipeline for TaaPipeline {
|
||||||
depth_stencil: None,
|
depth_stencil: None,
|
||||||
multisample: MultisampleState::default(),
|
multisample: MultisampleState::default(),
|
||||||
push_constant_ranges: Vec::new(),
|
push_constant_ranges: Vec::new(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ use crate::fullscreen_vertex_shader::fullscreen_shader_vertex_state;
|
||||||
use bevy_app::prelude::*;
|
use bevy_app::prelude::*;
|
||||||
use bevy_asset::{load_internal_asset, Assets, Handle};
|
use bevy_asset::{load_internal_asset, Assets, Handle};
|
||||||
use bevy_ecs::prelude::*;
|
use bevy_ecs::prelude::*;
|
||||||
|
use bevy_image::{CompressedImageFormats, Image, ImageSampler, ImageType};
|
||||||
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
camera::Camera,
|
camera::Camera,
|
||||||
|
@ -13,7 +14,7 @@ use bevy_render::{
|
||||||
*,
|
*,
|
||||||
},
|
},
|
||||||
renderer::RenderDevice,
|
renderer::RenderDevice,
|
||||||
texture::{CompressedImageFormats, FallbackImage, GpuImage, Image, ImageSampler, ImageType},
|
texture::{FallbackImage, GpuImage},
|
||||||
view::{ExtractedView, ViewTarget, ViewUniform},
|
view::{ExtractedView, ViewTarget, ViewUniform},
|
||||||
Render, RenderApp, RenderSet,
|
Render, RenderApp, RenderSet,
|
||||||
};
|
};
|
||||||
|
@ -307,6 +308,7 @@ impl SpecializedRenderPipeline for TonemappingPipeline {
|
||||||
depth_stencil: None,
|
depth_stencil: None,
|
||||||
multisample: MultisampleState::default(),
|
multisample: MultisampleState::default(),
|
||||||
push_constant_ranges: Vec::new(),
|
push_constant_ranges: Vec::new(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -432,14 +434,14 @@ pub fn get_lut_bind_group_layout_entries() -> [BindGroupLayoutEntryBuilder; 2] {
|
||||||
// allow(dead_code) so it doesn't complain when the tonemapping_luts feature is disabled
|
// allow(dead_code) so it doesn't complain when the tonemapping_luts feature is disabled
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
fn setup_tonemapping_lut_image(bytes: &[u8], image_type: ImageType) -> Image {
|
fn setup_tonemapping_lut_image(bytes: &[u8], image_type: ImageType) -> Image {
|
||||||
let image_sampler = ImageSampler::Descriptor(bevy_render::texture::ImageSamplerDescriptor {
|
let image_sampler = ImageSampler::Descriptor(bevy_image::ImageSamplerDescriptor {
|
||||||
label: Some("Tonemapping LUT sampler".to_string()),
|
label: Some("Tonemapping LUT sampler".to_string()),
|
||||||
address_mode_u: bevy_render::texture::ImageAddressMode::ClampToEdge,
|
address_mode_u: bevy_image::ImageAddressMode::ClampToEdge,
|
||||||
address_mode_v: bevy_render::texture::ImageAddressMode::ClampToEdge,
|
address_mode_v: bevy_image::ImageAddressMode::ClampToEdge,
|
||||||
address_mode_w: bevy_render::texture::ImageAddressMode::ClampToEdge,
|
address_mode_w: bevy_image::ImageAddressMode::ClampToEdge,
|
||||||
mag_filter: bevy_render::texture::ImageFilterMode::Linear,
|
mag_filter: bevy_image::ImageFilterMode::Linear,
|
||||||
min_filter: bevy_render::texture::ImageFilterMode::Linear,
|
min_filter: bevy_image::ImageFilterMode::Linear,
|
||||||
mipmap_filter: bevy_render::texture::ImageFilterMode::Linear,
|
mipmap_filter: bevy_image::ImageFilterMode::Linear,
|
||||||
..default()
|
..default()
|
||||||
});
|
});
|
||||||
Image::from_buffer(
|
Image::from_buffer(
|
||||||
|
|
|
@ -1512,8 +1512,11 @@ impl<'a> TickCells<'a> {
|
||||||
#[derive(Copy, Clone, Debug)]
|
#[derive(Copy, Clone, Debug)]
|
||||||
#[cfg_attr(feature = "bevy_reflect", derive(Reflect), reflect(Debug))]
|
#[cfg_attr(feature = "bevy_reflect", derive(Reflect), reflect(Debug))]
|
||||||
pub struct ComponentTicks {
|
pub struct ComponentTicks {
|
||||||
pub(crate) added: Tick,
|
/// Tick recording the time this component or resource was added.
|
||||||
pub(crate) changed: Tick,
|
pub added: Tick,
|
||||||
|
|
||||||
|
/// Tick recording the time this component or resource was most recently changed.
|
||||||
|
pub changed: Tick,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ComponentTicks {
|
impl ComponentTicks {
|
||||||
|
@ -1531,19 +1534,8 @@ impl ComponentTicks {
|
||||||
self.changed.is_newer_than(last_run, this_run)
|
self.changed.is_newer_than(last_run, this_run)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the tick recording the time this component or resource was most recently changed.
|
/// Creates a new instance with the same change tick for `added` and `changed`.
|
||||||
#[inline]
|
pub fn new(change_tick: Tick) -> Self {
|
||||||
pub fn last_changed_tick(&self) -> Tick {
|
|
||||||
self.changed
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns the tick recording the time this component or resource was added.
|
|
||||||
#[inline]
|
|
||||||
pub fn added_tick(&self) -> Tick {
|
|
||||||
self.added
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) fn new(change_tick: Tick) -> Self {
|
|
||||||
Self {
|
Self {
|
||||||
added: change_tick,
|
added: change_tick,
|
||||||
changed: change_tick,
|
changed: change_tick,
|
||||||
|
|
|
@ -1961,13 +1961,13 @@ pub enum ScheduleBuildError {
|
||||||
#[display("System dependencies contain cycle(s).\n{_0}")]
|
#[display("System dependencies contain cycle(s).\n{_0}")]
|
||||||
DependencyCycle(String),
|
DependencyCycle(String),
|
||||||
/// Tried to order a system (set) relative to a system set it belongs to.
|
/// Tried to order a system (set) relative to a system set it belongs to.
|
||||||
#[display("`{0}` and `{_1}` have both `in_set` and `before`-`after` relationships (these might be transitive). This combination is unsolvable as a system cannot run before or after a set it belongs to.")]
|
#[display("`{_0}` and `{_1}` have both `in_set` and `before`-`after` relationships (these might be transitive). This combination is unsolvable as a system cannot run before or after a set it belongs to.")]
|
||||||
CrossDependency(String, String),
|
CrossDependency(String, String),
|
||||||
/// Tried to order system sets that share systems.
|
/// Tried to order system sets that share systems.
|
||||||
#[display("`{0}` and `{_1}` have a `before`-`after` relationship (which may be transitive) but share systems.")]
|
#[display("`{_0}` and `{_1}` have a `before`-`after` relationship (which may be transitive) but share systems.")]
|
||||||
SetsHaveOrderButIntersect(String, String),
|
SetsHaveOrderButIntersect(String, String),
|
||||||
/// Tried to order a system (set) relative to all instances of some system function.
|
/// Tried to order a system (set) relative to all instances of some system function.
|
||||||
#[display("Tried to order against `{0}` in a schedule that has more than one `{0}` instance. `{_0}` is a `SystemTypeSet` and cannot be used for ordering if ambiguous. Use a different set without this restriction.")]
|
#[display("Tried to order against `{_0}` in a schedule that has more than one `{_0}` instance. `{_0}` is a `SystemTypeSet` and cannot be used for ordering if ambiguous. Use a different set without this restriction.")]
|
||||||
SystemTypeSetAmbiguity(String),
|
SystemTypeSetAmbiguity(String),
|
||||||
/// Systems with conflicting access have indeterminate run order.
|
/// Systems with conflicting access have indeterminate run order.
|
||||||
///
|
///
|
||||||
|
|
|
@ -20,6 +20,7 @@ bevy_sprite = { path = "../bevy_sprite", version = "0.15.0-dev", optional = true
|
||||||
bevy_app = { path = "../bevy_app", version = "0.15.0-dev" }
|
bevy_app = { path = "../bevy_app", version = "0.15.0-dev" }
|
||||||
bevy_color = { path = "../bevy_color", version = "0.15.0-dev" }
|
bevy_color = { path = "../bevy_color", version = "0.15.0-dev" }
|
||||||
bevy_ecs = { path = "../bevy_ecs", version = "0.15.0-dev" }
|
bevy_ecs = { path = "../bevy_ecs", version = "0.15.0-dev" }
|
||||||
|
bevy_image = { path = "../bevy_image", version = "0.15.0-dev" }
|
||||||
bevy_math = { path = "../bevy_math", version = "0.15.0-dev" }
|
bevy_math = { path = "../bevy_math", version = "0.15.0-dev" }
|
||||||
bevy_asset = { path = "../bevy_asset", version = "0.15.0-dev" }
|
bevy_asset = { path = "../bevy_asset", version = "0.15.0-dev" }
|
||||||
bevy_render = { path = "../bevy_render", version = "0.15.0-dev", optional = true }
|
bevy_render = { path = "../bevy_render", version = "0.15.0-dev", optional = true }
|
||||||
|
|
|
@ -13,6 +13,7 @@ use bevy_ecs::{
|
||||||
system::{Query, Res, ResMut, Resource},
|
system::{Query, Res, ResMut, Resource},
|
||||||
world::{FromWorld, World},
|
world::{FromWorld, World},
|
||||||
};
|
};
|
||||||
|
use bevy_image::BevyDefault as _;
|
||||||
use bevy_math::FloatOrd;
|
use bevy_math::FloatOrd;
|
||||||
use bevy_render::sync_world::MainEntity;
|
use bevy_render::sync_world::MainEntity;
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
|
@ -22,7 +23,6 @@ use bevy_render::{
|
||||||
ViewSortedRenderPhases,
|
ViewSortedRenderPhases,
|
||||||
},
|
},
|
||||||
render_resource::*,
|
render_resource::*,
|
||||||
texture::BevyDefault,
|
|
||||||
view::{ExtractedView, Msaa, RenderLayers, ViewTarget},
|
view::{ExtractedView, Msaa, RenderLayers, ViewTarget},
|
||||||
Render, RenderApp, RenderSet,
|
Render, RenderApp, RenderSet,
|
||||||
};
|
};
|
||||||
|
@ -161,6 +161,7 @@ impl SpecializedRenderPipeline for LineGizmoPipeline {
|
||||||
},
|
},
|
||||||
label: Some("LineGizmo Pipeline 2D".into()),
|
label: Some("LineGizmo Pipeline 2D".into()),
|
||||||
push_constant_ranges: vec![],
|
push_constant_ranges: vec![],
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -261,6 +262,7 @@ impl SpecializedRenderPipeline for LineJointGizmoPipeline {
|
||||||
},
|
},
|
||||||
label: Some("LineJointGizmo Pipeline 2D".into()),
|
label: Some("LineJointGizmo Pipeline 2D".into()),
|
||||||
push_constant_ranges: vec![],
|
push_constant_ranges: vec![],
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@ use bevy_ecs::{
|
||||||
system::{Query, Res, ResMut, Resource},
|
system::{Query, Res, ResMut, Resource},
|
||||||
world::{FromWorld, World},
|
world::{FromWorld, World},
|
||||||
};
|
};
|
||||||
|
use bevy_image::BevyDefault as _;
|
||||||
use bevy_pbr::{MeshPipeline, MeshPipelineKey, SetMeshViewBindGroup};
|
use bevy_pbr::{MeshPipeline, MeshPipelineKey, SetMeshViewBindGroup};
|
||||||
use bevy_render::sync_world::MainEntity;
|
use bevy_render::sync_world::MainEntity;
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
|
@ -26,7 +27,6 @@ use bevy_render::{
|
||||||
ViewSortedRenderPhases,
|
ViewSortedRenderPhases,
|
||||||
},
|
},
|
||||||
render_resource::*,
|
render_resource::*,
|
||||||
texture::BevyDefault,
|
|
||||||
view::{ExtractedView, Msaa, RenderLayers, ViewTarget},
|
view::{ExtractedView, Msaa, RenderLayers, ViewTarget},
|
||||||
Render, RenderApp, RenderSet,
|
Render, RenderApp, RenderSet,
|
||||||
};
|
};
|
||||||
|
@ -158,6 +158,7 @@ impl SpecializedRenderPipeline for LineGizmoPipeline {
|
||||||
},
|
},
|
||||||
label: Some("LineGizmo Pipeline".into()),
|
label: Some("LineGizmo Pipeline".into()),
|
||||||
push_constant_ranges: vec![],
|
push_constant_ranges: vec![],
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -256,6 +257,7 @@ impl SpecializedRenderPipeline for LineJointGizmoPipeline {
|
||||||
},
|
},
|
||||||
label: Some("LineJointGizmo Pipeline".into()),
|
label: Some("LineJointGizmo Pipeline".into()),
|
||||||
push_constant_ranges: vec![],
|
push_constant_ranges: vec![],
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,12 +103,12 @@ pub use loader::*;
|
||||||
use bevy_app::prelude::*;
|
use bevy_app::prelude::*;
|
||||||
use bevy_asset::{Asset, AssetApp, AssetPath, Handle};
|
use bevy_asset::{Asset, AssetApp, AssetPath, Handle};
|
||||||
use bevy_ecs::{prelude::Component, reflect::ReflectComponent};
|
use bevy_ecs::{prelude::Component, reflect::ReflectComponent};
|
||||||
|
use bevy_image::CompressedImageFormats;
|
||||||
use bevy_pbr::StandardMaterial;
|
use bevy_pbr::StandardMaterial;
|
||||||
use bevy_reflect::{std_traits::ReflectDefault, Reflect, TypePath};
|
use bevy_reflect::{std_traits::ReflectDefault, Reflect, TypePath};
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
mesh::{skinning::SkinnedMeshInverseBindposes, Mesh, MeshVertexAttribute},
|
mesh::{skinning::SkinnedMeshInverseBindposes, Mesh, MeshVertexAttribute},
|
||||||
renderer::RenderDevice,
|
renderer::RenderDevice,
|
||||||
texture::CompressedImageFormats,
|
|
||||||
};
|
};
|
||||||
use bevy_scene::Scene;
|
use bevy_scene::Scene;
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,10 @@ use bevy_ecs::{
|
||||||
world::World,
|
world::World,
|
||||||
};
|
};
|
||||||
use bevy_hierarchy::{BuildChildren, ChildBuild, WorldChildBuilder};
|
use bevy_hierarchy::{BuildChildren, ChildBuild, WorldChildBuilder};
|
||||||
|
use bevy_image::{
|
||||||
|
CompressedImageFormats, Image, ImageAddressMode, ImageFilterMode, ImageLoaderSettings,
|
||||||
|
ImageSampler, ImageSamplerDescriptor, ImageType, TextureError,
|
||||||
|
};
|
||||||
use bevy_math::{Affine2, Mat4, Vec3};
|
use bevy_math::{Affine2, Mat4, Vec3};
|
||||||
use bevy_pbr::{
|
use bevy_pbr::{
|
||||||
DirectionalLight, MeshMaterial3d, PointLight, SpotLight, StandardMaterial, UvChannel,
|
DirectionalLight, MeshMaterial3d, PointLight, SpotLight, StandardMaterial, UvChannel,
|
||||||
|
@ -31,10 +35,6 @@ use bevy_render::{
|
||||||
primitives::Aabb,
|
primitives::Aabb,
|
||||||
render_asset::RenderAssetUsages,
|
render_asset::RenderAssetUsages,
|
||||||
render_resource::{Face, PrimitiveTopology},
|
render_resource::{Face, PrimitiveTopology},
|
||||||
texture::{
|
|
||||||
CompressedImageFormats, Image, ImageAddressMode, ImageFilterMode, ImageLoaderSettings,
|
|
||||||
ImageSampler, ImageSamplerDescriptor, ImageType, TextureError,
|
|
||||||
},
|
|
||||||
view::Visibility,
|
view::Visibility,
|
||||||
};
|
};
|
||||||
use bevy_scene::Scene;
|
use bevy_scene::Scene;
|
||||||
|
|
|
@ -248,7 +248,7 @@ pub(crate) enum ConvertAttributeError {
|
||||||
"Vertex attribute {_0} has format {_1:?} but expected {_3:?} for target attribute {_2}"
|
"Vertex attribute {_0} has format {_1:?} but expected {_3:?} for target attribute {_2}"
|
||||||
)]
|
)]
|
||||||
WrongFormat(String, VertexFormat, String, VertexFormat),
|
WrongFormat(String, VertexFormat, String, VertexFormat),
|
||||||
#[display("{0} in accessor {_1}")]
|
#[display("{_0} in accessor {_1}")]
|
||||||
AccessFailed(AccessFailed, usize),
|
AccessFailed(AccessFailed, usize),
|
||||||
#[display("Unknown vertex attribute {_0}")]
|
#[display("Unknown vertex attribute {_0}")]
|
||||||
UnknownName(String),
|
UnknownName(String),
|
||||||
|
|
0
crates/bevy_hierarchy/src/lib.rs
Executable file → Normal file
0
crates/bevy_hierarchy/src/lib.rs
Executable file → Normal file
|
@ -1,3 +1,5 @@
|
||||||
|
//! [DirectDraw Surface](https://en.wikipedia.org/wiki/DirectDraw_Surface) functionality.
|
||||||
|
|
||||||
#[cfg(debug_assertions)]
|
#[cfg(debug_assertions)]
|
||||||
use bevy_utils::warn_once;
|
use bevy_utils::warn_once;
|
||||||
use ddsfile::{Caps2, D3DFormat, Dds, DxgiFormat};
|
use ddsfile::{Caps2, D3DFormat, Dds, DxgiFormat};
|
||||||
|
@ -16,7 +18,8 @@ pub fn dds_buffer_to_image(
|
||||||
is_srgb: bool,
|
is_srgb: bool,
|
||||||
) -> Result<Image, TextureError> {
|
) -> Result<Image, TextureError> {
|
||||||
let mut cursor = Cursor::new(buffer);
|
let mut cursor = Cursor::new(buffer);
|
||||||
let dds = Dds::read(&mut cursor).expect("Failed to parse DDS file");
|
let dds = Dds::read(&mut cursor)
|
||||||
|
.map_err(|error| TextureError::InvalidData(format!("Failed to parse DDS file: {error}")))?;
|
||||||
let texture_format = dds_format_to_texture_format(&dds, is_srgb)?;
|
let texture_format = dds_format_to_texture_format(&dds, is_srgb)?;
|
||||||
if !supported_compressed_formats.supports(texture_format) {
|
if !supported_compressed_formats.supports(texture_format) {
|
||||||
return Err(TextureError::UnsupportedTextureFormat(format!(
|
return Err(TextureError::UnsupportedTextureFormat(format!(
|
||||||
|
|
|
@ -14,6 +14,7 @@ use core::hash::Hash;
|
||||||
use derive_more::derive::{Display, Error, From};
|
use derive_more::derive::{Display, Error, From};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use wgpu::{Extent3d, TextureDimension, TextureFormat, TextureViewDescriptor};
|
use wgpu::{Extent3d, TextureDimension, TextureFormat, TextureViewDescriptor};
|
||||||
|
|
||||||
pub trait BevyDefault {
|
pub trait BevyDefault {
|
||||||
fn bevy_default() -> Self;
|
fn bevy_default() -> Self;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,10 @@
|
||||||
#![allow(missing_docs, reason = "Not all docs are written yet, see #3492.")]
|
#![allow(missing_docs, reason = "Not all docs are written yet, see #3492.")]
|
||||||
#![allow(unsafe_code)]
|
#![allow(unsafe_code)]
|
||||||
|
|
||||||
|
pub mod prelude {
|
||||||
|
pub use crate::{BevyDefault as _, Image, ImageFormat, TextureError};
|
||||||
|
}
|
||||||
|
|
||||||
mod image;
|
mod image;
|
||||||
pub use self::image::*;
|
pub use self::image::*;
|
||||||
#[cfg(feature = "basis-universal")]
|
#[cfg(feature = "basis-universal")]
|
||||||
|
|
|
@ -37,6 +37,8 @@ pub use bevy_gizmos as gizmos;
|
||||||
#[cfg(feature = "bevy_gltf")]
|
#[cfg(feature = "bevy_gltf")]
|
||||||
pub use bevy_gltf as gltf;
|
pub use bevy_gltf as gltf;
|
||||||
pub use bevy_hierarchy as hierarchy;
|
pub use bevy_hierarchy as hierarchy;
|
||||||
|
#[cfg(feature = "bevy_image")]
|
||||||
|
pub use bevy_image as image;
|
||||||
pub use bevy_input as input;
|
pub use bevy_input as input;
|
||||||
pub use bevy_log as log;
|
pub use bevy_log as log;
|
||||||
pub use bevy_math as math;
|
pub use bevy_math as math;
|
||||||
|
|
|
@ -6,6 +6,10 @@ pub use crate::{
|
||||||
MinimalPlugins,
|
MinimalPlugins,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#[doc(hidden)]
|
||||||
|
#[cfg(feature = "bevy_image")]
|
||||||
|
pub use crate::image::prelude::*;
|
||||||
|
|
||||||
pub use bevy_derive::{bevy_main, Deref, DerefMut};
|
pub use bevy_derive::{bevy_main, Deref, DerefMut};
|
||||||
|
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
|
|
|
@ -37,6 +37,7 @@ bevy_color = { path = "../bevy_color", version = "0.15.0-dev" }
|
||||||
bevy_core_pipeline = { path = "../bevy_core_pipeline", version = "0.15.0-dev" }
|
bevy_core_pipeline = { path = "../bevy_core_pipeline", version = "0.15.0-dev" }
|
||||||
bevy_derive = { path = "../bevy_derive", version = "0.15.0-dev" }
|
bevy_derive = { path = "../bevy_derive", version = "0.15.0-dev" }
|
||||||
bevy_ecs = { path = "../bevy_ecs", version = "0.15.0-dev" }
|
bevy_ecs = { path = "../bevy_ecs", version = "0.15.0-dev" }
|
||||||
|
bevy_image = { path = "../bevy_image", version = "0.15.0-dev" }
|
||||||
bevy_math = { path = "../bevy_math", version = "0.15.0-dev" }
|
bevy_math = { path = "../bevy_math", version = "0.15.0-dev" }
|
||||||
bevy_reflect = { path = "../bevy_reflect", version = "0.15.0-dev", features = [
|
bevy_reflect = { path = "../bevy_reflect", version = "0.15.0-dev", features = [
|
||||||
"bevy",
|
"bevy",
|
||||||
|
|
|
@ -5,6 +5,9 @@ use crate::{
|
||||||
ViewScreenSpaceReflectionsUniformOffset, TONEMAPPING_LUT_SAMPLER_BINDING_INDEX,
|
ViewScreenSpaceReflectionsUniformOffset, TONEMAPPING_LUT_SAMPLER_BINDING_INDEX,
|
||||||
TONEMAPPING_LUT_TEXTURE_BINDING_INDEX,
|
TONEMAPPING_LUT_TEXTURE_BINDING_INDEX,
|
||||||
};
|
};
|
||||||
|
use crate::{
|
||||||
|
MeshPipelineKey, ShadowFilteringMethod, ViewFogUniformOffset, ViewLightsUniformOffset,
|
||||||
|
};
|
||||||
use bevy_app::prelude::*;
|
use bevy_app::prelude::*;
|
||||||
use bevy_asset::{load_internal_asset, Handle};
|
use bevy_asset::{load_internal_asset, Handle};
|
||||||
use bevy_core_pipeline::{
|
use bevy_core_pipeline::{
|
||||||
|
@ -16,6 +19,7 @@ use bevy_core_pipeline::{
|
||||||
tonemapping::{DebandDither, Tonemapping},
|
tonemapping::{DebandDither, Tonemapping},
|
||||||
};
|
};
|
||||||
use bevy_ecs::{prelude::*, query::QueryItem};
|
use bevy_ecs::{prelude::*, query::QueryItem};
|
||||||
|
use bevy_image::BevyDefault as _;
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
extract_component::{
|
extract_component::{
|
||||||
ComponentUniforms, ExtractComponent, ExtractComponentPlugin, UniformComponentPlugin,
|
ComponentUniforms, ExtractComponent, ExtractComponentPlugin, UniformComponentPlugin,
|
||||||
|
@ -23,15 +27,10 @@ use bevy_render::{
|
||||||
render_graph::{NodeRunError, RenderGraphApp, RenderGraphContext, ViewNode, ViewNodeRunner},
|
render_graph::{NodeRunError, RenderGraphApp, RenderGraphContext, ViewNode, ViewNodeRunner},
|
||||||
render_resource::{binding_types::uniform_buffer, *},
|
render_resource::{binding_types::uniform_buffer, *},
|
||||||
renderer::{RenderContext, RenderDevice},
|
renderer::{RenderContext, RenderDevice},
|
||||||
texture::BevyDefault,
|
|
||||||
view::{ExtractedView, ViewTarget, ViewUniformOffset},
|
view::{ExtractedView, ViewTarget, ViewUniformOffset},
|
||||||
Render, RenderApp, RenderSet,
|
Render, RenderApp, RenderSet,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{
|
|
||||||
MeshPipelineKey, ShadowFilteringMethod, ViewFogUniformOffset, ViewLightsUniformOffset,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub struct DeferredPbrLightingPlugin;
|
pub struct DeferredPbrLightingPlugin;
|
||||||
|
|
||||||
pub const DEFERRED_LIGHTING_SHADER_HANDLE: Handle<Shader> =
|
pub const DEFERRED_LIGHTING_SHADER_HANDLE: Handle<Shader> =
|
||||||
|
@ -390,6 +389,7 @@ impl SpecializedRenderPipeline for DeferredLightingLayout {
|
||||||
}),
|
}),
|
||||||
multisample: MultisampleState::default(),
|
multisample: MultisampleState::default(),
|
||||||
push_constant_ranges: vec![],
|
push_constant_ranges: vec![],
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -116,6 +116,7 @@ use bevy_app::prelude::*;
|
||||||
use bevy_asset::{load_internal_asset, AssetApp, Assets, Handle};
|
use bevy_asset::{load_internal_asset, AssetApp, Assets, Handle};
|
||||||
use bevy_core_pipeline::core_3d::graph::{Core3d, Node3d};
|
use bevy_core_pipeline::core_3d::graph::{Core3d, Node3d};
|
||||||
use bevy_ecs::prelude::*;
|
use bevy_ecs::prelude::*;
|
||||||
|
use bevy_image::Image;
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
alpha::AlphaMode,
|
alpha::AlphaMode,
|
||||||
camera::{
|
camera::{
|
||||||
|
@ -128,10 +129,11 @@ use bevy_render::{
|
||||||
render_graph::RenderGraph,
|
render_graph::RenderGraph,
|
||||||
render_resource::Shader,
|
render_resource::Shader,
|
||||||
sync_component::SyncComponentPlugin,
|
sync_component::SyncComponentPlugin,
|
||||||
texture::{GpuImage, Image},
|
texture::GpuImage,
|
||||||
view::{check_visibility, VisibilitySystems},
|
view::{check_visibility, VisibilitySystems},
|
||||||
ExtractSchedule, Render, RenderApp, RenderSet,
|
ExtractSchedule, Render, RenderApp, RenderSet,
|
||||||
};
|
};
|
||||||
|
|
||||||
use bevy_transform::TransformSystem;
|
use bevy_transform::TransformSystem;
|
||||||
|
|
||||||
pub const PBR_TYPES_SHADER_HANDLE: Handle<Shader> = Handle::weak_from_u128(1708015359337029744);
|
pub const PBR_TYPES_SHADER_HANDLE: Handle<Shader> = Handle::weak_from_u128(1708015359337029744);
|
||||||
|
|
|
@ -51,6 +51,7 @@ use bevy_ecs::{
|
||||||
bundle::Bundle, component::Component, query::QueryItem, reflect::ReflectComponent,
|
bundle::Bundle, component::Component, query::QueryItem, reflect::ReflectComponent,
|
||||||
system::lifetimeless::Read,
|
system::lifetimeless::Read,
|
||||||
};
|
};
|
||||||
|
use bevy_image::Image;
|
||||||
use bevy_math::Quat;
|
use bevy_math::Quat;
|
||||||
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
|
@ -63,7 +64,7 @@ use bevy_render::{
|
||||||
TextureSampleType, TextureView,
|
TextureSampleType, TextureView,
|
||||||
},
|
},
|
||||||
renderer::RenderDevice,
|
renderer::RenderDevice,
|
||||||
texture::{FallbackImage, GpuImage, Image},
|
texture::{FallbackImage, GpuImage},
|
||||||
};
|
};
|
||||||
|
|
||||||
use core::{num::NonZero, ops::Deref};
|
use core::{num::NonZero, ops::Deref};
|
||||||
|
|
|
@ -133,6 +133,7 @@
|
||||||
//! [Why ambient cubes?]: #why-ambient-cubes
|
//! [Why ambient cubes?]: #why-ambient-cubes
|
||||||
|
|
||||||
use bevy_ecs::{component::Component, reflect::ReflectComponent};
|
use bevy_ecs::{component::Component, reflect::ReflectComponent};
|
||||||
|
use bevy_image::Image;
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
render_asset::RenderAssets,
|
render_asset::RenderAssets,
|
||||||
render_resource::{
|
render_resource::{
|
||||||
|
@ -140,7 +141,7 @@ use bevy_render::{
|
||||||
TextureSampleType, TextureView,
|
TextureSampleType, TextureView,
|
||||||
},
|
},
|
||||||
renderer::RenderDevice,
|
renderer::RenderDevice,
|
||||||
texture::{FallbackImage, GpuImage, Image},
|
texture::{FallbackImage, GpuImage},
|
||||||
};
|
};
|
||||||
use core::{num::NonZero, ops::Deref};
|
use core::{num::NonZero, ops::Deref};
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ use bevy_ecs::{
|
||||||
schedule::IntoSystemConfigs,
|
schedule::IntoSystemConfigs,
|
||||||
system::{Commands, Local, Query, Res, ResMut, Resource},
|
system::{Commands, Local, Query, Res, ResMut, Resource},
|
||||||
};
|
};
|
||||||
|
use bevy_image::Image;
|
||||||
use bevy_math::{Affine3A, FloatOrd, Mat4, Vec3A, Vec4};
|
use bevy_math::{Affine3A, FloatOrd, Mat4, Vec3A, Vec4};
|
||||||
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
|
@ -22,7 +23,7 @@ use bevy_render::{
|
||||||
renderer::{RenderDevice, RenderQueue},
|
renderer::{RenderDevice, RenderQueue},
|
||||||
settings::WgpuFeatures,
|
settings::WgpuFeatures,
|
||||||
sync_world::RenderEntity,
|
sync_world::RenderEntity,
|
||||||
texture::{FallbackImage, GpuImage, Image},
|
texture::{FallbackImage, GpuImage},
|
||||||
view::{ExtractedView, Visibility},
|
view::{ExtractedView, Visibility},
|
||||||
Extract, ExtractSchedule, Render, RenderApp, RenderSet,
|
Extract, ExtractSchedule, Render, RenderApp, RenderSet,
|
||||||
};
|
};
|
||||||
|
|
|
@ -39,6 +39,7 @@ use bevy_ecs::{
|
||||||
schedule::IntoSystemConfigs,
|
schedule::IntoSystemConfigs,
|
||||||
system::{Query, Res, ResMut, Resource},
|
system::{Query, Res, ResMut, Resource},
|
||||||
};
|
};
|
||||||
|
use bevy_image::Image;
|
||||||
use bevy_math::{uvec2, vec4, Rect, UVec2};
|
use bevy_math::{uvec2, vec4, Rect, UVec2};
|
||||||
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
||||||
use bevy_render::sync_world::MainEntityHashMap;
|
use bevy_render::sync_world::MainEntityHashMap;
|
||||||
|
@ -46,7 +47,7 @@ use bevy_render::{
|
||||||
mesh::{Mesh, RenderMesh},
|
mesh::{Mesh, RenderMesh},
|
||||||
render_asset::RenderAssets,
|
render_asset::RenderAssets,
|
||||||
render_resource::Shader,
|
render_resource::Shader,
|
||||||
texture::{GpuImage, Image},
|
texture::GpuImage,
|
||||||
view::ViewVisibility,
|
view::ViewVisibility,
|
||||||
Extract, ExtractSchedule, RenderApp,
|
Extract, ExtractSchedule, RenderApp,
|
||||||
};
|
};
|
||||||
|
|
|
@ -60,8 +60,9 @@ use core::{
|
||||||
/// ```
|
/// ```
|
||||||
/// # use bevy_pbr::{Material, MeshMaterial3d};
|
/// # use bevy_pbr::{Material, MeshMaterial3d};
|
||||||
/// # use bevy_ecs::prelude::*;
|
/// # use bevy_ecs::prelude::*;
|
||||||
|
/// # use bevy_image::Image;
|
||||||
/// # use bevy_reflect::TypePath;
|
/// # use bevy_reflect::TypePath;
|
||||||
/// # use bevy_render::{mesh::{Mesh, Mesh3d}, render_resource::{AsBindGroup, ShaderRef}, texture::Image};
|
/// # use bevy_render::{mesh::{Mesh, Mesh3d}, render_resource::{AsBindGroup, ShaderRef}};
|
||||||
/// # use bevy_color::LinearRgba;
|
/// # use bevy_color::LinearRgba;
|
||||||
/// # use bevy_color::palettes::basic::RED;
|
/// # use bevy_color::palettes::basic::RED;
|
||||||
/// # use bevy_asset::{Handle, AssetServer, Assets, Asset};
|
/// # use bevy_asset::{Handle, AssetServer, Assets, Asset};
|
||||||
|
|
|
@ -200,6 +200,7 @@ pub fn prepare_material_meshlet_meshes_main_opaque_pass<M: Material>(
|
||||||
entry_point: material_fragment.entry_point,
|
entry_point: material_fragment.entry_point,
|
||||||
targets: material_fragment.targets,
|
targets: material_fragment.targets,
|
||||||
}),
|
}),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
let material_id = instance_manager.get_material_id(material_id.untyped());
|
let material_id = instance_manager.get_material_id(material_id.untyped());
|
||||||
|
@ -353,6 +354,7 @@ pub fn prepare_material_meshlet_meshes_prepass<M: Material>(
|
||||||
entry_point,
|
entry_point,
|
||||||
targets: material_fragment.targets,
|
targets: material_fragment.targets,
|
||||||
}),
|
}),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
let material_id = instance_manager.get_material_id(material_id.untyped());
|
let material_id = instance_manager.get_material_id(material_id.untyped());
|
||||||
|
|
|
@ -76,6 +76,7 @@ impl FromWorld for MeshletPipelines {
|
||||||
shader: MESHLET_FILL_CLUSTER_BUFFERS_SHADER_HANDLE,
|
shader: MESHLET_FILL_CLUSTER_BUFFERS_SHADER_HANDLE,
|
||||||
shader_defs: vec!["MESHLET_FILL_CLUSTER_BUFFERS_PASS".into()],
|
shader_defs: vec!["MESHLET_FILL_CLUSTER_BUFFERS_PASS".into()],
|
||||||
entry_point: "fill_cluster_buffers".into(),
|
entry_point: "fill_cluster_buffers".into(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
||||||
|
@ -92,6 +93,7 @@ impl FromWorld for MeshletPipelines {
|
||||||
"MESHLET_FIRST_CULLING_PASS".into(),
|
"MESHLET_FIRST_CULLING_PASS".into(),
|
||||||
],
|
],
|
||||||
entry_point: "cull_clusters".into(),
|
entry_point: "cull_clusters".into(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}),
|
}),
|
||||||
|
|
||||||
cull_second: pipeline_cache.queue_compute_pipeline(ComputePipelineDescriptor {
|
cull_second: pipeline_cache.queue_compute_pipeline(ComputePipelineDescriptor {
|
||||||
|
@ -107,6 +109,7 @@ impl FromWorld for MeshletPipelines {
|
||||||
"MESHLET_SECOND_CULLING_PASS".into(),
|
"MESHLET_SECOND_CULLING_PASS".into(),
|
||||||
],
|
],
|
||||||
entry_point: "cull_clusters".into(),
|
entry_point: "cull_clusters".into(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}),
|
}),
|
||||||
|
|
||||||
downsample_depth_first: pipeline_cache.queue_compute_pipeline(
|
downsample_depth_first: pipeline_cache.queue_compute_pipeline(
|
||||||
|
@ -120,6 +123,7 @@ impl FromWorld for MeshletPipelines {
|
||||||
shader: MESHLET_DOWNSAMPLE_DEPTH_SHADER_HANDLE,
|
shader: MESHLET_DOWNSAMPLE_DEPTH_SHADER_HANDLE,
|
||||||
shader_defs: vec!["MESHLET_VISIBILITY_BUFFER_RASTER_PASS_OUTPUT".into()],
|
shader_defs: vec!["MESHLET_VISIBILITY_BUFFER_RASTER_PASS_OUTPUT".into()],
|
||||||
entry_point: "downsample_depth_first".into(),
|
entry_point: "downsample_depth_first".into(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
||||||
|
@ -134,6 +138,7 @@ impl FromWorld for MeshletPipelines {
|
||||||
shader: MESHLET_DOWNSAMPLE_DEPTH_SHADER_HANDLE,
|
shader: MESHLET_DOWNSAMPLE_DEPTH_SHADER_HANDLE,
|
||||||
shader_defs: vec!["MESHLET_VISIBILITY_BUFFER_RASTER_PASS_OUTPUT".into()],
|
shader_defs: vec!["MESHLET_VISIBILITY_BUFFER_RASTER_PASS_OUTPUT".into()],
|
||||||
entry_point: "downsample_depth_second".into(),
|
entry_point: "downsample_depth_second".into(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
||||||
|
@ -148,6 +153,7 @@ impl FromWorld for MeshletPipelines {
|
||||||
shader: MESHLET_DOWNSAMPLE_DEPTH_SHADER_HANDLE,
|
shader: MESHLET_DOWNSAMPLE_DEPTH_SHADER_HANDLE,
|
||||||
shader_defs: vec![],
|
shader_defs: vec![],
|
||||||
entry_point: "downsample_depth_first".into(),
|
entry_point: "downsample_depth_first".into(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
||||||
|
@ -162,6 +168,7 @@ impl FromWorld for MeshletPipelines {
|
||||||
shader: MESHLET_DOWNSAMPLE_DEPTH_SHADER_HANDLE,
|
shader: MESHLET_DOWNSAMPLE_DEPTH_SHADER_HANDLE,
|
||||||
shader_defs: vec![],
|
shader_defs: vec![],
|
||||||
entry_point: "downsample_depth_second".into(),
|
entry_point: "downsample_depth_second".into(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
||||||
|
@ -182,6 +189,7 @@ impl FromWorld for MeshletPipelines {
|
||||||
.into(),
|
.into(),
|
||||||
],
|
],
|
||||||
entry_point: "rasterize_cluster".into(),
|
entry_point: "rasterize_cluster".into(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
||||||
|
@ -203,6 +211,7 @@ impl FromWorld for MeshletPipelines {
|
||||||
.into(),
|
.into(),
|
||||||
],
|
],
|
||||||
entry_point: "rasterize_cluster".into(),
|
entry_point: "rasterize_cluster".into(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
||||||
|
@ -226,6 +235,7 @@ impl FromWorld for MeshletPipelines {
|
||||||
.into(),
|
.into(),
|
||||||
],
|
],
|
||||||
entry_point: "rasterize_cluster".into(),
|
entry_point: "rasterize_cluster".into(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}),
|
}),
|
||||||
|
|
||||||
visibility_buffer_hardware_raster: pipeline_cache.queue_render_pipeline(
|
visibility_buffer_hardware_raster: pipeline_cache.queue_render_pipeline(
|
||||||
|
@ -269,6 +279,7 @@ impl FromWorld for MeshletPipelines {
|
||||||
write_mask: ColorWrites::empty(),
|
write_mask: ColorWrites::empty(),
|
||||||
})],
|
})],
|
||||||
}),
|
}),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
||||||
|
@ -309,6 +320,7 @@ impl FromWorld for MeshletPipelines {
|
||||||
write_mask: ColorWrites::empty(),
|
write_mask: ColorWrites::empty(),
|
||||||
})],
|
})],
|
||||||
}),
|
}),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
||||||
|
@ -356,6 +368,7 @@ impl FromWorld for MeshletPipelines {
|
||||||
write_mask: ColorWrites::empty(),
|
write_mask: ColorWrites::empty(),
|
||||||
})],
|
})],
|
||||||
}),
|
}),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}),
|
}),
|
||||||
|
|
||||||
resolve_depth: pipeline_cache.queue_render_pipeline(RenderPipelineDescriptor {
|
resolve_depth: pipeline_cache.queue_render_pipeline(RenderPipelineDescriptor {
|
||||||
|
@ -381,6 +394,7 @@ impl FromWorld for MeshletPipelines {
|
||||||
entry_point: "resolve_depth".into(),
|
entry_point: "resolve_depth".into(),
|
||||||
targets: vec![],
|
targets: vec![],
|
||||||
}),
|
}),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}),
|
}),
|
||||||
|
|
||||||
resolve_depth_shadow_view: pipeline_cache.queue_render_pipeline(
|
resolve_depth_shadow_view: pipeline_cache.queue_render_pipeline(
|
||||||
|
@ -407,6 +421,7 @@ impl FromWorld for MeshletPipelines {
|
||||||
entry_point: "resolve_depth".into(),
|
entry_point: "resolve_depth".into(),
|
||||||
targets: vec![],
|
targets: vec![],
|
||||||
}),
|
}),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
||||||
|
@ -434,6 +449,7 @@ impl FromWorld for MeshletPipelines {
|
||||||
entry_point: "resolve_material_depth".into(),
|
entry_point: "resolve_material_depth".into(),
|
||||||
targets: vec![],
|
targets: vec![],
|
||||||
}),
|
}),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
||||||
|
@ -448,6 +464,7 @@ impl FromWorld for MeshletPipelines {
|
||||||
shader: MESHLET_REMAP_1D_TO_2D_DISPATCH_SHADER_HANDLE,
|
shader: MESHLET_REMAP_1D_TO_2D_DISPATCH_SHADER_HANDLE,
|
||||||
shader_defs: vec![],
|
shader_defs: vec![],
|
||||||
entry_point: "remap_dispatch".into(),
|
entry_point: "remap_dispatch".into(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
})
|
})
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
|
|
|
@ -571,6 +571,7 @@ where
|
||||||
},
|
},
|
||||||
push_constant_ranges: vec![],
|
push_constant_ranges: vec![],
|
||||||
label: Some("prepass_pipeline".into()),
|
label: Some("prepass_pipeline".into()),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
// This is a bit risky because it's possible to change something that would
|
// This is a bit risky because it's possible to change something that would
|
||||||
|
|
|
@ -290,6 +290,7 @@ impl SpecializedComputePipeline for PreprocessPipeline {
|
||||||
shader: MESH_PREPROCESS_SHADER_HANDLE,
|
shader: MESH_PREPROCESS_SHADER_HANDLE,
|
||||||
shader_defs,
|
shader_defs,
|
||||||
entry_point: "main".into(),
|
entry_point: "main".into(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ use bevy_ecs::{
|
||||||
query::ROQueryItem,
|
query::ROQueryItem,
|
||||||
system::{lifetimeless::*, SystemParamItem, SystemState},
|
system::{lifetimeless::*, SystemParamItem, SystemState},
|
||||||
};
|
};
|
||||||
|
use bevy_image::{BevyDefault, ImageSampler, TextureFormatPixelInfo};
|
||||||
use bevy_math::{Affine3, Rect, UVec2, Vec3, Vec4};
|
use bevy_math::{Affine3, Rect, UVec2, Vec3, Vec4};
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
batching::{
|
batching::{
|
||||||
|
@ -32,7 +33,7 @@ use bevy_render::{
|
||||||
},
|
},
|
||||||
render_resource::*,
|
render_resource::*,
|
||||||
renderer::{RenderDevice, RenderQueue},
|
renderer::{RenderDevice, RenderQueue},
|
||||||
texture::{BevyDefault, DefaultImageSampler, ImageSampler, TextureFormatPixelInfo},
|
texture::DefaultImageSampler,
|
||||||
view::{
|
view::{
|
||||||
prepare_view_targets, GpuCulling, RenderVisibilityRanges, ViewTarget, ViewUniformOffset,
|
prepare_view_targets, GpuCulling, RenderVisibilityRanges, ViewTarget, ViewUniformOffset,
|
||||||
ViewVisibility, VisibilityRange,
|
ViewVisibility, VisibilityRange,
|
||||||
|
@ -2020,6 +2021,7 @@ impl SpecializedMeshPipeline for MeshPipeline {
|
||||||
alpha_to_coverage_enabled,
|
alpha_to_coverage_enabled,
|
||||||
},
|
},
|
||||||
label: Some(label),
|
label: Some(label),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,13 +15,14 @@ use bevy_ecs::{
|
||||||
system::{Commands, Query, Res, Resource},
|
system::{Commands, Query, Res, Resource},
|
||||||
world::{FromWorld, World},
|
world::{FromWorld, World},
|
||||||
};
|
};
|
||||||
|
use bevy_image::BevyDefault as _;
|
||||||
use bevy_math::Vec4;
|
use bevy_math::Vec4;
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
globals::{GlobalsBuffer, GlobalsUniform},
|
globals::{GlobalsBuffer, GlobalsUniform},
|
||||||
render_asset::RenderAssets,
|
render_asset::RenderAssets,
|
||||||
render_resource::{binding_types::*, *},
|
render_resource::{binding_types::*, *},
|
||||||
renderer::RenderDevice,
|
renderer::RenderDevice,
|
||||||
texture::{BevyDefault, FallbackImage, FallbackImageMsaa, FallbackImageZero, GpuImage},
|
texture::{FallbackImage, FallbackImageMsaa, FallbackImageZero, GpuImage},
|
||||||
view::{
|
view::{
|
||||||
Msaa, RenderVisibilityRanges, ViewUniform, ViewUniforms,
|
Msaa, RenderVisibilityRanges, ViewUniform, ViewUniforms,
|
||||||
VISIBILITY_RANGES_STORAGE_BUFFER_COUNT,
|
VISIBILITY_RANGES_STORAGE_BUFFER_COUNT,
|
||||||
|
|
|
@ -448,6 +448,7 @@ impl FromWorld for SsaoPipelines {
|
||||||
shader: PREPROCESS_DEPTH_SHADER_HANDLE,
|
shader: PREPROCESS_DEPTH_SHADER_HANDLE,
|
||||||
shader_defs: Vec::new(),
|
shader_defs: Vec::new(),
|
||||||
entry_point: "preprocess_depth".into(),
|
entry_point: "preprocess_depth".into(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
let spatial_denoise_pipeline =
|
let spatial_denoise_pipeline =
|
||||||
|
@ -461,6 +462,7 @@ impl FromWorld for SsaoPipelines {
|
||||||
shader: SPATIAL_DENOISE_SHADER_HANDLE,
|
shader: SPATIAL_DENOISE_SHADER_HANDLE,
|
||||||
shader_defs: Vec::new(),
|
shader_defs: Vec::new(),
|
||||||
entry_point: "spatial_denoise".into(),
|
entry_point: "spatial_denoise".into(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
@ -513,6 +515,7 @@ impl SpecializedComputePipeline for SsaoPipelines {
|
||||||
shader: SSAO_SHADER_HANDLE,
|
shader: SSAO_SHADER_HANDLE,
|
||||||
shader_defs,
|
shader_defs,
|
||||||
entry_point: "ssao".into(),
|
entry_point: "ssao".into(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ use bevy_ecs::{
|
||||||
system::{lifetimeless::Read, Commands, Query, Res, ResMut, Resource},
|
system::{lifetimeless::Read, Commands, Query, Res, ResMut, Resource},
|
||||||
world::{FromWorld, World},
|
world::{FromWorld, World},
|
||||||
};
|
};
|
||||||
|
use bevy_image::BevyDefault as _;
|
||||||
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
extract_component::{ExtractComponent, ExtractComponentPlugin},
|
extract_component::{ExtractComponent, ExtractComponentPlugin},
|
||||||
|
@ -36,7 +37,6 @@ use bevy_render::{
|
||||||
TextureFormat, TextureSampleType,
|
TextureFormat, TextureSampleType,
|
||||||
},
|
},
|
||||||
renderer::{RenderContext, RenderDevice, RenderQueue},
|
renderer::{RenderContext, RenderDevice, RenderQueue},
|
||||||
texture::BevyDefault as _,
|
|
||||||
view::{ExtractedView, Msaa, ViewTarget, ViewUniformOffset},
|
view::{ExtractedView, Msaa, ViewTarget, ViewUniformOffset},
|
||||||
Render, RenderApp, RenderSet,
|
Render, RenderApp, RenderSet,
|
||||||
};
|
};
|
||||||
|
@ -560,6 +560,7 @@ impl SpecializedRenderPipeline for ScreenSpaceReflectionsPipeline {
|
||||||
primitive: default(),
|
primitive: default(),
|
||||||
depth_stencil: None,
|
depth_stencil: None,
|
||||||
multisample: default(),
|
multisample: default(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,6 +42,7 @@ use bevy_ecs::{
|
||||||
bundle::Bundle, component::Component, reflect::ReflectComponent,
|
bundle::Bundle, component::Component, reflect::ReflectComponent,
|
||||||
schedule::IntoSystemConfigs as _,
|
schedule::IntoSystemConfigs as _,
|
||||||
};
|
};
|
||||||
|
use bevy_image::Image;
|
||||||
use bevy_math::{
|
use bevy_math::{
|
||||||
primitives::{Cuboid, Plane3d},
|
primitives::{Cuboid, Plane3d},
|
||||||
Vec2, Vec3,
|
Vec2, Vec3,
|
||||||
|
@ -52,7 +53,6 @@ use bevy_render::{
|
||||||
render_graph::{RenderGraphApp, ViewNodeRunner},
|
render_graph::{RenderGraphApp, ViewNodeRunner},
|
||||||
render_resource::{Shader, SpecializedRenderPipelines},
|
render_resource::{Shader, SpecializedRenderPipelines},
|
||||||
sync_component::SyncComponentPlugin,
|
sync_component::SyncComponentPlugin,
|
||||||
texture::Image,
|
|
||||||
view::{InheritedVisibility, ViewVisibility, Visibility},
|
view::{InheritedVisibility, ViewVisibility, Visibility},
|
||||||
ExtractSchedule, Render, RenderApp, RenderSet,
|
ExtractSchedule, Render, RenderApp, RenderSet,
|
||||||
};
|
};
|
||||||
|
|
|
@ -16,6 +16,7 @@ use bevy_ecs::{
|
||||||
system::{lifetimeless::Read, Commands, Local, Query, Res, ResMut, Resource},
|
system::{lifetimeless::Read, Commands, Local, Query, Res, ResMut, Resource},
|
||||||
world::{FromWorld, World},
|
world::{FromWorld, World},
|
||||||
};
|
};
|
||||||
|
use bevy_image::{BevyDefault, Image};
|
||||||
use bevy_math::{vec4, Mat3A, Mat4, Vec3, Vec3A, Vec4, Vec4Swizzles as _};
|
use bevy_math::{vec4, Mat3A, Mat4, Vec3, Vec3A, Vec4, Vec4Swizzles as _};
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
mesh::{
|
mesh::{
|
||||||
|
@ -37,7 +38,7 @@ use bevy_render::{
|
||||||
},
|
},
|
||||||
renderer::{RenderContext, RenderDevice, RenderQueue},
|
renderer::{RenderContext, RenderDevice, RenderQueue},
|
||||||
sync_world::RenderEntity,
|
sync_world::RenderEntity,
|
||||||
texture::{BevyDefault as _, GpuImage, Image},
|
texture::GpuImage,
|
||||||
view::{ExtractedView, Msaa, ViewDepthTexture, ViewTarget, ViewUniformOffset},
|
view::{ExtractedView, Msaa, ViewDepthTexture, ViewTarget, ViewUniformOffset},
|
||||||
Extract,
|
Extract,
|
||||||
};
|
};
|
||||||
|
@ -600,6 +601,7 @@ impl SpecializedRenderPipeline for VolumetricFogPipeline {
|
||||||
write_mask: ColorWrites::ALL,
|
write_mask: ColorWrites::ALL,
|
||||||
})],
|
})],
|
||||||
}),
|
}),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,8 +30,8 @@
|
||||||
//! ## Expressive Events
|
//! ## Expressive Events
|
||||||
//!
|
//!
|
||||||
//! The events in this module (see [`events`]) cannot be listened to with normal `EventReader`s.
|
//! The events in this module (see [`events`]) cannot be listened to with normal `EventReader`s.
|
||||||
//! Instead, they are dispatched to *ovservers* attached to specific entities. When events are generated, they
|
//! Instead, they are dispatched to *observers* attached to specific entities. When events are generated, they
|
||||||
//! bubble up the entity hierarchy starting from their target, until they reach the root or bubbling is haulted
|
//! bubble up the entity hierarchy starting from their target, until they reach the root or bubbling is halted
|
||||||
//! with a call to [`Trigger::propagate`](bevy_ecs::observer::Trigger::propagate).
|
//! with a call to [`Trigger::propagate`](bevy_ecs::observer::Trigger::propagate).
|
||||||
//! See [`Observer`] for details.
|
//! See [`Observer`] for details.
|
||||||
//!
|
//!
|
||||||
|
@ -73,8 +73,8 @@
|
||||||
//!
|
//!
|
||||||
//! #### Input Agnostic
|
//! #### Input Agnostic
|
||||||
//!
|
//!
|
||||||
//! Picking provides a generic Pointer abstracton, which is useful for reacting to many different
|
//! Picking provides a generic Pointer abstraction, which is useful for reacting to many different
|
||||||
//! types of input devices. Pointers can be controlled with anything, whether its the included mouse
|
//! types of input devices. Pointers can be controlled with anything, whether it's the included mouse
|
||||||
//! or touch inputs, or a custom gamepad input system you write yourself to control a virtual pointer.
|
//! or touch inputs, or a custom gamepad input system you write yourself to control a virtual pointer.
|
||||||
//!
|
//!
|
||||||
//! ## Robustness
|
//! ## Robustness
|
||||||
|
|
|
@ -41,6 +41,7 @@ enum BindingState<'a> {
|
||||||
pub fn derive_as_bind_group(ast: syn::DeriveInput) -> Result<TokenStream> {
|
pub fn derive_as_bind_group(ast: syn::DeriveInput) -> Result<TokenStream> {
|
||||||
let manifest = BevyManifest::default();
|
let manifest = BevyManifest::default();
|
||||||
let render_path = manifest.get_path("bevy_render");
|
let render_path = manifest.get_path("bevy_render");
|
||||||
|
let image_path = manifest.get_path("bevy_image");
|
||||||
let asset_path = manifest.get_path("bevy_asset");
|
let asset_path = manifest.get_path("bevy_asset");
|
||||||
let ecs_path = manifest.get_path("bevy_ecs");
|
let ecs_path = manifest.get_path("bevy_ecs");
|
||||||
|
|
||||||
|
@ -264,7 +265,7 @@ pub fn derive_as_bind_group(ast: syn::DeriveInput) -> Result<TokenStream> {
|
||||||
binding_impls.insert(0, quote! {
|
binding_impls.insert(0, quote! {
|
||||||
( #binding_index,
|
( #binding_index,
|
||||||
#render_path::render_resource::OwnedBindingResource::TextureView({
|
#render_path::render_resource::OwnedBindingResource::TextureView({
|
||||||
let handle: Option<&#asset_path::Handle<#render_path::texture::Image>> = (&self.#field_name).into();
|
let handle: Option<&#asset_path::Handle<#image_path::Image>> = (&self.#field_name).into();
|
||||||
if let Some(handle) = handle {
|
if let Some(handle) = handle {
|
||||||
images.get(handle).ok_or_else(|| #render_path::render_resource::AsBindGroupError::RetryNextUpdate)?.texture_view.clone()
|
images.get(handle).ok_or_else(|| #render_path::render_resource::AsBindGroupError::RetryNextUpdate)?.texture_view.clone()
|
||||||
} else {
|
} else {
|
||||||
|
@ -305,7 +306,7 @@ pub fn derive_as_bind_group(ast: syn::DeriveInput) -> Result<TokenStream> {
|
||||||
(
|
(
|
||||||
#binding_index,
|
#binding_index,
|
||||||
#render_path::render_resource::OwnedBindingResource::TextureView({
|
#render_path::render_resource::OwnedBindingResource::TextureView({
|
||||||
let handle: Option<&#asset_path::Handle<#render_path::texture::Image>> = (&self.#field_name).into();
|
let handle: Option<&#asset_path::Handle<#image_path::Image>> = (&self.#field_name).into();
|
||||||
if let Some(handle) = handle {
|
if let Some(handle) = handle {
|
||||||
images.get(handle).ok_or_else(|| #render_path::render_resource::AsBindGroupError::RetryNextUpdate)?.texture_view.clone()
|
images.get(handle).ok_or_else(|| #render_path::render_resource::AsBindGroupError::RetryNextUpdate)?.texture_view.clone()
|
||||||
} else {
|
} else {
|
||||||
|
@ -362,7 +363,7 @@ pub fn derive_as_bind_group(ast: syn::DeriveInput) -> Result<TokenStream> {
|
||||||
(
|
(
|
||||||
#binding_index,
|
#binding_index,
|
||||||
#render_path::render_resource::OwnedBindingResource::Sampler({
|
#render_path::render_resource::OwnedBindingResource::Sampler({
|
||||||
let handle: Option<&#asset_path::Handle<#render_path::texture::Image>> = (&self.#field_name).into();
|
let handle: Option<&#asset_path::Handle<#image_path::Image>> = (&self.#field_name).into();
|
||||||
if let Some(handle) = handle {
|
if let Some(handle) = handle {
|
||||||
let image = images.get(handle).ok_or_else(|| #render_path::render_resource::AsBindGroupError::RetryNextUpdate)?;
|
let image = images.get(handle).ok_or_else(|| #render_path::render_resource::AsBindGroupError::RetryNextUpdate)?;
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@ use crate::view::RenderVisibleEntities;
|
||||||
use crate::{
|
use crate::{
|
||||||
batching::gpu_preprocessing::GpuPreprocessingSupport,
|
batching::gpu_preprocessing::GpuPreprocessingSupport,
|
||||||
camera::{CameraProjection, ManualTextureViewHandle, ManualTextureViews},
|
camera::{CameraProjection, ManualTextureViewHandle, ManualTextureViews},
|
||||||
prelude::Image,
|
|
||||||
primitives::Frustum,
|
primitives::Frustum,
|
||||||
render_asset::RenderAssets,
|
render_asset::RenderAssets,
|
||||||
render_graph::{InternedRenderSubGraph, RenderSubGraph},
|
render_graph::{InternedRenderSubGraph, RenderSubGraph},
|
||||||
|
@ -30,6 +29,7 @@ use bevy_ecs::{
|
||||||
system::{Commands, Query, Res, ResMut, Resource},
|
system::{Commands, Query, Res, ResMut, Resource},
|
||||||
world::DeferredWorld,
|
world::DeferredWorld,
|
||||||
};
|
};
|
||||||
|
use bevy_image::Image;
|
||||||
use bevy_math::{ops, vec2, Dir3, Mat4, Ray3d, Rect, URect, UVec2, UVec4, Vec2, Vec3};
|
use bevy_math::{ops, vec2, Dir3, Mat4, Ray3d, Rect, URect, UVec2, UVec4, Vec2, Vec3};
|
||||||
use bevy_reflect::prelude::*;
|
use bevy_reflect::prelude::*;
|
||||||
use bevy_render_macros::ExtractComponent;
|
use bevy_render_macros::ExtractComponent;
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
use crate::{
|
use crate::{extract_resource::ExtractResource, render_resource::TextureView};
|
||||||
extract_resource::ExtractResource, render_resource::TextureView, texture::BevyDefault,
|
|
||||||
};
|
|
||||||
use bevy_ecs::{prelude::Component, reflect::ReflectComponent, system::Resource};
|
use bevy_ecs::{prelude::Component, reflect::ReflectComponent, system::Resource};
|
||||||
|
use bevy_image::BevyDefault as _;
|
||||||
use bevy_math::UVec2;
|
use bevy_math::UVec2;
|
||||||
use bevy_reflect::prelude::*;
|
use bevy_reflect::prelude::*;
|
||||||
use bevy_utils::HashMap;
|
use bevy_utils::HashMap;
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
extract_component::ExtractComponentPlugin,
|
extract_component::ExtractComponentPlugin,
|
||||||
prelude::Image,
|
|
||||||
render_asset::RenderAssets,
|
render_asset::RenderAssets,
|
||||||
render_resource::{Buffer, BufferUsages, Extent3d, ImageDataLayout, Texture, TextureFormat},
|
render_resource::{Buffer, BufferUsages, Extent3d, ImageDataLayout, Texture, TextureFormat},
|
||||||
renderer::{render_system, RenderDevice},
|
renderer::{render_system, RenderDevice},
|
||||||
storage::{GpuShaderStorageBuffer, ShaderStorageBuffer},
|
storage::{GpuShaderStorageBuffer, ShaderStorageBuffer},
|
||||||
sync_world::MainEntity,
|
sync_world::MainEntity,
|
||||||
texture::{GpuImage, TextureFormatPixelInfo},
|
texture::GpuImage,
|
||||||
ExtractSchedule, MainWorld, Render, RenderApp, RenderSet,
|
ExtractSchedule, MainWorld, Render, RenderApp, RenderSet,
|
||||||
};
|
};
|
||||||
use async_channel::{Receiver, Sender};
|
use async_channel::{Receiver, Sender};
|
||||||
|
@ -21,6 +20,7 @@ use bevy_ecs::{
|
||||||
prelude::{Component, Resource, World},
|
prelude::{Component, Resource, World},
|
||||||
system::{Query, Res},
|
system::{Query, Res},
|
||||||
};
|
};
|
||||||
|
use bevy_image::{Image, TextureFormatPixelInfo};
|
||||||
use bevy_reflect::Reflect;
|
use bevy_reflect::Reflect;
|
||||||
use bevy_render_macros::ExtractComponent;
|
use bevy_render_macros::ExtractComponent;
|
||||||
use bevy_utils::{default, tracing::warn, HashMap};
|
use bevy_utils::{default, tracing::warn, HashMap};
|
||||||
|
|
|
@ -61,12 +61,11 @@ pub mod prelude {
|
||||||
},
|
},
|
||||||
render_resource::Shader,
|
render_resource::Shader,
|
||||||
spatial_bundle::SpatialBundle,
|
spatial_bundle::SpatialBundle,
|
||||||
texture::{Image, ImagePlugin, IntoDynamicImageError},
|
texture::ImagePlugin,
|
||||||
view::{InheritedVisibility, Msaa, ViewVisibility, Visibility, VisibilityBundle},
|
view::{InheritedVisibility, Msaa, ViewVisibility, Visibility, VisibilityBundle},
|
||||||
ExtractSchedule,
|
ExtractSchedule,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
use batching::gpu_preprocessing::BatchingPlugin;
|
use batching::gpu_preprocessing::BatchingPlugin;
|
||||||
use bevy_ecs::schedule::ScheduleBuildSettings;
|
use bevy_ecs::schedule::ScheduleBuildSettings;
|
||||||
use bevy_utils::prelude::default;
|
use bevy_utils::prelude::default;
|
||||||
|
|
|
@ -101,7 +101,7 @@ where
|
||||||
///
|
///
|
||||||
/// Each bin corresponds to a single batch set. For unbatchable entities,
|
/// Each bin corresponds to a single batch set. For unbatchable entities,
|
||||||
/// prefer `unbatchable_values` instead.
|
/// prefer `unbatchable_values` instead.
|
||||||
pub(crate) batchable_mesh_values: HashMap<BPI::BinKey, Vec<(Entity, MainEntity)>>,
|
pub batchable_mesh_values: HashMap<BPI::BinKey, Vec<(Entity, MainEntity)>>,
|
||||||
|
|
||||||
/// A list of `BinKey`s for unbatchable items.
|
/// A list of `BinKey`s for unbatchable items.
|
||||||
///
|
///
|
||||||
|
@ -112,7 +112,7 @@ where
|
||||||
/// The unbatchable bins.
|
/// The unbatchable bins.
|
||||||
///
|
///
|
||||||
/// Each entity here is rendered in a separate drawcall.
|
/// Each entity here is rendered in a separate drawcall.
|
||||||
pub(crate) unbatchable_mesh_values: HashMap<BPI::BinKey, UnbatchableBinnedEntities>,
|
pub unbatchable_mesh_values: HashMap<BPI::BinKey, UnbatchableBinnedEntities>,
|
||||||
|
|
||||||
/// Items in the bin that aren't meshes at all.
|
/// Items in the bin that aren't meshes at all.
|
||||||
///
|
///
|
||||||
|
@ -155,9 +155,9 @@ pub struct BinnedRenderPhaseBatch {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Information about the unbatchable entities in a bin.
|
/// Information about the unbatchable entities in a bin.
|
||||||
pub(crate) struct UnbatchableBinnedEntities {
|
pub struct UnbatchableBinnedEntities {
|
||||||
/// The entities.
|
/// The entities.
|
||||||
pub(crate) entities: Vec<(Entity, MainEntity)>,
|
pub entities: Vec<(Entity, MainEntity)>,
|
||||||
|
|
||||||
/// The GPU array buffer indices of each unbatchable binned entity.
|
/// The GPU array buffer indices of each unbatchable binned entity.
|
||||||
pub(crate) buffer_indices: UnbatchableBinnedEntityIndexSet,
|
pub(crate) buffer_indices: UnbatchableBinnedEntityIndexSet,
|
||||||
|
|
|
@ -78,7 +78,7 @@ impl Deref for BindGroup {
|
||||||
/// ok to do "expensive" work here, such as creating a [`Buffer`] for a uniform.
|
/// ok to do "expensive" work here, such as creating a [`Buffer`] for a uniform.
|
||||||
///
|
///
|
||||||
/// If for some reason a [`BindGroup`] cannot be created yet (for example, the [`Texture`](crate::render_resource::Texture)
|
/// If for some reason a [`BindGroup`] cannot be created yet (for example, the [`Texture`](crate::render_resource::Texture)
|
||||||
/// for an [`Image`](crate::texture::Image) hasn't loaded yet), just return [`AsBindGroupError::RetryNextUpdate`], which signals that the caller
|
/// for an [`Image`](bevy_image::Image) hasn't loaded yet), just return [`AsBindGroupError::RetryNextUpdate`], which signals that the caller
|
||||||
/// should retry again later.
|
/// should retry again later.
|
||||||
///
|
///
|
||||||
/// # Deriving
|
/// # Deriving
|
||||||
|
@ -87,7 +87,8 @@ impl Deref for BindGroup {
|
||||||
/// what their binding type is, and what index they should be bound at:
|
/// what their binding type is, and what index they should be bound at:
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// # use bevy_render::{render_resource::*, texture::Image};
|
/// # use bevy_render::render_resource::*;
|
||||||
|
/// # use bevy_image::Image;
|
||||||
/// # use bevy_color::LinearRgba;
|
/// # use bevy_color::LinearRgba;
|
||||||
/// # use bevy_asset::Handle;
|
/// # use bevy_asset::Handle;
|
||||||
/// # use bevy_render::storage::ShaderStorageBuffer;
|
/// # use bevy_render::storage::ShaderStorageBuffer;
|
||||||
|
@ -133,7 +134,7 @@ impl Deref for BindGroup {
|
||||||
/// GPU resource, which will be bound as a texture in shaders. The field will be assumed to implement [`Into<Option<Handle<Image>>>`]. In practice,
|
/// GPU resource, which will be bound as a texture in shaders. The field will be assumed to implement [`Into<Option<Handle<Image>>>`]. In practice,
|
||||||
/// most fields should be a [`Handle<Image>`](bevy_asset::Handle) or [`Option<Handle<Image>>`]. If the value of an [`Option<Handle<Image>>`] is
|
/// most fields should be a [`Handle<Image>`](bevy_asset::Handle) or [`Option<Handle<Image>>`]. If the value of an [`Option<Handle<Image>>`] is
|
||||||
/// [`None`], the [`crate::texture::FallbackImage`] resource will be used instead. This attribute can be used in conjunction with a `sampler` binding attribute
|
/// [`None`], the [`crate::texture::FallbackImage`] resource will be used instead. This attribute can be used in conjunction with a `sampler` binding attribute
|
||||||
/// (with a different binding index) if a binding of the sampler for the [`Image`](crate::texture::Image) is also required.
|
/// (with a different binding index) if a binding of the sampler for the [`Image`](bevy_image::Image) is also required.
|
||||||
///
|
///
|
||||||
/// | Arguments | Values | Default |
|
/// | Arguments | Values | Default |
|
||||||
/// |-----------------------|-------------------------------------------------------------------------|----------------------|
|
/// |-----------------------|-------------------------------------------------------------------------|----------------------|
|
||||||
|
@ -161,7 +162,7 @@ impl Deref for BindGroup {
|
||||||
/// resource, which will be bound as a sampler in shaders. The field will be assumed to implement [`Into<Option<Handle<Image>>>`]. In practice,
|
/// resource, which will be bound as a sampler in shaders. The field will be assumed to implement [`Into<Option<Handle<Image>>>`]. In practice,
|
||||||
/// most fields should be a [`Handle<Image>`](bevy_asset::Handle) or [`Option<Handle<Image>>`]. If the value of an [`Option<Handle<Image>>`] is
|
/// most fields should be a [`Handle<Image>`](bevy_asset::Handle) or [`Option<Handle<Image>>`]. If the value of an [`Option<Handle<Image>>`] is
|
||||||
/// [`None`], the [`crate::texture::FallbackImage`] resource will be used instead. This attribute can be used in conjunction with a `texture` binding attribute
|
/// [`None`], the [`crate::texture::FallbackImage`] resource will be used instead. This attribute can be used in conjunction with a `texture` binding attribute
|
||||||
/// (with a different binding index) if a binding of the texture for the [`Image`](crate::texture::Image) is also required.
|
/// (with a different binding index) if a binding of the texture for the [`Image`](bevy_image::Image) is also required.
|
||||||
///
|
///
|
||||||
/// | Arguments | Values | Default |
|
/// | Arguments | Values | Default |
|
||||||
/// |------------------------|-------------------------------------------------------------------------|------------------------|
|
/// |------------------------|-------------------------------------------------------------------------|------------------------|
|
||||||
|
@ -194,9 +195,10 @@ impl Deref for BindGroup {
|
||||||
///
|
///
|
||||||
/// As mentioned above, [`Option<Handle<Image>>`] is also supported:
|
/// As mentioned above, [`Option<Handle<Image>>`] is also supported:
|
||||||
/// ```
|
/// ```
|
||||||
/// # use bevy_render::{render_resource::AsBindGroup, texture::Image};
|
|
||||||
/// # use bevy_color::LinearRgba;
|
|
||||||
/// # use bevy_asset::Handle;
|
/// # use bevy_asset::Handle;
|
||||||
|
/// # use bevy_color::LinearRgba;
|
||||||
|
/// # use bevy_image::Image;
|
||||||
|
/// # use bevy_render::render_resource::AsBindGroup;
|
||||||
/// #[derive(AsBindGroup)]
|
/// #[derive(AsBindGroup)]
|
||||||
/// struct CoolMaterial {
|
/// struct CoolMaterial {
|
||||||
/// #[uniform(0)]
|
/// #[uniform(0)]
|
||||||
|
@ -433,8 +435,9 @@ where
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::{self as bevy_render, prelude::Image};
|
use crate as bevy_render;
|
||||||
use bevy_asset::Handle;
|
use bevy_asset::Handle;
|
||||||
|
use bevy_image::Image;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn texture_visibility() {
|
fn texture_visibility() {
|
||||||
|
|
|
@ -108,6 +108,9 @@ pub struct RenderPipelineDescriptor {
|
||||||
pub multisample: MultisampleState,
|
pub multisample: MultisampleState,
|
||||||
/// The compiled fragment stage, its entry point, and the color targets.
|
/// The compiled fragment stage, its entry point, and the color targets.
|
||||||
pub fragment: Option<FragmentState>,
|
pub fragment: Option<FragmentState>,
|
||||||
|
/// Whether to zero-initialize workgroup memory by default. If you're not sure, set this to true.
|
||||||
|
/// If this is false, reading from workgroup variables before writing to them will result in garbage values.
|
||||||
|
pub zero_initialize_workgroup_memory: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Eq, PartialEq)]
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
||||||
|
@ -147,4 +150,7 @@ pub struct ComputePipelineDescriptor {
|
||||||
/// The name of the entry point in the compiled shader. There must be a
|
/// The name of the entry point in the compiled shader. There must be a
|
||||||
/// function with this name in the shader.
|
/// function with this name in the shader.
|
||||||
pub entry_point: Cow<'static, str>,
|
pub entry_point: Cow<'static, str>,
|
||||||
|
/// Whether to zero-initialize workgroup memory by default. If you're not sure, set this to true.
|
||||||
|
/// If this is false, reading from workgroup variables before writing to them will result in garbage values.
|
||||||
|
pub zero_initialize_workgroup_memory: bool,
|
||||||
}
|
}
|
||||||
|
|
|
@ -669,6 +669,7 @@ impl PipelineCache {
|
||||||
let device = self.device.clone();
|
let device = self.device.clone();
|
||||||
let shader_cache = self.shader_cache.clone();
|
let shader_cache = self.shader_cache.clone();
|
||||||
let layout_cache = self.layout_cache.clone();
|
let layout_cache = self.layout_cache.clone();
|
||||||
|
|
||||||
create_pipeline_task(
|
create_pipeline_task(
|
||||||
async move {
|
async move {
|
||||||
let mut shader_cache = shader_cache.lock().unwrap();
|
let mut shader_cache = shader_cache.lock().unwrap();
|
||||||
|
@ -731,10 +732,10 @@ impl PipelineCache {
|
||||||
)
|
)
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO: Expose this somehow
|
// TODO: Expose the rest of this somehow
|
||||||
let compilation_options = PipelineCompilationOptions {
|
let compilation_options = PipelineCompilationOptions {
|
||||||
constants: &std::collections::HashMap::new(),
|
constants: &default(),
|
||||||
zero_initialize_workgroup_memory: false,
|
zero_initialize_workgroup_memory: descriptor.zero_initialize_workgroup_memory,
|
||||||
};
|
};
|
||||||
|
|
||||||
let descriptor = RawRenderPipelineDescriptor {
|
let descriptor = RawRenderPipelineDescriptor {
|
||||||
|
@ -779,6 +780,7 @@ impl PipelineCache {
|
||||||
let device = self.device.clone();
|
let device = self.device.clone();
|
||||||
let shader_cache = self.shader_cache.clone();
|
let shader_cache = self.shader_cache.clone();
|
||||||
let layout_cache = self.layout_cache.clone();
|
let layout_cache = self.layout_cache.clone();
|
||||||
|
|
||||||
create_pipeline_task(
|
create_pipeline_task(
|
||||||
async move {
|
async move {
|
||||||
let mut shader_cache = shader_cache.lock().unwrap();
|
let mut shader_cache = shader_cache.lock().unwrap();
|
||||||
|
@ -812,10 +814,11 @@ impl PipelineCache {
|
||||||
layout: layout.as_ref().map(|layout| -> &PipelineLayout { layout }),
|
layout: layout.as_ref().map(|layout| -> &PipelineLayout { layout }),
|
||||||
module: &compute_module,
|
module: &compute_module,
|
||||||
entry_point: Some(&descriptor.entry_point),
|
entry_point: Some(&descriptor.entry_point),
|
||||||
// TODO: Expose this somehow
|
// TODO: Expose the rest of this somehow
|
||||||
compilation_options: PipelineCompilationOptions {
|
compilation_options: PipelineCompilationOptions {
|
||||||
constants: &std::collections::HashMap::new(),
|
constants: &default(),
|
||||||
zero_initialize_workgroup_memory: false,
|
zero_initialize_workgroup_memory: descriptor
|
||||||
|
.zero_initialize_workgroup_memory,
|
||||||
},
|
},
|
||||||
cache: None,
|
cache: None,
|
||||||
};
|
};
|
||||||
|
|
|
@ -4,18 +4,11 @@ mod texture_attachment;
|
||||||
mod texture_cache;
|
mod texture_cache;
|
||||||
|
|
||||||
pub use crate::render_resource::DefaultImageSampler;
|
pub use crate::render_resource::DefaultImageSampler;
|
||||||
#[cfg(feature = "exr")]
|
|
||||||
pub use bevy_image::ExrTextureLoader;
|
|
||||||
#[cfg(feature = "hdr")]
|
|
||||||
pub use bevy_image::HdrTextureLoader;
|
|
||||||
pub use bevy_image::{
|
|
||||||
BevyDefault, CompressedImageFormats, FileTextureError, Image, ImageAddressMode,
|
|
||||||
ImageFilterMode, ImageFormat, ImageFormatSetting, ImageLoader, ImageLoaderError,
|
|
||||||
ImageLoaderSettings, ImageSampler, ImageSamplerDescriptor, ImageType, IntoDynamicImageError,
|
|
||||||
TextureError, TextureFormatPixelInfo,
|
|
||||||
};
|
|
||||||
#[cfg(feature = "basis-universal")]
|
#[cfg(feature = "basis-universal")]
|
||||||
pub use bevy_image::{CompressedImageSaver, CompressedImageSaverError};
|
use bevy_image::CompressedImageSaver;
|
||||||
|
#[cfg(feature = "hdr")]
|
||||||
|
use bevy_image::HdrTextureLoader;
|
||||||
|
use bevy_image::{CompressedImageFormats, Image, ImageLoader, ImageSamplerDescriptor};
|
||||||
pub use fallback_image::*;
|
pub use fallback_image::*;
|
||||||
pub use gpu_image::*;
|
pub use gpu_image::*;
|
||||||
pub use texture_attachment::*;
|
pub use texture_attachment::*;
|
||||||
|
@ -39,7 +32,7 @@ pub const TRANSPARENT_IMAGE_HANDLE: Handle<Image> =
|
||||||
// TODO: replace Texture names with Image names?
|
// TODO: replace Texture names with Image names?
|
||||||
/// Adds the [`Image`] as an asset and makes sure that they are extracted and prepared for the GPU.
|
/// Adds the [`Image`] as an asset and makes sure that they are extracted and prepared for the GPU.
|
||||||
pub struct ImagePlugin {
|
pub struct ImagePlugin {
|
||||||
/// The default image sampler to use when [`ImageSampler`] is set to `Default`.
|
/// The default image sampler to use when [`bevy_image::ImageSampler`] is set to `Default`.
|
||||||
pub default_sampler: ImageSamplerDescriptor,
|
pub default_sampler: ImageSamplerDescriptor,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,7 +62,7 @@ impl Plugin for ImagePlugin {
|
||||||
fn build(&self, app: &mut App) {
|
fn build(&self, app: &mut App) {
|
||||||
#[cfg(feature = "exr")]
|
#[cfg(feature = "exr")]
|
||||||
{
|
{
|
||||||
app.init_asset_loader::<ExrTextureLoader>();
|
app.init_asset_loader::<bevy_image::ExrTextureLoader>();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "hdr")]
|
#[cfg(feature = "hdr")]
|
||||||
|
|
|
@ -18,8 +18,8 @@ use crate::{
|
||||||
render_resource::{DynamicUniformBuffer, ShaderType, Texture, TextureView},
|
render_resource::{DynamicUniformBuffer, ShaderType, Texture, TextureView},
|
||||||
renderer::{RenderDevice, RenderQueue},
|
renderer::{RenderDevice, RenderQueue},
|
||||||
texture::{
|
texture::{
|
||||||
BevyDefault, CachedTexture, ColorAttachment, DepthAttachment, GpuImage,
|
CachedTexture, ColorAttachment, DepthAttachment, GpuImage, OutputColorAttachment,
|
||||||
OutputColorAttachment, TextureCache,
|
TextureCache,
|
||||||
},
|
},
|
||||||
Render, RenderApp, RenderSet,
|
Render, RenderApp, RenderSet,
|
||||||
};
|
};
|
||||||
|
@ -28,6 +28,7 @@ use bevy_app::{App, Plugin};
|
||||||
use bevy_color::LinearRgba;
|
use bevy_color::LinearRgba;
|
||||||
use bevy_derive::{Deref, DerefMut};
|
use bevy_derive::{Deref, DerefMut};
|
||||||
use bevy_ecs::prelude::*;
|
use bevy_ecs::prelude::*;
|
||||||
|
use bevy_image::BevyDefault as _;
|
||||||
use bevy_math::{mat3, vec2, vec3, Mat3, Mat4, UVec4, Vec2, Vec3, Vec4, Vec4Swizzles};
|
use bevy_math::{mat3, vec2, vec3, Mat3, Mat4, UVec4, Vec2, Vec3, Vec4, Vec4Swizzles};
|
||||||
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
||||||
use bevy_render_macros::ExtractComponent;
|
use bevy_render_macros::ExtractComponent;
|
||||||
|
|
|
@ -2,7 +2,7 @@ use super::ExtractedWindows;
|
||||||
use crate::{
|
use crate::{
|
||||||
camera::{ManualTextureViewHandle, ManualTextureViews, NormalizedRenderTarget, RenderTarget},
|
camera::{ManualTextureViewHandle, ManualTextureViews, NormalizedRenderTarget, RenderTarget},
|
||||||
gpu_readback,
|
gpu_readback,
|
||||||
prelude::{Image, Shader},
|
prelude::Shader,
|
||||||
render_asset::{RenderAssetUsages, RenderAssets},
|
render_asset::{RenderAssetUsages, RenderAssets},
|
||||||
render_resource::{
|
render_resource::{
|
||||||
binding_types::texture_2d, BindGroup, BindGroupEntries, BindGroupLayout,
|
binding_types::texture_2d, BindGroup, BindGroupEntries, BindGroupLayout,
|
||||||
|
@ -11,7 +11,7 @@ use crate::{
|
||||||
SpecializedRenderPipelines, Texture, TextureUsages, TextureView, VertexState,
|
SpecializedRenderPipelines, Texture, TextureUsages, TextureView, VertexState,
|
||||||
},
|
},
|
||||||
renderer::RenderDevice,
|
renderer::RenderDevice,
|
||||||
texture::{GpuImage, OutputColorAttachment, TextureFormatPixelInfo},
|
texture::{GpuImage, OutputColorAttachment},
|
||||||
view::{prepare_view_attachments, prepare_view_targets, ViewTargetAttachments, WindowSurfaces},
|
view::{prepare_view_attachments, prepare_view_targets, ViewTargetAttachments, WindowSurfaces},
|
||||||
ExtractSchedule, MainWorld, Render, RenderApp, RenderSet,
|
ExtractSchedule, MainWorld, Render, RenderApp, RenderSet,
|
||||||
};
|
};
|
||||||
|
@ -23,6 +23,7 @@ use bevy_ecs::{
|
||||||
entity::EntityHashMap, event::event_update_system, prelude::*, system::SystemState,
|
entity::EntityHashMap, event::event_update_system, prelude::*, system::SystemState,
|
||||||
};
|
};
|
||||||
use bevy_hierarchy::DespawnRecursiveExt;
|
use bevy_hierarchy::DespawnRecursiveExt;
|
||||||
|
use bevy_image::{Image, TextureFormatPixelInfo};
|
||||||
use bevy_reflect::Reflect;
|
use bevy_reflect::Reflect;
|
||||||
use bevy_tasks::AsyncComputeTaskPool;
|
use bevy_tasks::AsyncComputeTaskPool;
|
||||||
use bevy_utils::{
|
use bevy_utils::{
|
||||||
|
@ -496,6 +497,7 @@ impl SpecializedRenderPipeline for ScreenshotToScreenPipeline {
|
||||||
})],
|
})],
|
||||||
}),
|
}),
|
||||||
push_constant_ranges: Vec::new(),
|
push_constant_ranges: Vec::new(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@ bevy_asset = { path = "../bevy_asset", version = "0.15.0-dev" }
|
||||||
bevy_color = { path = "../bevy_color", version = "0.15.0-dev" }
|
bevy_color = { path = "../bevy_color", version = "0.15.0-dev" }
|
||||||
bevy_core_pipeline = { path = "../bevy_core_pipeline", version = "0.15.0-dev" }
|
bevy_core_pipeline = { path = "../bevy_core_pipeline", version = "0.15.0-dev" }
|
||||||
bevy_ecs = { path = "../bevy_ecs", version = "0.15.0-dev" }
|
bevy_ecs = { path = "../bevy_ecs", version = "0.15.0-dev" }
|
||||||
|
bevy_image = { path = "../bevy_image", version = "0.15.0-dev" }
|
||||||
bevy_math = { path = "../bevy_math", version = "0.15.0-dev" }
|
bevy_math = { path = "../bevy_math", version = "0.15.0-dev" }
|
||||||
bevy_picking = { path = "../bevy_picking", version = "0.15.0-dev", optional = true }
|
bevy_picking = { path = "../bevy_picking", version = "0.15.0-dev", optional = true }
|
||||||
bevy_reflect = { path = "../bevy_reflect", version = "0.15.0-dev", features = [
|
bevy_reflect = { path = "../bevy_reflect", version = "0.15.0-dev", features = [
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
use crate::TextureAtlasLayout;
|
use crate::TextureAtlasLayout;
|
||||||
|
use bevy_image::{Image, TextureFormatPixelInfo};
|
||||||
use bevy_math::{URect, UVec2};
|
use bevy_math::{URect, UVec2};
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
render_asset::{RenderAsset, RenderAssetUsages},
|
render_asset::{RenderAsset, RenderAssetUsages},
|
||||||
texture::{GpuImage, Image, TextureFormatPixelInfo},
|
texture::GpuImage,
|
||||||
};
|
};
|
||||||
use guillotiere::{size2, Allocation, AtlasAllocator};
|
use guillotiere::{size2, Allocation, AtlasAllocator};
|
||||||
|
|
||||||
|
|
|
@ -51,13 +51,13 @@ use bevy_app::prelude::*;
|
||||||
use bevy_asset::{load_internal_asset, AssetApp, Assets, Handle};
|
use bevy_asset::{load_internal_asset, AssetApp, Assets, Handle};
|
||||||
use bevy_core_pipeline::core_2d::Transparent2d;
|
use bevy_core_pipeline::core_2d::Transparent2d;
|
||||||
use bevy_ecs::{prelude::*, query::QueryItem};
|
use bevy_ecs::{prelude::*, query::QueryItem};
|
||||||
|
use bevy_image::Image;
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
extract_component::{ExtractComponent, ExtractComponentPlugin},
|
extract_component::{ExtractComponent, ExtractComponentPlugin},
|
||||||
mesh::{Mesh, Mesh2d, MeshAabb},
|
mesh::{Mesh, Mesh2d, MeshAabb},
|
||||||
primitives::Aabb,
|
primitives::Aabb,
|
||||||
render_phase::AddRenderCommand,
|
render_phase::AddRenderCommand,
|
||||||
render_resource::{Shader, SpecializedRenderPipelines},
|
render_resource::{Shader, SpecializedRenderPipelines},
|
||||||
texture::Image,
|
|
||||||
view::{check_visibility, NoFrustumCulling, VisibilitySystems},
|
view::{check_visibility, NoFrustumCulling, VisibilitySystems},
|
||||||
ExtractSchedule, Render, RenderApp, RenderSet,
|
ExtractSchedule, Render, RenderApp, RenderSet,
|
||||||
};
|
};
|
||||||
|
|
|
@ -4,13 +4,10 @@ use crate::{AlphaMode2d, Material2d, Material2dPlugin, MaterialMesh2dBundle};
|
||||||
use bevy_app::{App, Plugin};
|
use bevy_app::{App, Plugin};
|
||||||
use bevy_asset::{load_internal_asset, Asset, AssetApp, Assets, Handle};
|
use bevy_asset::{load_internal_asset, Asset, AssetApp, Assets, Handle};
|
||||||
use bevy_color::{Alpha, Color, ColorToComponents, LinearRgba};
|
use bevy_color::{Alpha, Color, ColorToComponents, LinearRgba};
|
||||||
|
use bevy_image::Image;
|
||||||
use bevy_math::Vec4;
|
use bevy_math::Vec4;
|
||||||
use bevy_reflect::prelude::*;
|
use bevy_reflect::prelude::*;
|
||||||
use bevy_render::{
|
use bevy_render::{render_asset::RenderAssets, render_resource::*, texture::GpuImage};
|
||||||
render_asset::RenderAssets,
|
|
||||||
render_resource::*,
|
|
||||||
texture::{GpuImage, Image},
|
|
||||||
};
|
|
||||||
|
|
||||||
pub const COLOR_MATERIAL_SHADER_HANDLE: Handle<Shader> =
|
pub const COLOR_MATERIAL_SHADER_HANDLE: Handle<Shader> =
|
||||||
Handle::weak_from_u128(3253086872234592509);
|
Handle::weak_from_u128(3253086872234592509);
|
||||||
|
|
|
@ -58,8 +58,9 @@ use derive_more::derive::From;
|
||||||
/// ```
|
/// ```
|
||||||
/// # use bevy_sprite::{Material2d, MeshMaterial2d};
|
/// # use bevy_sprite::{Material2d, MeshMaterial2d};
|
||||||
/// # use bevy_ecs::prelude::*;
|
/// # use bevy_ecs::prelude::*;
|
||||||
|
/// # use bevy_image::Image;
|
||||||
/// # use bevy_reflect::TypePath;
|
/// # use bevy_reflect::TypePath;
|
||||||
/// # use bevy_render::{mesh::{Mesh, Mesh2d}, render_resource::{AsBindGroup, ShaderRef}, texture::Image};
|
/// # use bevy_render::{mesh::{Mesh, Mesh2d}, render_resource::{AsBindGroup, ShaderRef}};
|
||||||
/// # use bevy_color::LinearRgba;
|
/// # use bevy_color::LinearRgba;
|
||||||
/// # use bevy_color::palettes::basic::RED;
|
/// # use bevy_color::palettes::basic::RED;
|
||||||
/// # use bevy_asset::{Handle, AssetServer, Assets, Asset};
|
/// # use bevy_asset::{Handle, AssetServer, Assets, Asset};
|
||||||
|
|
|
@ -14,8 +14,8 @@ use bevy_ecs::{
|
||||||
query::ROQueryItem,
|
query::ROQueryItem,
|
||||||
system::{lifetimeless::*, SystemParamItem, SystemState},
|
system::{lifetimeless::*, SystemParamItem, SystemState},
|
||||||
};
|
};
|
||||||
|
use bevy_image::{BevyDefault, Image, ImageSampler, TextureFormatPixelInfo};
|
||||||
use bevy_math::{Affine3, Vec4};
|
use bevy_math::{Affine3, Vec4};
|
||||||
use bevy_render::sync_world::{MainEntity, MainEntityHashMap};
|
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
batching::{
|
batching::{
|
||||||
gpu_preprocessing::IndirectParameters,
|
gpu_preprocessing::IndirectParameters,
|
||||||
|
@ -34,10 +34,8 @@ use bevy_render::{
|
||||||
render_phase::{PhaseItem, RenderCommand, RenderCommandResult, TrackedRenderPass},
|
render_phase::{PhaseItem, RenderCommand, RenderCommandResult, TrackedRenderPass},
|
||||||
render_resource::{binding_types::uniform_buffer, *},
|
render_resource::{binding_types::uniform_buffer, *},
|
||||||
renderer::{RenderDevice, RenderQueue},
|
renderer::{RenderDevice, RenderQueue},
|
||||||
texture::{
|
sync_world::{MainEntity, MainEntityHashMap},
|
||||||
BevyDefault, DefaultImageSampler, FallbackImage, GpuImage, Image, ImageSampler,
|
texture::{DefaultImageSampler, FallbackImage, GpuImage},
|
||||||
TextureFormatPixelInfo,
|
|
||||||
},
|
|
||||||
view::{
|
view::{
|
||||||
ExtractedView, ViewTarget, ViewUniform, ViewUniformOffset, ViewUniforms, ViewVisibility,
|
ExtractedView, ViewTarget, ViewUniform, ViewUniformOffset, ViewUniforms, ViewVisibility,
|
||||||
},
|
},
|
||||||
|
@ -674,6 +672,7 @@ impl SpecializedMeshPipeline for Mesh2dPipeline {
|
||||||
alpha_to_coverage_enabled: false,
|
alpha_to_coverage_enabled: false,
|
||||||
},
|
},
|
||||||
label: Some(label.into()),
|
label: Some(label.into()),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ use crate::{Sprite, TextureAtlasLayout};
|
||||||
use bevy_app::prelude::*;
|
use bevy_app::prelude::*;
|
||||||
use bevy_asset::prelude::*;
|
use bevy_asset::prelude::*;
|
||||||
use bevy_ecs::prelude::*;
|
use bevy_ecs::prelude::*;
|
||||||
|
use bevy_image::Image;
|
||||||
use bevy_math::{prelude::*, FloatExt, FloatOrd};
|
use bevy_math::{prelude::*, FloatExt, FloatOrd};
|
||||||
use bevy_picking::backend::prelude::*;
|
use bevy_picking::backend::prelude::*;
|
||||||
use bevy_render::prelude::*;
|
use bevy_render::prelude::*;
|
||||||
|
|
|
@ -18,6 +18,7 @@ use bevy_ecs::{
|
||||||
query::ROQueryItem,
|
query::ROQueryItem,
|
||||||
system::{lifetimeless::*, SystemParamItem, SystemState},
|
system::{lifetimeless::*, SystemParamItem, SystemState},
|
||||||
};
|
};
|
||||||
|
use bevy_image::{BevyDefault, Image, ImageSampler, TextureFormatPixelInfo};
|
||||||
use bevy_math::{Affine3A, FloatOrd, Quat, Rect, Vec2, Vec4};
|
use bevy_math::{Affine3A, FloatOrd, Quat, Rect, Vec2, Vec4};
|
||||||
use bevy_render::sync_world::MainEntity;
|
use bevy_render::sync_world::MainEntity;
|
||||||
use bevy_render::view::RenderVisibleEntities;
|
use bevy_render::view::RenderVisibleEntities;
|
||||||
|
@ -33,10 +34,7 @@ use bevy_render::{
|
||||||
},
|
},
|
||||||
renderer::{RenderDevice, RenderQueue},
|
renderer::{RenderDevice, RenderQueue},
|
||||||
sync_world::{RenderEntity, TemporaryRenderEntity},
|
sync_world::{RenderEntity, TemporaryRenderEntity},
|
||||||
texture::{
|
texture::{DefaultImageSampler, FallbackImage, GpuImage},
|
||||||
BevyDefault, DefaultImageSampler, FallbackImage, GpuImage, Image, ImageSampler,
|
|
||||||
TextureFormatPixelInfo,
|
|
||||||
},
|
|
||||||
view::{
|
view::{
|
||||||
ExtractedView, Msaa, ViewTarget, ViewUniform, ViewUniformOffset, ViewUniforms,
|
ExtractedView, Msaa, ViewTarget, ViewUniform, ViewUniformOffset, ViewUniforms,
|
||||||
ViewVisibility,
|
ViewVisibility,
|
||||||
|
@ -323,6 +321,7 @@ impl SpecializedRenderPipeline for SpritePipeline {
|
||||||
},
|
},
|
||||||
label: Some("sprite_pipeline".into()),
|
label: Some("sprite_pipeline".into()),
|
||||||
push_constant_ranges: Vec::new(),
|
push_constant_ranges: Vec::new(),
|
||||||
|
zero_initialize_workgroup_memory: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
use bevy_asset::Handle;
|
use bevy_asset::Handle;
|
||||||
use bevy_color::Color;
|
use bevy_color::Color;
|
||||||
use bevy_ecs::{component::Component, reflect::ReflectComponent};
|
use bevy_ecs::{component::Component, reflect::ReflectComponent};
|
||||||
|
use bevy_image::Image;
|
||||||
use bevy_math::{Rect, Vec2};
|
use bevy_math::{Rect, Vec2};
|
||||||
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
||||||
use bevy_render::{sync_world::SyncToRenderWorld, texture::Image, view::Visibility};
|
use bevy_render::{sync_world::SyncToRenderWorld, view::Visibility};
|
||||||
use bevy_transform::components::Transform;
|
use bevy_transform::components::Transform;
|
||||||
|
|
||||||
use crate::{TextureAtlas, TextureSlicer};
|
use crate::{TextureAtlas, TextureSlicer};
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
use bevy_asset::{Asset, AssetId, Assets, Handle};
|
use bevy_asset::{Asset, AssetId, Assets, Handle};
|
||||||
|
use bevy_image::Image;
|
||||||
use bevy_math::{URect, UVec2};
|
use bevy_math::{URect, UVec2};
|
||||||
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
||||||
#[cfg(feature = "serialize")]
|
#[cfg(feature = "serialize")]
|
||||||
use bevy_reflect::{ReflectDeserialize, ReflectSerialize};
|
use bevy_reflect::{ReflectDeserialize, ReflectSerialize};
|
||||||
use bevy_render::texture::Image;
|
|
||||||
use bevy_utils::HashMap;
|
use bevy_utils::HashMap;
|
||||||
|
|
||||||
/// Stores a mapping from sub texture handles to the related area index.
|
/// Stores a mapping from sub texture handles to the related area index.
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
use bevy_asset::AssetId;
|
use bevy_asset::AssetId;
|
||||||
|
use bevy_image::{Image, TextureFormatPixelInfo};
|
||||||
use bevy_math::{URect, UVec2};
|
use bevy_math::{URect, UVec2};
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
render_asset::RenderAssetUsages,
|
render_asset::RenderAssetUsages,
|
||||||
render_resource::{Extent3d, TextureDimension, TextureFormat},
|
render_resource::{Extent3d, TextureDimension, TextureFormat},
|
||||||
texture::{Image, TextureFormatPixelInfo},
|
|
||||||
};
|
};
|
||||||
use bevy_utils::{
|
use bevy_utils::{
|
||||||
tracing::{debug, error, warn},
|
tracing::{debug, error, warn},
|
||||||
|
@ -179,6 +179,7 @@ impl<'a> TextureAtlasBuilder<'a> {
|
||||||
/// # use bevy_ecs::prelude::*;
|
/// # use bevy_ecs::prelude::*;
|
||||||
/// # use bevy_asset::*;
|
/// # use bevy_asset::*;
|
||||||
/// # use bevy_render::prelude::*;
|
/// # use bevy_render::prelude::*;
|
||||||
|
/// # use bevy_image::Image;
|
||||||
///
|
///
|
||||||
/// fn my_system(mut commands: Commands, mut textures: ResMut<Assets<Image>>, mut layouts: ResMut<Assets<TextureAtlasLayout>>) {
|
/// fn my_system(mut commands: Commands, mut textures: ResMut<Assets<Image>>, mut layouts: ResMut<Assets<TextureAtlasLayout>>) {
|
||||||
/// // Declare your builder
|
/// // Declare your builder
|
||||||
|
|
|
@ -3,8 +3,8 @@ use crate::{ExtractedSprite, Sprite, SpriteImageMode, TextureAtlasLayout};
|
||||||
use super::TextureSlice;
|
use super::TextureSlice;
|
||||||
use bevy_asset::{AssetEvent, Assets};
|
use bevy_asset::{AssetEvent, Assets};
|
||||||
use bevy_ecs::prelude::*;
|
use bevy_ecs::prelude::*;
|
||||||
|
use bevy_image::Image;
|
||||||
use bevy_math::{Rect, Vec2};
|
use bevy_math::{Rect, Vec2};
|
||||||
use bevy_render::texture::Image;
|
|
||||||
use bevy_transform::prelude::*;
|
use bevy_transform::prelude::*;
|
||||||
use bevy_utils::HashSet;
|
use bevy_utils::HashSet;
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ bevy_color = { path = "../bevy_color", version = "0.15.0-dev" }
|
||||||
bevy_derive = { path = "../bevy_derive", version = "0.15.0-dev" }
|
bevy_derive = { path = "../bevy_derive", version = "0.15.0-dev" }
|
||||||
bevy_ecs = { path = "../bevy_ecs", version = "0.15.0-dev" }
|
bevy_ecs = { path = "../bevy_ecs", version = "0.15.0-dev" }
|
||||||
bevy_hierarchy = { path = "../bevy_hierarchy", version = "0.15.0-dev" }
|
bevy_hierarchy = { path = "../bevy_hierarchy", version = "0.15.0-dev" }
|
||||||
|
bevy_image = { path = "../bevy_image", version = "0.15.0-dev" }
|
||||||
bevy_math = { path = "../bevy_math", version = "0.15.0-dev" }
|
bevy_math = { path = "../bevy_math", version = "0.15.0-dev" }
|
||||||
bevy_reflect = { path = "../bevy_reflect", version = "0.15.0-dev", features = [
|
bevy_reflect = { path = "../bevy_reflect", version = "0.15.0-dev", features = [
|
||||||
"bevy",
|
"bevy",
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
use bevy_asset::{Assets, Handle};
|
use bevy_asset::{Assets, Handle};
|
||||||
|
use bevy_image::{Image, ImageSampler};
|
||||||
use bevy_math::{IVec2, UVec2};
|
use bevy_math::{IVec2, UVec2};
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
render_asset::RenderAssetUsages,
|
render_asset::RenderAssetUsages,
|
||||||
render_resource::{Extent3d, TextureDimension, TextureFormat},
|
render_resource::{Extent3d, TextureDimension, TextureFormat},
|
||||||
texture::{Image, ImageSampler},
|
|
||||||
};
|
};
|
||||||
use bevy_sprite::{DynamicTextureAtlasBuilder, TextureAtlasLayout};
|
use bevy_sprite::{DynamicTextureAtlasBuilder, TextureAtlasLayout};
|
||||||
use bevy_utils::HashMap;
|
use bevy_utils::HashMap;
|
||||||
|
|
|
@ -3,12 +3,12 @@ use bevy_ecs::{
|
||||||
event::EventReader,
|
event::EventReader,
|
||||||
system::{ResMut, Resource},
|
system::{ResMut, Resource},
|
||||||
};
|
};
|
||||||
|
use bevy_image::Image;
|
||||||
use bevy_math::{IVec2, UVec2};
|
use bevy_math::{IVec2, UVec2};
|
||||||
use bevy_reflect::TypePath;
|
use bevy_reflect::TypePath;
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
render_asset::RenderAssetUsages,
|
render_asset::RenderAssetUsages,
|
||||||
render_resource::{Extent3d, TextureDimension, TextureFormat},
|
render_resource::{Extent3d, TextureDimension, TextureFormat},
|
||||||
texture::Image,
|
|
||||||
};
|
};
|
||||||
use bevy_sprite::TextureAtlasLayout;
|
use bevy_sprite::TextureAtlasLayout;
|
||||||
use bevy_utils::HashMap;
|
use bevy_utils::HashMap;
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
//! This module exports types related to rendering glyphs.
|
//! This module exports types related to rendering glyphs.
|
||||||
|
|
||||||
use bevy_asset::Handle;
|
use bevy_asset::Handle;
|
||||||
|
use bevy_image::Image;
|
||||||
use bevy_math::{IVec2, Vec2};
|
use bevy_math::{IVec2, Vec2};
|
||||||
use bevy_reflect::Reflect;
|
use bevy_reflect::Reflect;
|
||||||
use bevy_render::texture::Image;
|
|
||||||
use bevy_sprite::TextureAtlasLayout;
|
use bevy_sprite::TextureAtlasLayout;
|
||||||
|
|
||||||
/// A glyph of a font, typically representing a single character, positioned in screen space.
|
/// A glyph of a font, typically representing a single character, positioned in screen space.
|
||||||
|
|
|
@ -116,6 +116,8 @@ impl Plugin for TextPlugin {
|
||||||
.register_type::<TextColor>()
|
.register_type::<TextColor>()
|
||||||
.register_type::<TextSpan>()
|
.register_type::<TextSpan>()
|
||||||
.register_type::<TextBounds>()
|
.register_type::<TextBounds>()
|
||||||
|
.register_type::<TextLayout>()
|
||||||
|
.register_type::<ComputedTextBlock>()
|
||||||
.init_asset_loader::<FontLoader>()
|
.init_asset_loader::<FontLoader>()
|
||||||
.init_resource::<FontAtlasSets>()
|
.init_resource::<FontAtlasSets>()
|
||||||
.init_resource::<TextPipeline>()
|
.init_resource::<TextPipeline>()
|
||||||
|
|
|
@ -9,9 +9,9 @@ use bevy_ecs::{
|
||||||
reflect::ReflectComponent,
|
reflect::ReflectComponent,
|
||||||
system::{ResMut, Resource},
|
system::{ResMut, Resource},
|
||||||
};
|
};
|
||||||
|
use bevy_image::Image;
|
||||||
use bevy_math::{UVec2, Vec2};
|
use bevy_math::{UVec2, Vec2};
|
||||||
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
||||||
use bevy_render::texture::Image;
|
|
||||||
use bevy_sprite::TextureAtlasLayout;
|
use bevy_sprite::TextureAtlasLayout;
|
||||||
use bevy_utils::HashMap;
|
use bevy_utils::HashMap;
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,8 @@ impl Default for CosmicBuffer {
|
||||||
/// A sub-entity of a [`ComputedTextBlock`].
|
/// A sub-entity of a [`ComputedTextBlock`].
|
||||||
///
|
///
|
||||||
/// Returned by [`ComputedTextBlock::entities`].
|
/// Returned by [`ComputedTextBlock::entities`].
|
||||||
#[derive(Debug, Copy, Clone)]
|
#[derive(Debug, Copy, Clone, Reflect)]
|
||||||
|
#[reflect(Debug)]
|
||||||
pub struct TextEntity {
|
pub struct TextEntity {
|
||||||
/// The entity.
|
/// The entity.
|
||||||
pub entity: Entity,
|
pub entity: Entity,
|
||||||
|
@ -41,7 +42,8 @@ pub struct TextEntity {
|
||||||
/// See [`TextLayout`].
|
/// See [`TextLayout`].
|
||||||
///
|
///
|
||||||
/// Automatically updated by 2d and UI text systems.
|
/// Automatically updated by 2d and UI text systems.
|
||||||
#[derive(Component, Debug, Clone)]
|
#[derive(Component, Debug, Clone, Reflect)]
|
||||||
|
#[reflect(Component, Debug, Default)]
|
||||||
pub struct ComputedTextBlock {
|
pub struct ComputedTextBlock {
|
||||||
/// Buffer for managing text layout and creating [`TextLayoutInfo`].
|
/// Buffer for managing text layout and creating [`TextLayoutInfo`].
|
||||||
///
|
///
|
||||||
|
@ -49,6 +51,7 @@ pub struct ComputedTextBlock {
|
||||||
/// `TextLayoutInfo`. If you want to control the buffer contents manually or use the `cosmic-text`
|
/// `TextLayoutInfo`. If you want to control the buffer contents manually or use the `cosmic-text`
|
||||||
/// editor, then you need to not use `TextLayout` and instead manually implement the conversion to
|
/// editor, then you need to not use `TextLayout` and instead manually implement the conversion to
|
||||||
/// `TextLayoutInfo`.
|
/// `TextLayoutInfo`.
|
||||||
|
#[reflect(ignore)]
|
||||||
pub(crate) buffer: CosmicBuffer,
|
pub(crate) buffer: CosmicBuffer,
|
||||||
/// Entities for all text spans in the block, including the root-level text.
|
/// Entities for all text spans in the block, including the root-level text.
|
||||||
///
|
///
|
||||||
|
|
|
@ -16,13 +16,13 @@ use bevy_ecs::{
|
||||||
query::{Changed, Without},
|
query::{Changed, Without},
|
||||||
system::{Commands, Local, Query, Res, ResMut},
|
system::{Commands, Local, Query, Res, ResMut},
|
||||||
};
|
};
|
||||||
|
use bevy_image::Image;
|
||||||
use bevy_math::Vec2;
|
use bevy_math::Vec2;
|
||||||
use bevy_reflect::{prelude::ReflectDefault, Reflect};
|
use bevy_reflect::{prelude::ReflectDefault, Reflect};
|
||||||
use bevy_render::sync_world::TemporaryRenderEntity;
|
use bevy_render::sync_world::TemporaryRenderEntity;
|
||||||
use bevy_render::view::Visibility;
|
use bevy_render::view::Visibility;
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
primitives::Aabb,
|
primitives::Aabb,
|
||||||
texture::Image,
|
|
||||||
view::{NoFrustumCulling, ViewVisibility},
|
view::{NoFrustumCulling, ViewVisibility},
|
||||||
Extract,
|
Extract,
|
||||||
};
|
};
|
||||||
|
|
|
@ -18,6 +18,7 @@ bevy_core_pipeline = { path = "../bevy_core_pipeline", version = "0.15.0-dev" }
|
||||||
bevy_derive = { path = "../bevy_derive", version = "0.15.0-dev" }
|
bevy_derive = { path = "../bevy_derive", version = "0.15.0-dev" }
|
||||||
bevy_ecs = { path = "../bevy_ecs", version = "0.15.0-dev" }
|
bevy_ecs = { path = "../bevy_ecs", version = "0.15.0-dev" }
|
||||||
bevy_hierarchy = { path = "../bevy_hierarchy", version = "0.15.0-dev" }
|
bevy_hierarchy = { path = "../bevy_hierarchy", version = "0.15.0-dev" }
|
||||||
|
bevy_image = { path = "../bevy_image", version = "0.15.0-dev" }
|
||||||
bevy_input = { path = "../bevy_input", version = "0.15.0-dev" }
|
bevy_input = { path = "../bevy_input", version = "0.15.0-dev" }
|
||||||
bevy_math = { path = "../bevy_math", version = "0.15.0-dev" }
|
bevy_math = { path = "../bevy_math", version = "0.15.0-dev" }
|
||||||
bevy_reflect = { path = "../bevy_reflect", version = "0.15.0-dev", features = [
|
bevy_reflect = { path = "../bevy_reflect", version = "0.15.0-dev", features = [
|
||||||
|
@ -43,6 +44,7 @@ derive_more = { version = "1", default-features = false, features = [
|
||||||
] }
|
] }
|
||||||
nonmax = "0.5"
|
nonmax = "0.5"
|
||||||
smallvec = "1.11"
|
smallvec = "1.11"
|
||||||
|
accesskit = "0.17"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["bevy_ui_picking_backend"]
|
default = ["bevy_ui_picking_backend"]
|
||||||
|
|
|
@ -1,13 +1,10 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
experimental::UiChildren,
|
experimental::UiChildren,
|
||||||
prelude::{Button, Label},
|
prelude::{Button, Label},
|
||||||
widget::{TextUiReader, UiImage},
|
widget::{ImageNode, TextUiReader},
|
||||||
ComputedNode,
|
ComputedNode,
|
||||||
};
|
};
|
||||||
use bevy_a11y::{
|
use bevy_a11y::AccessibilityNode;
|
||||||
accesskit::{Node, Rect, Role},
|
|
||||||
AccessibilityNode,
|
|
||||||
};
|
|
||||||
use bevy_app::{App, Plugin, PostUpdate};
|
use bevy_app::{App, Plugin, PostUpdate};
|
||||||
use bevy_ecs::{
|
use bevy_ecs::{
|
||||||
prelude::{DetectChanges, Entity},
|
prelude::{DetectChanges, Entity},
|
||||||
|
@ -19,6 +16,8 @@ use bevy_ecs::{
|
||||||
use bevy_render::{camera::CameraUpdateSystem, prelude::Camera};
|
use bevy_render::{camera::CameraUpdateSystem, prelude::Camera};
|
||||||
use bevy_transform::prelude::GlobalTransform;
|
use bevy_transform::prelude::GlobalTransform;
|
||||||
|
|
||||||
|
use accesskit::{Node, Rect, Role};
|
||||||
|
|
||||||
fn calc_label(
|
fn calc_label(
|
||||||
text_reader: &mut TextUiReader,
|
text_reader: &mut TextUiReader,
|
||||||
children: impl Iterator<Item = Entity>,
|
children: impl Iterator<Item = Entity>,
|
||||||
|
@ -92,7 +91,10 @@ fn button_changed(
|
||||||
|
|
||||||
fn image_changed(
|
fn image_changed(
|
||||||
mut commands: Commands,
|
mut commands: Commands,
|
||||||
mut query: Query<(Entity, Option<&mut AccessibilityNode>), (Changed<UiImage>, Without<Button>)>,
|
mut query: Query<
|
||||||
|
(Entity, Option<&mut AccessibilityNode>),
|
||||||
|
(Changed<ImageNode>, Without<Button>),
|
||||||
|
>,
|
||||||
ui_children: UiChildren,
|
ui_children: UiChildren,
|
||||||
mut text_reader: TextUiReader,
|
mut text_reader: TextUiReader,
|
||||||
) {
|
) {
|
||||||
|
|
|
@ -463,11 +463,11 @@ mod tests {
|
||||||
use bevy_hierarchy::{
|
use bevy_hierarchy::{
|
||||||
despawn_with_children_recursive, BuildChildren, ChildBuild, Children, Parent,
|
despawn_with_children_recursive, BuildChildren, ChildBuild, Children, Parent,
|
||||||
};
|
};
|
||||||
|
use bevy_image::Image;
|
||||||
use bevy_math::{Rect, UVec2, Vec2};
|
use bevy_math::{Rect, UVec2, Vec2};
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
camera::{ManualTextureViews, OrthographicProjection},
|
camera::{ManualTextureViews, OrthographicProjection},
|
||||||
prelude::Camera,
|
prelude::Camera,
|
||||||
texture::Image,
|
|
||||||
};
|
};
|
||||||
use bevy_transform::{
|
use bevy_transform::{
|
||||||
prelude::GlobalTransform,
|
prelude::GlobalTransform,
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue