update dependencies

This commit is contained in:
janis 2026-10-22 20:13:58 +02:00
parent 7b6da19a77
commit d942589108
Signed by: janis
SSH key fingerprint: SHA256:bB1qbbqmDXZNT0KKD5c2Dfjg53JGhj7B3CFcLIzSqq8
10 changed files with 114 additions and 76 deletions

View file

@ -28,13 +28,13 @@ debug = true
[workspace.dependencies] [workspace.dependencies]
anyhow = "1.0.89" anyhow = "1.0.89"
thiserror = "2.0" thiserror = "2.0"
derive_more = { version = "1.0.0", features = ["deref", "debug", "deref_mut"] } derive_more = { version = "2", features = ["deref", "debug", "deref_mut"] }
tracing = "0.1" tracing = "0.1"
tracing-subscriber = {version ="0.3", features = ["env-filter"]} tracing-subscriber = {version ="0.3", features = ["env-filter"]}
glam = {version = "0.29.0", features = ["bytemuck"]} glam = { version = "0.33", features = ["bytemuck"] }
rand = "0.9" rand = "0.10"
bitflags = "2.6" bitflags = "2.6"
thread_local = "1.1.8" thread_local = "1.1.8"
@ -48,7 +48,7 @@ vk-sync = "0.1.6"
arrayvec = "0.7.6" arrayvec = "0.7.6"
tinyvec = "1.8" tinyvec = "1.8"
indexmap = "2" indexmap = "2"
petgraph = "0.7" petgraph = "0.8"
itertools = "0.14.0" itertools = "0.14.0"
ahash = "0.8" ahash = "0.8"
@ -68,23 +68,23 @@ raw-window-handle = "0.6"
egui = "0.32" egui = "0.32"
egui_winit_platform = "0.27" egui_winit_platform = "0.27"
bevy = { version = "0.19.0-dev", git = "https://github.com/bevyengine/bevy" } bevy = { path = "/var/code/bevy-engine/bevy" }
bevy_app = { version = "0.19.0-dev", git = "https://github.com/bevyengine/bevy" } bevy_app = { path = "/var/code/bevy-engine/bevy/crates/bevy_app" }
bevy_asset = { version = "0.19.0-dev", git = "https://github.com/bevyengine/bevy" } bevy_asset = { path = "/var/code/bevy-engine/bevy/crates/bevy_asset" }
bevy_derive = { version = "0.19.0-dev", git = "https://github.com/bevyengine/bevy" } bevy_derive = { path = "/var/code/bevy-engine/bevy/crates/bevy_derive" }
bevy_ecs = { version = "0.19.0-dev", git = "https://github.com/bevyengine/bevy", features = ["multi_threaded", "trace"]} bevy_ecs = { path = "/var/code/bevy-engine/bevy/crates/bevy_ecs", features = ["multi_threaded", "trace"]}
bevy_hierarchy = { version = "0.19.0-dev", git = "https://github.com/bevyengine/bevy" } bevy_hierarchy = { path = "/var/code/bevy-engine/bevy/crates/bevy_hierarchy" }
bevy_log = { version = "0.19.0-dev", git = "https://github.com/bevyengine/bevy" } bevy_log = { path = "/var/code/bevy-engine/bevy/crates/bevy_log" }
bevy_math = { version = "0.19.0-dev", git = "https://github.com/bevyengine/bevy" } bevy_math = { path = "/var/code/bevy-engine/bevy/crates/bevy_math" }
bevy_platform = { version = "0.19.0-dev", git = "https://github.com/bevyengine/bevy" } bevy_platform = { path = "/var/code/bevy-engine/bevy/crates/bevy_platform" }
bevy_reflect = { version = "0.19.0-dev", git = "https://github.com/bevyengine/bevy" } bevy_reflect = { path = "/var/code/bevy-engine/bevy/crates/bevy_reflect" }
bevy_tasks = { version = "0.19.0-dev", git = "https://github.com/bevyengine/bevy" } bevy_tasks = { path = "/var/code/bevy-engine/bevy/crates/bevy_tasks" }
bevy_time = { version = "0.19.0-dev", git = "https://github.com/bevyengine/bevy" } bevy_time = { path = "/var/code/bevy-engine/bevy/crates/bevy_time" }
bevy_transform = { version = "0.19.0-dev", git = "https://github.com/bevyengine/bevy" } bevy_transform = { path = "/var/code/bevy-engine/bevy/crates/bevy_transform" }
bevy_utils = { version = "0.19.0-dev", git = "https://github.com/bevyengine/bevy" } bevy_utils = { path = "/var/code/bevy-engine/bevy/crates/bevy_utils" }
bevy_window = { version = "0.19.0-dev", git = "https://github.com/bevyengine/bevy" } bevy_window = { path = "/var/code/bevy-engine/bevy/crates/bevy_window" }
bevy_winit = { version = "0.19.0-dev", git = "https://github.com/bevyengine/bevy" } bevy_winit = { path = "/var/code/bevy-engine/bevy/crates/bevy_winit" }
[[example]] [[example]]
name = "bevy_integration" name = "bevy_integration"
path = "examples/bevy_integration.rs" path = "examples/bevy_integration.rs"

