update bevy 0.11 - fix compile errors

This commit is contained in:
johnny-smitherson
2023-10-23 16:21:07 +00:00
parent 82416e3ca6
commit 780ba4a216
20 changed files with 148 additions and 108 deletions

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "rapier2d-f64" name = "rapier2d-f64"
version = "0.17.2" version = "0.18.0"
authors = [ "Sébastien Crozet <developer@crozet.re>" ] authors = [ "Sébastien Crozet <developer@crozet.re>" ]
description = "2-dimensional physics engine in Rust." description = "2-dimensional physics engine in Rust."
documentation = "https://docs.rs/rapier2d" documentation = "https://docs.rs/rapier2d"

View File

@@ -1,9 +1,9 @@
[package] [package]
name = "rapier2d" name = "rapier2d"
version = "0.17.2" version = "0.18.0"
authors = [ "Sébastien Crozet <developer@crozet.re>" ] authors = [ "Sébastien Crozet <developer@crozet.re>" ]
description = "2-dimensional physics engine in Rust." description = "3-dimensional physics engine in Rust."
documentation = "https://docs.rs/rapier2d" documentation = "https://docs.rs/rapier3d"
homepage = "https://rapier.rs" homepage = "https://rapier.rs"
repository = "https://github.com/dimforge/rapier" repository = "https://github.com/dimforge/rapier"
readme = "README.md" readme = "README.md"

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "rapier3d-f64" name = "rapier3d-f64"
version = "0.17.2" version = "0.18.0"
authors = [ "Sébastien Crozet <developer@crozet.re>" ] authors = [ "Sébastien Crozet <developer@crozet.re>" ]
description = "3-dimensional physics engine in Rust." description = "3-dimensional physics engine in Rust."
documentation = "https://docs.rs/rapier3d" documentation = "https://docs.rs/rapier3d"

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "rapier3d" name = "rapier3d"
version = "0.17.2" version = "0.18.0"
authors = [ "Sébastien Crozet <developer@crozet.re>" ] authors = [ "Sébastien Crozet <developer@crozet.re>" ]
description = "3-dimensional physics engine in Rust." description = "3-dimensional physics engine in Rust."
documentation = "https://docs.rs/rapier3d" documentation = "https://docs.rs/rapier3d"

View File

@@ -40,21 +40,24 @@ bincode = "1"
Inflector = "0.11" Inflector = "0.11"
md5 = "0.7" md5 = "0.7"
bevy_egui = "0.18" bevy_egui = "0.22"
bevy_ecs = "0.9" bevy_ecs = "0.11"
bevy_core_pipeline = "0.11"
bevy_pbr = "0.11"
bevy_sprite = "0.11"
#bevy_prototype_debug_lines = "0.7" #bevy_prototype_debug_lines = "0.7"
# Dependencies for native only. # Dependencies for native only.
[target.'cfg(not(target_arch = "wasm32"))'.dependencies] [target.'cfg(not(target_arch = "wasm32"))'.dependencies]
bevy = {version = "0.9", default-features = false, features = ["bevy_winit", "render", "x11"]} bevy = {version = "0.11", default-features = false, features = ["bevy_winit", "x11"]}
# Dependencies for WASM only. # Dependencies for WASM only.
[target.'cfg(target_arch = "wasm32")'.dependencies] [target.'cfg(target_arch = "wasm32")'.dependencies]
bevy = {version = "0.9", default-features = false, features = ["bevy_winit", "render"]} bevy = {version = "0.11", default-features = false, features = ["bevy_winit"]}
#bevy_webgl2 = "0.5" #bevy_webgl2 = "0.5"
[dependencies.rapier] [dependencies.rapier]
package = "rapier2d-f64" package = "rapier2d-f64"
path = "../rapier2d-f64" path = "../rapier2d-f64"
version = "0.17.0" version = "0.18.0"
features = [ "serde-serialize", "debug-render", "profiler" ] features = [ "serde-serialize", "debug-render", "profiler" ]

View File

@@ -40,21 +40,24 @@ bincode = "1"
Inflector = "0.11" Inflector = "0.11"
md5 = "0.7" md5 = "0.7"
bevy_egui = "0.18" bevy_egui = "0.22"
bevy_ecs = "0.9" bevy_ecs = "0.11"
bevy_core_pipeline = "0.11"
bevy_pbr = "0.11"
bevy_sprite = "0.11"
#bevy_prototype_debug_lines = "0.7" #bevy_prototype_debug_lines = "0.7"
# Dependencies for native only. # Dependencies for native only.
[target.'cfg(not(target_arch = "wasm32"))'.dependencies] [target.'cfg(not(target_arch = "wasm32"))'.dependencies]
bevy = {version = "0.9", default-features = false, features = ["bevy_winit", "render", "x11"]} bevy = {version = "0.11", default-features = false, features = ["bevy_winit", "x11"]}
# Dependencies for WASM only. # Dependencies for WASM only.
[target.'cfg(target_arch = "wasm32")'.dependencies] [target.'cfg(target_arch = "wasm32")'.dependencies]
bevy = {version = "0.9", default-features = false, features = ["bevy_winit", "render"]} bevy = {version = "0.11", default-features = false, features = ["bevy_winit",]}
#bevy_webgl2 = "0.5" #bevy_webgl2 = "0.5"
[dependencies.rapier] [dependencies.rapier]
package = "rapier2d" package = "rapier2d"
path = "../rapier2d" path = "../rapier2d"
version = "0.17.0" version = "0.18.0"
features = [ "serde-serialize", "debug-render", "profiler" ] features = [ "serde-serialize", "debug-render", "profiler" ]

View File

@@ -39,21 +39,24 @@ md5 = "0.7"
Inflector = "0.11" Inflector = "0.11"
serde = { version = "1", features = [ "derive" ] } serde = { version = "1", features = [ "derive" ] }
bevy_egui = "0.18" bevy_egui = "0.22"
bevy_ecs = "0.9" bevy_ecs = "0.11"
bevy_core_pipeline = "0.11"
bevy_pbr = "0.11"
bevy_sprite = "0.11"
#bevy_prototype_debug_lines = { version = "0.7", features = [ "3d" ] } #bevy_prototype_debug_lines = { version = "0.7", features = [ "3d" ] }
# Dependencies for native only. # Dependencies for native only.
[target.'cfg(not(target_arch = "wasm32"))'.dependencies] [target.'cfg(not(target_arch = "wasm32"))'.dependencies]
bevy = {version = "0.9", default-features = false, features = ["bevy_winit", "render", "x11"]} bevy = {version = "0.11", default-features = false, features = ["bevy_winit", "x11"]}
# Dependencies for WASM only. # Dependencies for WASM only.
[target.'cfg(target_arch = "wasm32")'.dependencies] [target.'cfg(target_arch = "wasm32")'.dependencies]
bevy = {version = "0.9", default-features = false, features = ["bevy_winit", "render"]} bevy = {version = "0.11", default-features = false, features = ["bevy_winit"]}
#bevy_webgl2 = "0.5" #bevy_webgl2 = "0.5"
[dependencies.rapier] [dependencies.rapier]
package = "rapier3d-f64" package = "rapier3d-f64"
path = "../rapier3d-f64" path = "../rapier3d-f64"
version = "0.17.0" version = "0.18.0"
features = [ "serde-serialize", "debug-render", "profiler" ] features = [ "serde-serialize", "debug-render", "profiler" ]

View File

@@ -33,31 +33,34 @@ rand = "0.8"
rand_pcg = "0.3" rand_pcg = "0.3"
instant = { version = "0.1", features = [ "web-sys", "now" ]} instant = { version = "0.1", features = [ "web-sys", "now" ]}
bitflags = "1" bitflags = "1"
glam = { version = "0.20", optional = true } # For Physx glam = { version = "0.24", optional = true } # For Physx
num_cpus = { version = "1", optional = true } num_cpus = { version = "1", optional = true }
physx = { version = "0.16", features = [ "glam" ], optional = true } physx = { version = "0.19", features = [ "glam" ], optional = true }
physx-sys = { version = "0.8", optional = true } physx-sys = { version = "0.11", optional = true }
crossbeam = "0.8" crossbeam = "0.8"
bincode = "1" bincode = "1"
md5 = "0.7" md5 = "0.7"
Inflector = "0.11" Inflector = "0.11"
serde = { version = "1", features = [ "derive" ] } serde = { version = "1", features = [ "derive" ] }
bevy_egui = "0.18" bevy_egui = "0.22"
bevy_ecs = "0.9" bevy_ecs = "0.11"
bevy_core_pipeline = "0.11"
bevy_pbr = "0.11"
bevy_sprite = "0.11"
#bevy_prototype_debug_lines = { version = "0.7", features = [ "3d" ] } #bevy_prototype_debug_lines = { version = "0.7", features = [ "3d" ] }
# Dependencies for native only. # Dependencies for native only.
[target.'cfg(not(target_arch = "wasm32"))'.dependencies] [target.'cfg(not(target_arch = "wasm32"))'.dependencies]
bevy = {version = "0.9", default-features = false, features = ["bevy_winit", "render", "x11"]} bevy = {version = "0.11", default-features = false, features = ["bevy_winit", "x11"]}
# Dependencies for WASM only. # Dependencies for WASM only.
[target.'cfg(target_arch = "wasm32")'.dependencies] [target.'cfg(target_arch = "wasm32")'.dependencies]
bevy = {version = "0.9", default-features = false, features = ["bevy_winit", "render"]} bevy = {version = "0.11", default-features = false, features = ["bevy_winit"]}
#bevy_webgl2 = "0.5" #bevy_webgl2 = "0.5"
[dependencies.rapier] [dependencies.rapier]
package = "rapier3d" package = "rapier3d"
path = "../rapier3d" path = "../rapier3d"
version = "0.17.0" version = "0.18.0"
features = [ "serde-serialize", "debug-render", "profiler" ] features = [ "serde-serialize", "debug-render", "profiler" ]