View file

@ -1 +1,3 @@
*.ttf *.ttf
!Roboto/Roboto-VariableFont_wdth,wght.ttf
!Noto_Sans_SC/NotoSansSC-VariableFont_wght.ttf

View file

@ -26,3 +26,7 @@ for filename in "${!FONTS[@]}"; do
echo "Fetching $filename from $url" echo "Fetching $filename from $url"
curl -L "$url" -o "$filename" curl -L "$url" -o "$filename"
done done
mkdir -p Roboto Noto_Sans_SC
cp Roboto.ttf Roboto/Roboto-VariableFont_wdth,wght.ttf
cp NotoSansSC.ttf Noto_Sans_SC/NotoSansSC-VariableFont_wght.ttf

View file

@ -2,10 +2,9 @@ use crate::extract_plugin::MainWorld;
use bevy_ecs::{ use bevy_ecs::{
change_detection::Tick, change_detection::Tick,
prelude::*, prelude::*,
query::FilteredAccessSet,
system::{ system::{
ReadOnlySystemParam, SystemMeta, SystemParam, SystemParamItem, SystemParamValidationError, ReadOnlySystemParam, SystemAccess, SystemMeta, SystemParam, SystemParamAccessConflict,
SystemState, SystemParamItem, SystemParamValidationError, SystemState,
}, },
world::unsafe_world_cell::UnsafeWorldCell, world::unsafe_world_cell::UnsafeWorldCell,
}; };
@ -83,15 +82,9 @@ where
fn init_access( fn init_access(
state: &Self::State, state: &Self::State,
system_meta: &mut SystemMeta, system_meta: &mut SystemMeta,
component_access_set: &mut FilteredAccessSet, system_access: &mut SystemAccess,
world: &mut World, ) -> Result<(), SystemParamAccessConflict> {
) { Res::<MainWorld>::init_access(&state.main_world_state, system_meta, system_access)
Res::<MainWorld>::init_access(
&state.main_world_state,
system_meta,
component_access_set,
world,
);
} }
#[inline] #[inline]

View file