View File

@@ -16,7 +16,7 @@ rand = "0.8"
getrandom = { version = "0.2", features = [ "js" ] } getrandom = { version = "0.2", features = [ "js" ] }
Inflector = "0.11" Inflector = "0.11"
wasm-bindgen = "0.2" wasm-bindgen = "0.2"
obj-rs = { version = "0.6", default-features = false } obj-rs = { version = "0.7", default-features = false }
bincode = "1" bincode = "1"
serde = "1" serde = "1"

View File

@@ -17,7 +17,7 @@ rand = "0.8"
getrandom = { version = "0.2", features = [ "js" ] } getrandom = { version = "0.2", features = [ "js" ] }
Inflector = "0.11" Inflector = "0.11"
wasm-bindgen = "0.2" wasm-bindgen = "0.2"
obj-rs = { version = "0.6", default-features = false } obj-rs = { version = "0.7", default-features = false }
serde = "1" serde = "1"
bincode = "1" bincode = "1"

View File

@@ -87,8 +87,8 @@ impl OrbitCameraPlugin {
} }
impl Plugin for OrbitCameraPlugin { impl Plugin for OrbitCameraPlugin {
fn build(&self, app: &mut App) { fn build(&self, app: &mut App) {
app.add_system(Self::mouse_motion_system) app.add_systems(Update, Self::mouse_motion_system)
.add_system(Self::zoom_system) .add_systems(Update, Self::zoom_system)
.add_system(Self::update_transform_system); .add_systems(Update, Self::update_transform_system);
} }
} }

View File

@@ -113,8 +113,8 @@ impl OrbitCameraPlugin {
} }
impl Plugin for OrbitCameraPlugin { impl Plugin for OrbitCameraPlugin {
fn build(&self, app: &mut App) { fn build(&self, app: &mut App) {
app.add_system(Self::mouse_motion_system) app.add_systems(Update, Self::mouse_motion_system)
.add_system(Self::zoom_system) .add_systems(Update, Self::zoom_system)
.add_system(Self::update_transform_system); .add_systems(Update, Self::update_transform_system);
} }
} }

View File

@@ -20,17 +20,16 @@ impl Default for RapierDebugRenderPlugin {
} }
} }
} }
impl Plugin for RapierDebugRenderPlugin { impl Plugin for RapierDebugRenderPlugin {
fn build(&self, app: &mut App) { fn build(&self, app: &mut App) {
app.add_plugin(crate::lines::DebugLinesPlugin::with_depth_test( app.add_plugins(crate::lines::DebugLinesPlugin::with_depth_test(
self.depth_test, self.depth_test,
)) ))
.insert_resource(DebugRenderPipelineResource(DebugRenderPipeline::new( .insert_resource(DebugRenderPipelineResource(DebugRenderPipeline::new(
Default::default(), Default::default(),
!DebugRenderMode::RIGID_BODY_AXES & !DebugRenderMode::COLLIDER_AABBS, !DebugRenderMode::RIGID_BODY_AXES & !DebugRenderMode::COLLIDER_AABBS,
))) )))
.add_system_to_stage(CoreStage::Update, debug_render_scene); .add_systems(Update, debug_render_scene);
} }
} }

View File

@@ -13,6 +13,8 @@ use rapier::math::{Isometry, Real, Vector};
//#[cfg(feature = "dim2")] //#[cfg(feature = "dim2")]
//use crate::objects::polyline::Polyline; //use crate::objects::polyline::Polyline;
// use crate::objects::mesh::Mesh; // use crate::objects::mesh::Mesh;
use bevy_pbr::StandardMaterial;
use bevy_sprite::ColorMaterial;
use rand::{Rng, SeedableRng}; use rand::{Rng, SeedableRng};
use rand_pcg::Pcg32; use rand_pcg::Pcg32;
use std::collections::HashMap; use std::collections::HashMap;

View File

@@ -19,7 +19,6 @@ use bevy::render::MainWorld;
*/ */
use bevy::{ use bevy::{
asset::{Assets, HandleUntyped}, asset::{Assets, HandleUntyped},
pbr::{NotShadowCaster, NotShadowReceiver},
prelude::*, prelude::*,
reflect::TypeUuid, reflect::TypeUuid,
render::{ render::{
@@ -27,8 +26,10 @@ use bevy::{
render_phase::AddRenderCommand, render_phase::AddRenderCommand,
render_resource::PrimitiveTopology, render_resource::PrimitiveTopology,
render_resource::Shader, render_resource::Shader,
RenderSet,
}, },
}; };
use bevy_pbr::{NotShadowCaster, NotShadowReceiver};
mod render_dim; mod render_dim;
@@ -38,8 +39,8 @@ mod render_dim;
#[cfg(feature = "dim3")] #[cfg(feature = "dim3")]
mod dim { mod dim {
pub(crate) use super::render_dim::r3d::{queue, DebugLinePipeline, DrawDebugLines}; pub(crate) use super::render_dim::r3d::{queue, DebugLinePipeline, DrawDebugLines};
pub(crate) use bevy::core_pipeline::core_3d::Opaque3d as Phase;
use bevy::{asset::Handle, render::mesh::Mesh}; use bevy::{asset::Handle, render::mesh::Mesh};
pub(crate) use bevy_core_pipeline::core_3d::Opaque3d as Phase;
pub(crate) type MeshHandle = Handle<Mesh>; pub(crate) type MeshHandle = Handle<Mesh>;
pub(crate) fn from_handle(from: &MeshHandle) -> &Handle<Mesh> { pub(crate) fn from_handle(from: &MeshHandle) -> &Handle<Mesh> {
@@ -54,8 +55,9 @@ mod dim {
#[cfg(feature = "dim2")] #[cfg(feature = "dim2")]
mod dim { mod dim {
pub(crate) use super::render_dim::r2d::{queue, DebugLinePipeline, DrawDebugLines}; pub(crate) use super::render_dim::r2d::{queue, DebugLinePipeline, DrawDebugLines};
pub(crate) use bevy::core_pipeline::core_2d::Transparent2d as Phase; use bevy::{asset::Handle, render::mesh::Mesh};
use bevy::{asset::Handle, render::mesh::Mesh, sprite::Mesh2dHandle}; pub(crate) use bevy_core_pipeline::core_2d::Transparent2d as Phase;
use bevy_sprite::Mesh2dHandle;
pub(crate) type MeshHandle = Mesh2dHandle; pub(crate) type MeshHandle = Mesh2dHandle;
pub(crate) fn from_handle(from: &MeshHandle) -> &Handle<Mesh> { pub(crate) fn from_handle(from: &MeshHandle) -> &Handle<Mesh> {
@@ -120,27 +122,33 @@ impl DebugLinesPlugin {
Self { depth_test: val } Self { depth_test: val }
} }
} }
use bevy::render::render_phase::DrawFunctions;
use bevy::render::Render;
impl Plugin for DebugLinesPlugin { impl Plugin for DebugLinesPlugin {
fn build(&self, app: &mut App) { fn build(&self, app: &mut App) {
use bevy::render::{render_resource::SpecializedMeshPipelines, RenderApp, RenderStage}; use bevy::render::{render_resource::SpecializedMeshPipelines, RenderApp};
let mut shaders = app.world.get_resource_mut::<Assets<Shader>>().unwrap(); let mut shaders = app.world.get_resource_mut::<Assets<Shader>>().unwrap();
shaders.set_untracked( shaders.set_untracked(
DEBUG_LINES_SHADER_HANDLE, DEBUG_LINES_SHADER_HANDLE,
Shader::from_wgsl(dim::SHADER_FILE), Shader::from_wgsl(dim::SHADER_FILE, file!()),
); );
app.init_resource::<DebugLines>(); app.init_resource::<DebugLines>();
app.add_startup_system(setup)
.add_system_to_stage(CoreStage::PostUpdate, update.label("draw_lines")); app.init_resource::<DrawFunctions<dim::Phase>>();
app.add_systems(Startup, setup)
.add_systems(PostUpdate, update);
app.sub_app_mut(RenderApp) app.sub_app_mut(RenderApp)
.init_resource::<DrawFunctions<dim::Phase>>()
.add_render_command::<dim::Phase, dim::DrawDebugLines>() .add_render_command::<dim::Phase, dim::DrawDebugLines>()
.insert_resource(DebugLinesConfig { .insert_resource(DebugLinesConfig {
depth_test: self.depth_test, depth_test: self.depth_test,
}) })
.init_resource::<dim::DebugLinePipeline>() .init_resource::<dim::DebugLinePipeline>()
.init_resource::<SpecializedMeshPipelines<dim::DebugLinePipeline>>() .init_resource::<SpecializedMeshPipelines<dim::DebugLinePipeline>>()
.add_system_to_stage(RenderStage::Extract, extract) .add_systems(Render, extract.in_set(RenderSet::ExtractCommands))
.add_system_to_stage(RenderStage::Queue, dim::queue); .add_systems(Render, dim::queue.in_set(RenderSet::Queue));
info!("Loaded {} debug lines plugin.", dim::DIMMENSION); info!("Loaded {} debug lines plugin.", dim::DIMMENSION);
} }
@@ -176,7 +184,7 @@ fn setup(mut cmds: Commands, mut meshes: ResMut<Assets<Mesh>>) {
// https://github.com/Toqozz/bevy_debug_lines/issues/16 // https://github.com/Toqozz/bevy_debug_lines/issues/16
//mesh.set_indices(Some(Indices::U16(Vec::with_capacity(MAX_POINTS_PER_MESH)))); //mesh.set_indices(Some(Indices::U16(Vec::with_capacity(MAX_POINTS_PER_MESH))));
cmds.spawn_bundle(( cmds.spawn((
dim::into_handle(meshes.add(mesh)), dim::into_handle(meshes.add(mesh)),
NotShadowCaster, NotShadowCaster,
NotShadowReceiver, NotShadowReceiver,

View File

@@ -1,10 +1,11 @@
pub mod r3d { pub mod r3d {
use bevy::{ use bevy_core_pipeline::core_3d::Opaque3d;
core_pipeline::core_3d::Opaque3d, use bevy_pbr::{
pbr::{
DrawMesh, MeshPipeline, MeshPipelineKey, MeshUniform, SetMeshBindGroup, DrawMesh, MeshPipeline, MeshPipelineKey, MeshUniform, SetMeshBindGroup,
SetMeshViewBindGroup, SetMeshViewBindGroup,
}, };
use bevy::{
prelude::*, prelude::*,
render::{ render::{
mesh::MeshVertexBufferLayout, mesh::MeshVertexBufferLayout,
@@ -54,9 +55,9 @@ pub mod r3d {
//use VertexFormat::{Float32x3, Float32x4}; //use VertexFormat::{Float32x3, Float32x4};
let mut shader_defs = Vec::new(); let mut shader_defs = Vec::new();
shader_defs.push("LINES_3D".to_string()); shader_defs.push("LINES_3D".to_string().into());
if depth_test { if depth_test {
shader_defs.push("DEPTH_TEST_ENABLED".to_string()); shader_defs.push("DEPTH_TEST_ENABLED".to_string().into());
} }
let vertex_buffer_layout = layout.get_layout(&[ let vertex_buffer_layout = layout.get_layout(&[
@@ -64,7 +65,7 @@ pub mod r3d {
Mesh::ATTRIBUTE_COLOR.at_shader_location(1), Mesh::ATTRIBUTE_COLOR.at_shader_location(1),
])?; ])?;
let (label, blend, depth_write_enabled); let (label, blend, depth_write_enabled);
if key.contains(MeshPipelineKey::TRANSPARENT_MAIN_PASS) { if key.contains(MeshPipelineKey::BLEND_ALPHA) {
label = "transparent_mesh_pipeline".into(); label = "transparent_mesh_pipeline".into();
blend = Some(BlendState::ALPHA_BLENDING); blend = Some(BlendState::ALPHA_BLENDING);
// For the transparent pass, fragments that are closer will be alpha // For the transparent pass, fragments that are closer will be alpha
@@ -96,7 +97,7 @@ pub mod r3d {
write_mask: ColorWrites::ALL, write_mask: ColorWrites::ALL,
})], })],
}), }),
layout: Some(vec![self.mesh_pipeline.view_layout.clone()]), layout: vec![self.mesh_pipeline.view_layout.clone()],
primitive: PrimitiveState { primitive: PrimitiveState {
front_face: FrontFace::Ccw, front_face: FrontFace::Ccw,
cull_mode: None, cull_mode: None,
@@ -128,6 +129,7 @@ pub mod r3d {
alpha_to_coverage_enabled: false, alpha_to_coverage_enabled: false,
}, },
label: Some(label), label: Some(label),
push_constant_ranges: vec![],
}) })
} }
} }
@@ -147,7 +149,7 @@ pub mod r3d {
.read() .read()
.get_id::<DrawDebugLines>() .get_id::<DrawDebugLines>()
.unwrap(); .unwrap();
let key = MeshPipelineKey::from_msaa_samples(msaa.samples); let key = MeshPipelineKey::from_msaa_samples(msaa.samples());
for (view, mut transparent_phase) in views.iter_mut() { for (view, mut transparent_phase) in views.iter_mut() {
let view_matrix = view.transform.compute_matrix(); let view_matrix = view.transform.compute_matrix();
let view_row_2 = view_matrix.row(2); let view_row_2 = view_matrix.row(2);
@@ -183,7 +185,6 @@ pub mod r3d {
pub mod r2d { pub mod r2d {
use bevy::{ use bevy::{
asset::Handle, asset::Handle,
core_pipeline::core_2d::Transparent2d,
prelude::*, prelude::*,
render::{ render::{
mesh::MeshVertexBufferLayout, mesh::MeshVertexBufferLayout,
@@ -200,11 +201,12 @@ pub mod r2d {
texture::BevyDefault, texture::BevyDefault,
view::{Msaa, VisibleEntities}, view::{Msaa, VisibleEntities},
}, },
sprite::{ utils::FloatOrd,
};
use bevy_core_pipeline::core_2d::Transparent2d;
use bevy_sprite::{
DrawMesh2d, Mesh2dHandle, Mesh2dPipeline, Mesh2dPipelineKey, Mesh2dUniform, DrawMesh2d, Mesh2dHandle, Mesh2dPipeline, Mesh2dPipelineKey, Mesh2dUniform,
SetMesh2dBindGroup, SetMesh2dViewBindGroup, SetMesh2dBindGroup, SetMesh2dViewBindGroup,
},
utils::FloatOrd,
}; };
use crate::lines::{RenderDebugLinesMesh, DEBUG_LINES_SHADER_HANDLE}; use crate::lines::{RenderDebugLinesMesh, DEBUG_LINES_SHADER_HANDLE};
@@ -264,7 +266,7 @@ pub mod r2d {
write_mask: ColorWrites::ALL, write_mask: ColorWrites::ALL,
})], })],
}), }),
layout: Some(vec![self.mesh_pipeline.view_layout.clone()]), layout: vec![self.mesh_pipeline.view_layout.clone()],
primitive: PrimitiveState { primitive: PrimitiveState {
front_face: FrontFace::Ccw, front_face: FrontFace::Ccw,
cull_mode: None, cull_mode: None,
@@ -281,6 +283,7 @@ pub mod r2d {
alpha_to_coverage_enabled: false, alpha_to_coverage_enabled: false,
}, },
label: None, label: None,
push_constant_ranges: vec![],
}) })
} }
} }
@@ -297,7 +300,7 @@ pub mod r2d {
) { ) {
for (view, mut phase) in views.iter_mut() { for (view, mut phase) in views.iter_mut() {
let draw_mesh2d = draw2d_functions.read().get_id::<DrawDebugLines>().unwrap(); let draw_mesh2d = draw2d_functions.read().get_id::<DrawDebugLines>().unwrap();
let msaa_key = Mesh2dPipelineKey::from_msaa_samples(msaa.samples); let msaa_key = Mesh2dPipelineKey::from_msaa_samples(msaa.samples());
for visible_entity in &view.entities { for visible_entity in &view.entities {
if let Ok((uniform, mesh_handle)) = material_meshes.get(*visible_entity) { if let Ok((uniform, mesh_handle)) = material_meshes.get(*visible_entity) {

View File

@@ -5,9 +5,13 @@ use bevy::render::mesh::{Indices, VertexAttributeValues};
use na::{point, Point3, Vector3}; use na::{point, Point3, Vector3};
use std::collections::HashMap; use std::collections::HashMap;
use bevy::pbr::wireframe::Wireframe;
use bevy::render::render_resource::PrimitiveTopology; use bevy::render::render_resource::PrimitiveTopology;
use bevy_pbr::wireframe::Wireframe;
use bevy_pbr::PbrBundle;
use bevy_pbr::StandardMaterial;
use bevy_sprite::ColorMaterial;
use rapier::geometry::{ColliderHandle, ColliderSet, Shape, ShapeType}; use rapier::geometry::{ColliderHandle, ColliderSet, Shape, ShapeType};
#[cfg(feature = "dim3")] #[cfg(feature = "dim3")]
use rapier::geometry::{Cone, Cylinder}; use rapier::geometry::{Cone, Cylinder};
use rapier::math::{Isometry, Real, Vector}; use rapier::math::{Isometry, Real, Vector};
@@ -15,7 +19,7 @@ use rapier::math::{Isometry, Real, Vector};
use crate::graphics::BevyMaterial; use crate::graphics::BevyMaterial;
#[cfg(feature = "dim2")] #[cfg(feature = "dim2")]
use { use {
bevy::sprite::MaterialMesh2dBundle, bevy_sprite::MaterialMesh2dBundle,
na::{Point2, Vector2}, na::{Point2, Vector2},
rapier::geometry::{Ball, Cuboid}, rapier::geometry::{Ball, Cuboid},
}; };
@@ -235,10 +239,11 @@ impl EntityWithGraphics {
// //
// Ball mesh // Ball mesh
// //
let ball = Mesh::from(shape::Icosphere { let ball = Mesh::try_from(shape::Icosphere {
subdivisions: 2, subdivisions: 2,
radius: 1.0, radius: 1.0,
}); })
.unwrap();
out.insert(ShapeType::Ball, meshes.add(ball)); out.insert(ShapeType::Ball, meshes.add(ball));
// //

View File

@@ -4,7 +4,7 @@ use crate::physics::PhysicsState;
use crate::GraphicsManager; use crate::GraphicsManager;
use bevy::prelude::*; use bevy::prelude::*;
// use bevy::render::render_resource::RenderPipelineDescriptor; // use bevy::render::render_resource::RenderPipelineDescriptor;
use bevy_egui::EguiContext; use bevy_egui::EguiContexts;
pub trait TestbedPlugin { pub trait TestbedPlugin {
fn init_plugin(&mut self); fn init_plugin(&mut self);
@@ -31,7 +31,7 @@ pub trait TestbedPlugin {
); );
fn update_ui( fn update_ui(
&mut self, &mut self,
ui_context: &EguiContext, ui_context: &EguiContexts,
harness: &mut Harness, harness: &mut Harness,
graphics: &mut GraphicsManager, graphics: &mut GraphicsManager,
commands: &mut Commands, commands: &mut Commands,

View File

@@ -27,9 +27,15 @@ use crate::box2d_backend::Box2dWorld;
use crate::harness::Harness; use crate::harness::Harness;
#[cfg(all(feature = "dim3", feature = "other-backends"))] #[cfg(all(feature = "dim3", feature = "other-backends"))]
use crate::physx_backend::PhysxWorld; use crate::physx_backend::PhysxWorld;
use bevy::pbr::wireframe::WireframePlugin;
use bevy::render::camera::Camera; use bevy::render::camera::Camera;
use bevy_egui::EguiContext; use bevy_core_pipeline::prelude::Camera2dBundle;
use bevy_core_pipeline::prelude::Camera3dBundle;
use bevy_core_pipeline::prelude::ClearColor;
use bevy_egui::EguiContexts;
use bevy_pbr::wireframe::WireframePlugin;
use bevy_pbr::AmbientLight;
use bevy_pbr::DirectionalLight;
use bevy_pbr::DirectionalLightBundle;
#[cfg(feature = "dim2")] #[cfg(feature = "dim2")]
use crate::camera2d::{OrbitCamera, OrbitCameraPlugin}; use crate::camera2d::{OrbitCamera, OrbitCameraPlugin};
@@ -372,25 +378,25 @@ impl TestbedApp {
}; };
let window_plugin = WindowPlugin { let window_plugin = WindowPlugin {
window: WindowDescriptor { primary_window: Some(Window {
title, title,
..Default::default() ..Default::default()
}, }),
..Default::default() ..Default::default()
}; };
let mut app = App::new(); let mut app = App::new();
app.insert_resource(ClearColor(Color::rgb(0.15, 0.15, 0.15))) app.insert_resource(ClearColor(Color::rgb(0.15, 0.15, 0.15)))
.insert_resource(Msaa { samples: 4 }) .insert_resource(Msaa::Sample4)
.insert_resource(AmbientLight { .insert_resource(AmbientLight {
brightness: 0.3, brightness: 0.3,
..Default::default() ..Default::default()
}) })
.add_plugins(DefaultPlugins.set(window_plugin)) .add_plugins(DefaultPlugins.set(window_plugin))
.add_plugin(OrbitCameraPlugin) .add_plugins(OrbitCameraPlugin)
.add_plugin(WireframePlugin) .add_plugins(WireframePlugin)
.add_plugin(bevy_egui::EguiPlugin) .add_plugins(bevy_egui::EguiPlugin);
.add_plugin(debug_render::RapierDebugRenderPlugin::default()); // .add_plugins(debug_render::RapierDebugRenderPlugin::default());
#[cfg(target_arch = "wasm32")] #[cfg(target_arch = "wasm32")]
app.add_plugin(bevy_webgl2::WebGL2Plugin); app.add_plugin(bevy_webgl2::WebGL2Plugin);
@@ -398,15 +404,16 @@ impl TestbedApp {
#[cfg(feature = "other-backends")] #[cfg(feature = "other-backends")]
app.insert_non_send_resource(self.other_backends); app.insert_non_send_resource(self.other_backends);
app.add_startup_system(setup_graphics_environment) app.add_systems(Startup, setup_graphics_environment)
.insert_non_send_resource(self.graphics) .insert_non_send_resource(self.graphics)
.insert_resource(self.state) .insert_resource(self.state)
.insert_non_send_resource(self.harness) .insert_non_send_resource(self.harness)
.insert_resource(self.builders) .insert_resource(self.builders)
.insert_non_send_resource(self.plugins) .insert_non_send_resource(self.plugins)
.add_stage_before(CoreStage::Update, "physics", SystemStage::single_threaded()) // .add_stage_before(CoreStage::Update, "physics", SystemStage::single_threaded())
.add_system_to_stage("physics", update_testbed) // .add_system_to_stage("physics", update_testbed)
.add_system(egui_focus); .add_systems(PreUpdate, update_testbed)
.add_systems(Update, egui_focus);
init(&mut app); init(&mut app);
app.run(); app.run();
} }
@@ -709,10 +716,10 @@ impl<'a, 'b, 'c, 'd, 'e, 'f> Testbed<'a, 'b, 'c, 'd, 'e, 'f> {
KeyCode::Space => { KeyCode::Space => {
desired_movement += Vector::y() * 2.0; desired_movement += Vector::y() * 2.0;
} }
KeyCode::RControl => { KeyCode::ControlRight => {
desired_movement -= Vector::y(); desired_movement -= Vector::y();
} }
KeyCode::RShift => { KeyCode::ShiftRight => {
speed /= 10.0; speed /= 10.0;
} }
_ => {} _ => {}
@@ -750,10 +757,10 @@ impl<'a, 'b, 'c, 'd, 'e, 'f> Testbed<'a, 'b, 'c, 'd, 'e, 'f> {
KeyCode::Space => { KeyCode::Space => {
desired_movement += Vector::y() * 2.0; desired_movement += Vector::y() * 2.0;
} }
KeyCode::RControl => { KeyCode::ControlRight => {
desired_movement -= Vector::y(); desired_movement -= Vector::y();
} }
KeyCode::RShift => { KeyCode::ShiftLeft => {
speed /= 10.0; speed /= 10.0;
} }
_ => {} _ => {}
@@ -1004,15 +1011,17 @@ fn setup_graphics_environment(mut commands: Commands) {
directional_light: DirectionalLight { directional_light: DirectionalLight {
illuminance: 10000.0, illuminance: 10000.0,
// Configure the projection to better fit the scene // Configure the projection to better fit the scene
shadow_projection: OrthographicProjection { // shadow_projection: OrthographicProjection {
left: -HALF_SIZE, // area: Rect::new(
right: HALF_SIZE, // -HALF_SIZE,
bottom: -HALF_SIZE, // HALF_SIZE,
top: HALF_SIZE, // -HALF_SIZE,
near: -10.0 * HALF_SIZE, // HALF_SIZE,
far: 100.0 * HALF_SIZE, // ),
..Default::default() // near: -10.0 * HALF_SIZE,
}, // far: 100.0 * HALF_SIZE,
// ..Default::default()
// },
shadows_enabled: true, shadows_enabled: true,
..Default::default() ..Default::default()
}, },
@@ -1073,7 +1082,7 @@ fn setup_graphics_environment(mut commands: Commands) {
}); });
} }
fn egui_focus(mut ui_context: ResMut<EguiContext>, mut cameras: Query<&mut OrbitCamera>) { fn egui_focus(mut ui_context: EguiContexts, mut cameras: Query<&mut OrbitCamera>) {
let mut camera_enabled = true; let mut camera_enabled = true;
if ui_context.ctx_mut().wants_pointer_input() { if ui_context.ctx_mut().wants_pointer_input() {
camera_enabled = false; camera_enabled = false;
@@ -1083,9 +1092,11 @@ fn egui_focus(mut ui_context: ResMut<EguiContext>, mut cameras: Query<&mut Orbit
} }
} }
use bevy::window::PrimaryWindow;
fn update_testbed( fn update_testbed(
mut commands: Commands, mut commands: Commands,
windows: Res<Windows>, windows: Query<&Window, With<PrimaryWindow>>,
// mut pipelines: ResMut<Assets<RenderPipelineDescriptor>>, // mut pipelines: ResMut<Assets<RenderPipelineDescriptor>>,
mut meshes: ResMut<Assets<Mesh>>, mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<BevyMaterial>>, mut materials: ResMut<Assets<BevyMaterial>>,
@@ -1095,7 +1106,7 @@ fn update_testbed(
mut harness: NonSendMut<Harness>, mut harness: NonSendMut<Harness>,
#[cfg(feature = "other-backends")] mut other_backends: NonSendMut<OtherBackends>, #[cfg(feature = "other-backends")] mut other_backends: NonSendMut<OtherBackends>,
mut plugins: NonSendMut<Plugins>, mut plugins: NonSendMut<Plugins>,
mut ui_context: ResMut<EguiContext>, mut ui_context: EguiContexts,
mut gfx_components: Query<(&mut Transform,)>, mut gfx_components: Query<(&mut Transform,)>,
mut cameras: Query<(&Camera, &GlobalTransform, &mut OrbitCamera)>, mut cameras: Query<(&Camera, &GlobalTransform, &mut OrbitCamera)>,
keys: Res<Input<KeyCode>>, keys: Res<Input<KeyCode>>,
@@ -1407,7 +1418,7 @@ fn update_testbed(
} }
} }
if let Some(window) = windows.get_primary() { if let Ok(window) = windows.get_single() {
for (camera, camera_pos, _) in cameras.iter_mut() { for (camera, camera_pos, _) in cameras.iter_mut() {
highlight_hovered_body( highlight_hovered_body(
&mut *materials, &mut *materials,
@@ -1419,7 +1430,7 @@ fn update_testbed(
camera_pos, camera_pos,
); );
} }
} };
graphics.draw( graphics.draw(
&harness.physics.bodies, &harness.physics.bodies,

View File

@@ -9,9 +9,9 @@ use crate::testbed::{
use crate::PhysicsState; use crate::PhysicsState;
use bevy_egui::egui::Slider; use bevy_egui::egui::Slider;
use bevy_egui::{egui, EguiContext}; use bevy_egui::{egui, EguiContexts};
pub fn update_ui(ui_context: &mut EguiContext, state: &mut TestbedState, harness: &mut Harness) { pub fn update_ui(ui_context: &mut EguiContexts, state: &mut TestbedState, harness: &mut Harness) {
egui::Window::new("Parameters").show(ui_context.ctx_mut(), |ui| { egui::Window::new("Parameters").show(ui_context.ctx_mut(), |ui| {
if state.backend_names.len() > 1 && !state.example_names.is_empty() { if state.backend_names.len() > 1 && !state.example_names.is_empty() {
let mut changed = false; let mut changed = false;