@ -93,12 +93,12 @@ impl Plugin for SyncWorldPlugin {
fn build(&self, app: &mut bevy_app::App) { fn build(&self, app: &mut bevy_app::App) {
app.init_resource::<PendingSyncEntity>(); app.init_resource::<PendingSyncEntity>();
app.add_observer( app.add_observer(
|add: On<Add, SyncToRenderWorld>, mut pending: ResMut<PendingSyncEntity>| { |add: On<Add<SyncToRenderWorld>>, mut pending: ResMut<PendingSyncEntity>| {
pending.push(EntityRecord::Added(add.entity)); pending.push(EntityRecord::Added(add.entity));
}, },
); );
app.add_observer( app.add_observer(
|remove: On<Remove, SyncToRenderWorld>, |remove: On<Remove<SyncToRenderWorld>>,
mut pending: ResMut<PendingSyncEntity>, mut pending: ResMut<PendingSyncEntity>,
query: Query<&RenderEntity>| { query: Query<&RenderEntity>| {
if let Ok(e) = query.get(remove.entity) { if let Ok(e) = query.get(remove.entity) {
@ -278,15 +278,15 @@ mod render_entities_world_query_impls {
use super::{MainEntity, RenderEntity}; use super::{MainEntity, RenderEntity};
use bevy_ecs::{ use bevy_ecs::{
archetype::Archetype, archetype::{Archetype, ArchetypeId},
change_detection::Tick, change_detection::Tick,
component::{ComponentId, Components}, component::{ComponentId, Components},
entity::Entity, entity::Entity,
query::{ query::{
ArchetypeQueryData, FilteredAccess, IterQueryData, QueryData, ReadOnlyQueryData, ArchetypeQueryData, FilteredAccess, FilteredAccessSet, IterQueryData, QueryData,
ReleaseStateQueryData, SingleEntityQueryData, WorldQuery, ReadOnlyQueryData, ReleaseStateQueryData, SingleEntityQueryData, WorldQuery,
}, },
storage::{Table, TableRow}, storage::{Table, TableId, TableRow},
world::{World, unsafe_world_cell::UnsafeWorldCell}, world::{World, unsafe_world_cell::UnsafeWorldCell},
}; };
@ -305,14 +305,12 @@ mod render_entities_world_query_impls {
#[inline] #[inline]
unsafe fn init_fetch<'w, 's>( unsafe fn init_fetch<'w, 's>(
world: UnsafeWorldCell<'w>, world: UnsafeWorldCell<'w>,
component_id: &'s ComponentId, state: &'s Self::State,
last_run: Tick, last_run: Tick,
this_run: Tick, this_run: Tick,
) -> Self::Fetch<'w> { ) -> Self::Fetch<'w> {
// SAFETY: defers to the `&T` implementation, with T set to `RenderEntity`. // SAFETY: defers to the `&T` implementation, with T set to `RenderEntity`.
unsafe { unsafe { <&RenderEntity as WorldQuery>::init_fetch(world, state, last_run, this_run) }
<&RenderEntity as WorldQuery>::init_fetch(world, component_id, last_run, this_run)
}
} }
const IS_DENSE: bool = <&'static RenderEntity as WorldQuery>::IS_DENSE; const IS_DENSE: bool = <&'static RenderEntity as WorldQuery>::IS_DENSE;
@ -320,28 +318,45 @@ mod render_entities_world_query_impls {
#[inline] #[inline]
unsafe fn set_archetype<'w, 's>( unsafe fn set_archetype<'w, 's>(
fetch: &mut Self::Fetch<'w>, fetch: &mut Self::Fetch<'w>,
component_id: &'s ComponentId, state: &'s Self::State,
archetype_id: ArchetypeId,
archetype: &'w Archetype, archetype: &'w Archetype,
table_id: TableId,
table: &'w Table, table: &'w Table,
) { ) {
// SAFETY: defers to the `&T` implementation, with T set to `RenderEntity`. // SAFETY: defers to the `&T` implementation, with T set to `RenderEntity`.
unsafe { unsafe {
<&RenderEntity as WorldQuery>::set_archetype(fetch, component_id, archetype, table); <&RenderEntity as WorldQuery>::set_archetype(
fetch,
state,
archetype_id,
archetype,
table_id,
table,
);
} }
} }
#[inline] #[inline]
unsafe fn set_table<'w, 's>( unsafe fn set_table<'w, 's>(
fetch: &mut Self::Fetch<'w>, fetch: &mut Self::Fetch<'w>,
&component_id: &'s ComponentId, state: &'s Self::State,
table_id: TableId,
table: &'w Table, table: &'w Table,
) { ) {
// SAFETY: defers to the `&T` implementation, with T set to `RenderEntity`. // SAFETY: defers to the `&T` implementation, with T set to `RenderEntity`.
unsafe { <&RenderEntity as WorldQuery>::set_table(fetch, &component_id, table) } unsafe { <&RenderEntity as WorldQuery>::set_table(fetch, state, table_id, table) }
} }
fn update_component_access(&component_id: &ComponentId, access: &mut FilteredAccess) { fn update_component_access(state: &Self::State, access: &mut FilteredAccess) {
<&RenderEntity as WorldQuery>::update_component_access(&component_id, access); <&RenderEntity as WorldQuery>::update_component_access(state, access);
}
fn init_nested_access(
_state: &Self::State,
_component_access_set: &mut FilteredAccessSet,
) -> Result<(), FilteredAccessSet> {
Ok(())
} }
fn init_state(world: &mut World) -> ComponentId { fn init_state(world: &mut World) -> ComponentId {
@ -353,11 +368,13 @@ mod render_entities_world_query_impls {
} }
fn matches_component_set( fn matches_component_set(
&state: &ComponentId, state: &Self::State,
set_contains_id: &impl Fn(ComponentId) -> bool, set_contains_id: &impl Fn(ComponentId) -> bool,
) -> bool { ) -> bool {
<&RenderEntity as WorldQuery>::matches_component_set(&state, set_contains_id) <&RenderEntity as WorldQuery>::matches_component_set(state, set_contains_id)
} }
fn update_archetypes(_state: &mut Self::State, _world: UnsafeWorldCell) {}
} }
// SAFETY: Component access of Self::ReadOnly is a subset of Self. // SAFETY: Component access of Self::ReadOnly is a subset of Self.
@ -425,14 +442,12 @@ mod render_entities_world_query_impls {
#[inline] #[inline]
unsafe fn init_fetch<'w, 's>( unsafe fn init_fetch<'w, 's>(
world: UnsafeWorldCell<'w>, world: UnsafeWorldCell<'w>,
component_id: &'s ComponentId, state: &'s Self::State,
last_run: Tick, last_run: Tick,
this_run: Tick, this_run: Tick,
) -> Self::Fetch<'w> { ) -> Self::Fetch<'w> {
// SAFETY: defers to the `&T` implementation, with T set to `MainEntity`. // SAFETY: defers to the `&T` implementation, with T set to `MainEntity`.
unsafe { unsafe { <&MainEntity as WorldQuery>::init_fetch(world, state, last_run, this_run) }
<&MainEntity as WorldQuery>::init_fetch(world, component_id, last_run, this_run)
}
} }
const IS_DENSE: bool = <&'static MainEntity as WorldQuery>::IS_DENSE; const IS_DENSE: bool = <&'static MainEntity as WorldQuery>::IS_DENSE;
@ -440,28 +455,45 @@ mod render_entities_world_query_impls {
#[inline] #[inline]
unsafe fn set_archetype<'w, 's>( unsafe fn set_archetype<'w, 's>(
fetch: &mut Self::Fetch<'w>, fetch: &mut Self::Fetch<'w>,
component_id: &ComponentId, state: &'s Self::State,
archetype_id: ArchetypeId,
archetype: &'w Archetype, archetype: &'w Archetype,
table_id: TableId,
table: &'w Table, table: &'w Table,
) { ) {
// SAFETY: defers to the `&T` implementation, with T set to `MainEntity`. // SAFETY: defers to the `&T` implementation, with T set to `MainEntity`.
unsafe { unsafe {
<&MainEntity as WorldQuery>::set_archetype(fetch, component_id, archetype, table); <&MainEntity as WorldQuery>::set_archetype(
fetch,
state,
archetype_id,
archetype,
table_id,
table,
);
} }
} }
#[inline] #[inline]
unsafe fn set_table<'w, 's>( unsafe fn set_table<'w, 's>(
fetch: &mut Self::Fetch<'w>, fetch: &mut Self::Fetch<'w>,
&component_id: &'s ComponentId, state: &'s Self::State,
table_id: TableId,
table: &'w Table, table: &'w Table,
) { ) {
// SAFETY: defers to the `&T` implementation, with T set to `MainEntity`. // SAFETY: defers to the `&T` implementation, with T set to `MainEntity`.
unsafe { <&MainEntity as WorldQuery>::set_table(fetch, &component_id, table) } unsafe { <&MainEntity as WorldQuery>::set_table(fetch, state, table_id, table) }
} }
fn update_component_access(&component_id: &ComponentId, access: &mut FilteredAccess) { fn update_component_access(state: &Self::State, access: &mut FilteredAccess) {
<&MainEntity as WorldQuery>::update_component_access(&component_id, access); <&MainEntity as WorldQuery>::update_component_access(state, access);
}
fn init_nested_access(
_state: &Self::State,
_component_access_set: &mut FilteredAccessSet,
) -> Result<(), FilteredAccessSet> {
Ok(())
} }
fn init_state(world: &mut World) -> ComponentId { fn init_state(world: &mut World) -> ComponentId {
@ -473,11 +505,13 @@ mod render_entities_world_query_impls {
} }
fn matches_component_set( fn matches_component_set(
&state: &ComponentId, state: &Self::State,
set_contains_id: &impl Fn(ComponentId) -> bool, set_contains_id: &impl Fn(ComponentId) -> bool,
) -> bool { ) -> bool {
<&MainEntity as WorldQuery>::matches_component_set(&state, set_contains_id) <&MainEntity as WorldQuery>::matches_component_set(state, set_contains_id)
} }
fn update_archetypes(_state: &mut Self::State, _world: UnsafeWorldCell) {}
} }
// SAFETY: Component access of Self::ReadOnly is a subset of Self. // SAFETY: Component access of Self::ReadOnly is a subset of Self.
@ -558,12 +592,12 @@ mod tests {
main_world.init_resource::<PendingSyncEntity>(); main_world.init_resource::<PendingSyncEntity>();
main_world.add_observer( main_world.add_observer(
|add: On<Add, SyncToRenderWorld>, mut pending: ResMut<PendingSyncEntity>| { |add: On<Add<SyncToRenderWorld>>, mut pending: ResMut<PendingSyncEntity>| {
pending.push(EntityRecord::Added(add.entity)); pending.push(EntityRecord::Added(add.entity));
}, },
); );
main_world.add_observer( main_world.add_observer(
|remove: On<Remove, SyncToRenderWorld>, |remove: On<Remove<SyncToRenderWorld>>,
mut pending: ResMut<PendingSyncEntity>, mut pending: ResMut<PendingSyncEntity>,
query: Query<&RenderEntity>| { query: Query<&RenderEntity>| {
if let Ok(e) = query.get(remove.entity) { if let Ok(e) = query.get(remove.entity) {

View file

@ -5,7 +5,10 @@ use std::{
use bevy_ecs::{entity::EntityHashMap, prelude::*}; use bevy_ecs::{entity::EntityHashMap, prelude::*};
use bevy_window::{PrimaryWindow, RawHandleWrapper, Window, WindowClosing}; use bevy_window::{PrimaryWindow, RawHandleWrapper, Window, WindowClosing};
use renderer::{ash::vk, swapchain::WindowSurface}; use renderer::{
ash::vk,
swapchain::{Surface, SwapchainConfiguration},
};
use crate::{RenderDevice, extract_param::Extract}; use crate::{RenderDevice, extract_param::Extract};
@ -39,7 +42,7 @@ impl DerefMut for ExtractedWindows {
} }
} }
#[derive(Default, Resource)] #[derive(Default)]
pub struct Surfaces { pub struct Surfaces {
surfaces: EntityHashMap<SurfaceData>, surfaces: EntityHashMap<SurfaceData>,
configured: HashSet<Entity>, configured: HashSet<Entity>,
@ -57,11 +60,11 @@ impl Surfaces {
} }
pub struct SurfaceData { pub struct SurfaceData {
pub surface: WindowSurface, pub surface: Surface,
} }
impl Deref for SurfaceData { impl Deref for SurfaceData {
type Target = WindowSurface; type Target = Surface;
fn deref(&self) -> &Self::Target { fn deref(&self) -> &Self::Target {
&self.surface &self.surface
@ -74,7 +77,7 @@ pub(crate) fn extract_windows(
mut closing: Extract<MessageReader<WindowClosing>>, mut closing: Extract<MessageReader<WindowClosing>>,
windows: Extract<Query<(Entity, &RawHandleWrapper, &Window, Option<&PrimaryWindow>)>>, windows: Extract<Query<(Entity, &RawHandleWrapper, &Window, Option<&PrimaryWindow>)>>,
mut removed: Extract<RemovedComponents<RawHandleWrapper>>, mut removed: Extract<RemovedComponents<RawHandleWrapper>>,
mut surfaces: ResMut<Surfaces>, mut surfaces: NonSendMut<Surfaces>,
) { ) {
for (entity, handle, window, primary) in windows.iter() { for (entity, handle, window, primary) in windows.iter() {
if primary.is_some() { if primary.is_some() {
@ -116,7 +119,7 @@ pub(crate) fn extract_windows(
pub(crate) fn need_surface_configuration( pub(crate) fn need_surface_configuration(
windows: Res<ExtractedWindows>, windows: Res<ExtractedWindows>,
surfaces: Res<Surfaces>, surfaces: NonSend<Surfaces>,
) -> bool { ) -> bool {
windows windows
.windows .windows
@ -126,7 +129,7 @@ pub(crate) fn need_surface_configuration(
pub(crate) fn configure_surfaces( pub(crate) fn configure_surfaces(
windows: Res<ExtractedWindows>, windows: Res<ExtractedWindows>,
mut surfaces: ResMut<Surfaces>, mut surfaces: NonSendMut<Surfaces>,
device: Res<RenderDevice>, device: Res<RenderDevice>,
) { ) {
for window in windows.windows.values() { for window in windows.windows.values() {

View file

@ -1,6 +1,6 @@
use std::collections::BTreeMap; use std::collections::BTreeMap;
use rand::{Rng, SeedableRng}; use rand::{RngExt, SeedableRng};
use renderer::{ use renderer::{
Renderer2, render_graph, Renderer2, render_graph,
swapchain::{Surface, SwapchainConfiguration}, swapchain::{Surface, SwapchainConfiguration},
@ -106,7 +106,8 @@ impl WinitState {
use renderer::ash::vk::Handle; use renderer::ash::vk::Handle;
let [r, g, b]: [f32; 3] = let [r, g, b]: [f32; 3] =
rand::prelude::StdRng::seed_from_u64(window.surface.raw().as_raw()).random(); rand::prelude::StdRng::seed_from_u64(window.surface.raw().as_raw())
.random::<[f32; 3]>();
render_graph::clear_pass(rg, renderer::util::Rgba([r, g, b, 1.0]), framebuffer); render_graph::clear_pass(rg, renderer::util::Rgba([r, g, b, 1.0]), framebuffer);
egui_pre_pass( egui_pre_pass(
&dev, &dev,

View file

@ -338,7 +338,7 @@ impl Instance {
}) })
} }
pub(crate) fn choose_adapter_default( pub fn choose_adapter_default(
&self, &self,
surface: Option<&Surface>, surface: Option<&Surface>,
required_extensions: &[Extension], required_extensions: &[Extension],

View file

@ -2,6 +2,7 @@
negative_impls, negative_impls,
map_try_insert, map_try_insert,
debug_closure_helpers, debug_closure_helpers,
core_io,
core_io_borrowed_buf, core_io_borrowed_buf,
slice_partition_dedup slice_partition_dedup
)] )]

View file

@ -42,7 +42,7 @@ impl std::fmt::Debug for FontData {
} }
} }
#[derive(Debug, Default)] #[derive(Debug, Default, TypePath)]
struct FontLoader; struct FontLoader;
#[derive(thiserror::Error, Debug)] #[derive(thiserror::Error, Debug)]