feat: migrate to glam whenever relevant + migrate testbed to kiss3d instead of bevy + release v0.32.0 (#909)

* feat: migrate to glam whenever relevant + migrate testbed to kiss3d instead of bevy

* chore: update changelog

* Fix warnings and tests

* Release v0.32.0
This commit is contained in:
Sébastien Crozet
2026-01-09 17:26:36 +01:00
committed by GitHub
parent 48de83817e
commit 0b7c3b34ec
265 changed files with 8501 additions and 8575 deletions

View File

@@ -1,6 +1,6 @@
[package]
name = "rapier2d-f64"
version = "0.31.0"
version = "0.32.0"
authors = ["Sébastien Crozet <sebcrozet@dimforge.com>"]
description = "2-dimensional physics engine in Rust."
documentation = "https://docs.rs/rapier2d"
@@ -24,7 +24,7 @@ maintenance = { status = "actively-developed" }
[lints]
rust.unexpected_cfgs = { level = "warn", check-cfg = [
'cfg(feature, values("dim3", "f32"))',
'cfg(feature, values("dim3", "f32", "simd-is-enabled", "simd-stable", "simd-nightly"))',
] }
[features]
@@ -32,11 +32,12 @@ default = ["dim2", "f64"]
dim2 = []
f64 = []
parallel = ["dep:rayon"]
simd-stable = ["simba/wide", "simd-is-enabled"]
simd-nightly = ["simba/portable_simd", "simd-is-enabled"]
# Do not enable this feature directly. It is automatically
# enabled with the "simd-stable" or "simd-nightly" feature.
simd-is-enabled = ["dep:vec_map"]
# SoA SIMD not supported yet on f64
#simd-stable = ["simba/wide", "simd-is-enabled"]
#simd-nightly = ["simba/portable_simd", "simd-is-enabled"]
## Do not enable this feature directly. It is automatically
## enabled with the "simd-stable" or "simd-nightly" feature.
#simd-is-enabled = []
serde-serialize = [
"nalgebra/serde-serialize",
"parry2d-f64/serde-serialize",
@@ -66,11 +67,12 @@ required-features = ["dim2", "f64"]
doctest = false # All doctests are written assuming the 3D version.
[dependencies]
vec_map = { version = "0.8", optional = true }
vec_map = "0.8"
web-time = { version = "1.1", optional = true }
num-traits = "0.2"
nalgebra = "0.34"
parry2d-f64 = "0.25.1"
glamx = { version = "0.1", features = ["nalgebra"] }
parry2d-f64 = "0.26.0"
simba = "0.9.1"
approx = "0.5"
rayon = { version = "1", optional = true }

View File

@@ -1,6 +1,6 @@
[package]
name = "rapier2d"
version = "0.31.0"
version = "0.32.0"
authors = ["Sébastien Crozet <sebcrozet@dimforge.com>"]
description = "2-dimensional physics engine in Rust."
documentation = "https://docs.rs/rapier2d"
@@ -37,7 +37,7 @@ simd-stable = ["simba/wide", "parry2d/simd-stable", "simd-is-enabled"]
simd-nightly = ["simba/portable_simd", "parry2d/simd-nightly", "simd-is-enabled"]
# Do not enable this feature directly. It is automatically
# enabled with the "simd-stable" or "simd-nightly" feature.
simd-is-enabled = ["dep:vec_map"]
simd-is-enabled = []
serde-serialize = [
"nalgebra/serde-serialize",
"parry2d/serde-serialize",
@@ -67,11 +67,12 @@ required-features = ["dim2", "f32"]
doctest = false # All doctests are written assuming the 3D version.
[dependencies]
vec_map = { version = "0.8", optional = true }
vec_map = "0.8"
web-time = { version = "1.1", optional = true }
num-traits = "0.2"
nalgebra = "0.34"
parry2d = "0.25.1"
glamx = { version = "0.1", features = ["nalgebra"] }
parry2d = "0.26.0"
simba = "0.9.1"
approx = "0.5"
rayon = { version = "1", optional = true }

View File

@@ -1,6 +1,6 @@
[package]
name = "rapier3d-f64"
version = "0.31.0"
version = "0.32.0"
authors = ["Sébastien Crozet <sebcrozet@dimforge.com>"]
description = "3-dimensional physics engine in Rust."
documentation = "https://docs.rs/rapier3d"
@@ -24,7 +24,7 @@ maintenance = { status = "actively-developed" }
[lints]
rust.unexpected_cfgs = { level = "warn", check-cfg = [
'cfg(feature, values("dim2", "f32"))',
'cfg(feature, values("dim2", "f32", "simd-is-enabled", "simd-stable", "simd-nightly"))',
] }
[features]
@@ -32,15 +32,16 @@ default = ["dim3", "f64"]
dim3 = []
f64 = []
parallel = ["dep:rayon"]
simd-stable = ["parry3d-f64/simd-stable", "simba/wide", "simd-is-enabled"]
simd-nightly = [
"parry3d-f64/simd-nightly",
"simba/portable_simd",
"simd-is-enabled",
]
# Do not enable this feature directly. It is automatically
# enabled with the "simd-stable" or "simd-nightly" feature.
simd-is-enabled = ["dep:vec_map"]
# SoA SIMD not supported yet on f64
#simd-stable = ["parry3d-f64/simd-stable", "simba/wide", "simd-is-enabled"]
#simd-nightly = [
# "parry3d-f64/simd-nightly",
# "simba/portable_simd",
# "simd-is-enabled",
#]
## Do not enable this feature directly. It is automatically
## enabled with the "simd-stable" or "simd-nightly" feature.
#simd-is-enabled = []
serde-serialize = [
"nalgebra/serde-serialize",
"parry3d-f64/serde-serialize",
@@ -69,11 +70,12 @@ required-features = ["dim3", "f64"]
doctest = false # All doctests are written assuming the 3D f32 version.
[dependencies]
vec_map = { version = "0.8", optional = true }
vec_map = "0.8"
web-time = { version = "1.1", optional = true }
num-traits = "0.2"
nalgebra = "0.34"
parry3d-f64 = "0.25.1"
glamx = { version = "0.1", features = ["nalgebra"] }
parry3d-f64 = "0.26.0"
simba = "0.9.1"
approx = "0.5"
rayon = { version = "1", optional = true }

View File

@@ -1,6 +1,6 @@
[package]
name = "rapier3d-meshloader"
version = "0.12.0"
version = "0.13.0"
authors = ["Sébastien Crozet <sebcrozet@dimforge.com>"]
description = "STL file loader for the 3D rapier physics engine."
documentation = "https://docs.rs/rapier3d-meshloader"
@@ -29,4 +29,4 @@ thiserror = "2"
profiling = "1.0"
mesh-loader = "0.1.12"
rapier3d = { version = "0.31.0", path = "../rapier3d" }
rapier3d = { version = "0.32.0", path = "../rapier3d" }

View File

@@ -3,7 +3,7 @@
use mesh_loader::Mesh;
use rapier3d::geometry::{MeshConverter, SharedShape};
use rapier3d::math::{Isometry, Point, Real, Vector};
use rapier3d::math::{Pose, Vector};
use rapier3d::prelude::MeshConverterError;
use std::path::Path;
@@ -11,8 +11,8 @@ use std::path::Path;
pub struct LoadedShape {
/// The shape loaded from the file and converted by the [`MeshConverter`].
pub shape: SharedShape,
/// The shapes pose.
pub pose: Isometry<Real>,
/// The shape's pose.
pub pose: Pose,
/// The raw mesh read from the file without any modification.
pub raw_mesh: Mesh,
}
@@ -41,7 +41,7 @@ pub enum MeshLoaderError {
pub fn load_from_path(
path: impl AsRef<Path>,
converter: &MeshConverter,
scale: Vector<Real>,
scale: Vector,
) -> Result<Vec<Result<LoadedShape, MeshConverterError>>, MeshLoaderError> {
let loader = mesh_loader::Loader::default();
let mut colliders = vec![];
@@ -71,16 +71,13 @@ pub fn load_from_path(
pub fn load_from_raw_mesh(
raw_mesh: &Mesh,
converter: &MeshConverter,
scale: Vector<Real>,
) -> Result<(SharedShape, Isometry<Real>), MeshConverterError> {
let mut vertices: Vec<_> = raw_mesh
scale: Vector,
) -> Result<(SharedShape, Pose), MeshConverterError> {
let vertices: Vec<_> = raw_mesh
.vertices
.iter()
.map(|xyz| Point::new(xyz[0], xyz[1], xyz[2]))
.map(|xyz| Vector::new(xyz[0], xyz[1], xyz[2]) * scale)
.collect();
vertices
.iter_mut()
.for_each(|pt| pt.coords.component_mul_assign(&scale));
let indices: Vec<_> = raw_mesh.faces.clone();
converter.convert(vertices, indices)
}

View File

@@ -1,6 +1,6 @@
[package]
name = "rapier3d-urdf"
version = "0.12.0"
version = "0.13.0"
authors = ["Sébastien Crozet <sebcrozet@dimforge.com>"]
description = "URDF file loader for the 3D rapier physics engine."
documentation = "https://docs.rs/rapier3d-urdf"
@@ -31,5 +31,5 @@ anyhow = "1"
bitflags = "2"
urdf-rs = "0.9"
rapier3d = { version = "0.31.0", path = "../rapier3d" }
rapier3d-meshloader = { version = "0.12.0", path = "../rapier3d-meshloader", default-features = false, optional = true }
rapier3d = { version = "0.32.0", path = "../rapier3d" }
rapier3d-meshloader = { version = "0.13.0", path = "../rapier3d-meshloader", default-features = false, optional = true }

View File

@@ -35,12 +35,13 @@ use rapier3d::{
RigidBodyBuilder, RigidBodyHandle, RigidBodySet, RigidBodyType,
},
geometry::{Collider, ColliderBuilder, ColliderHandle, ColliderSet, SharedShape, TriMeshFlags},
math::{Isometry, Point, Real, Vector},
glamx::EulerRot,
math::{Pose, Real, Rotation, Vector},
na,
};
use std::collections::HashMap;
use std::path::Path;
use urdf_rs::{Geometry, Inertial, Joint, Pose, Robot};
use urdf_rs::{Geometry, Inertial, Joint, Pose as UrdfPose, Robot};
#[cfg(doc)]
use rapier3d::dynamics::Multibody;
@@ -104,8 +105,8 @@ pub struct UrdfLoaderOptions {
/// Note that the default enables all the flags. This is operating under the assumption that the provided
/// mesh are generally well-formed and properly oriented (2-manifolds with outward normals).
pub trimesh_flags: TriMeshFlags,
/// The transform appended to every created rigid-bodies (default: [`Isometry::identity`]).
pub shift: Isometry<Real>,
/// The transform appended to every created rigid-bodies (default: `Pose::IDENTITY`).
pub shift: Pose,
/// A description of the collider properties that need to be applied to every collider created
/// by the loader (default: `ColliderBuilder::default().density(0.0)`).
///
@@ -136,7 +137,7 @@ impl Default for UrdfLoaderOptions {
enable_joint_collisions: false,
make_roots_fixed: false,
trimesh_flags: TriMeshFlags::all(),
shift: Isometry::identity(),
shift: Pose::IDENTITY,
collider_blueprint: ColliderBuilder::default().density(0.0),
rigid_body_blueprint: RigidBodyBuilder::dynamic(),
}
@@ -295,7 +296,8 @@ impl UrdfRobot {
}))
}
let mut body = urdf_to_rigid_body(&options, &link.inertial);
body.set_position(options.shift * body.position(), false);
let new_pos = options.shift * body.position();
body.set_position(new_pos, false);
UrdfLink { body, colliders }
})
.collect();
@@ -429,30 +431,30 @@ impl UrdfRobot {
}
/// Appends a transform to all the rigid-bodie of this robot.
pub fn append_transform(&mut self, transform: &Isometry<Real>) {
pub fn append_transform(&mut self, transform: &Pose) {
for link in &mut self.links {
link.body
.set_position(transform * link.body.position(), true);
let new_pos = transform * link.body.position();
link.body.set_position(new_pos, true);
}
}
}
#[rustfmt::skip]
fn urdf_to_rigid_body(options: &UrdfLoaderOptions, inertial: &Inertial) -> RigidBody {
let origin = urdf_to_isometry(&inertial.origin);
let origin = urdf_to_pose(&inertial.origin);
let mut builder = options.rigid_body_blueprint.clone();
builder.body_type = RigidBodyType::Dynamic;
if options.apply_imported_mass_props {
builder = builder.additional_mass_properties(MassProperties::with_inertia_matrix(
origin.translation.vector.into(),
origin.translation,
inertial.mass.value as Real,
// See http://wiki.ros.org/urdf/Tutorials/Adding%20Physical%20and%20Collision%20Properties%20to%20a%20URDF%20Model#Inertia
na::Matrix3::new(
inertial.inertia.ixx as Real, inertial.inertia.ixy as Real, inertial.inertia.ixz as Real,
inertial.inertia.ixy as Real, inertial.inertia.iyy as Real, inertial.inertia.iyz as Real,
inertial.inertia.ixz as Real, inertial.inertia.iyz as Real,inertial.inertia.izz as Real,
),
).into(),
))
}
@@ -463,9 +465,9 @@ fn urdf_to_colliders(
options: &UrdfLoaderOptions,
_mesh_dir: &Path, // Unused if none of the meshloader features is enabled.
geometry: &Geometry,
origin: &Pose,
origin: &UrdfPose,
) -> Vec<Collider> {
let mut shape_transform = Isometry::identity();
let mut shape_transform = Pose::IDENTITY;
let mut colliders = Vec::new();
@@ -480,7 +482,7 @@ fn urdf_to_colliders(
Geometry::Cylinder { radius, length } => {
// This rotation will make the cylinder Z-up as per the URDF spec,
// instead of rapiers default Y-up.
shape_transform = Isometry::rotation(Vector::x() * Real::frac_pi_2());
shape_transform = Pose::rotation(Vector::X * Real::frac_pi_2());
colliders.push(SharedShape::cylinder(
*length as Real / 2.0,
*radius as Real,
@@ -506,7 +508,7 @@ fn urdf_to_colliders(
let full_path = _mesh_dir.join(filename);
let scale = scale
.map(|s| Vector::new(s[0] as Real, s[1] as Real, s[2] as Real))
.unwrap_or_else(|| Vector::<Real>::repeat(1.0));
.unwrap_or_else(|| Vector::splat(1.0));
let Ok(loaded_mesh) = rapier3d_meshloader::load_from_path(
full_path,
@@ -530,21 +532,21 @@ fn urdf_to_colliders(
let mut builder = options.collider_blueprint.clone();
builder.shape = shape;
builder
.position(urdf_to_isometry(origin) * shape_transform)
.position(urdf_to_pose(origin) * shape_transform)
.build()
})
.collect()
}
fn urdf_to_isometry(pose: &Pose) -> Isometry<Real> {
Isometry::from_parts(
Point::new(
fn urdf_to_pose(pose: &UrdfPose) -> Pose {
Pose::from_parts(
Vector::new(
pose.xyz[0] as Real,
pose.xyz[1] as Real,
pose.xyz[2] as Real,
)
.into(),
na::UnitQuaternion::from_euler_angles(
),
Rotation::from_euler(
EulerRot::XYZ,
pose.rpy[0] as Real,
pose.rpy[1] as Real,
pose.rpy[2] as Real,
@@ -555,7 +557,7 @@ fn urdf_to_isometry(pose: &Pose) -> Isometry<Real> {
fn urdf_to_joint(
options: &UrdfLoaderOptions,
joint: &Joint,
pose1: &Isometry<Real>,
pose1: &Pose,
link2: &mut RigidBody,
) -> GenericJoint {
let locked_axes = match joint.joint_type {
@@ -568,25 +570,23 @@ fn urdf_to_joint(
urdf_rs::JointType::Prismatic => JointAxesMask::LOCKED_PRISMATIC_AXES,
urdf_rs::JointType::Spherical => JointAxesMask::LOCKED_SPHERICAL_AXES,
};
let joint_to_parent = urdf_to_isometry(&joint.origin);
let joint_axis = na::Unit::try_new(
Vector::new(
joint.axis.xyz[0] as Real,
joint.axis.xyz[1] as Real,
joint.axis.xyz[2] as Real,
),
1.0e-5,
);
let joint_to_parent = urdf_to_pose(&joint.origin);
let joint_axis = Vector::new(
joint.axis.xyz[0] as Real,
joint.axis.xyz[1] as Real,
joint.axis.xyz[2] as Real,
)
.normalize_or_zero();
link2.set_position(pose1 * joint_to_parent, false);
let mut builder = GenericJointBuilder::new(locked_axes)
.local_anchor1(joint_to_parent.translation.vector.into())
.local_anchor1(joint_to_parent.translation)
.contacts_enabled(options.enable_joint_collisions);
if let Some(joint_axis) = joint_axis {
if joint_axis != Vector::ZERO {
builder = builder
.local_axis1(joint_to_parent * joint_axis)
.local_axis1(joint_to_parent.rotation * joint_axis)
.local_axis2(joint_axis);
}

View File

@@ -1,6 +1,6 @@
[package]
name = "rapier3d"
version = "0.31.0"
version = "0.32.0"
authors = ["Sébastien Crozet <sebcrozet@dimforge.com>"]
description = "3-dimensional physics engine in Rust."
documentation = "https://docs.rs/rapier3d"
@@ -42,7 +42,7 @@ simd-nightly = [
]
# Do not enable this feature directly. It is automatically
# enabled with the "simd-stable" or "simd-nightly" feature.
simd-is-enabled = ["dep:vec_map"]
simd-is-enabled = []
serde-serialize = [
"nalgebra/serde-serialize",
"parry3d/serde-serialize",
@@ -71,11 +71,12 @@ required-features = ["dim3", "f32"]
[dependencies]
vec_map = { version = "0.8", optional = true }
vec_map = "0.8"
web-time = { version = "1.1", optional = true }
num-traits = "0.2"
nalgebra = "0.34"
parry3d = "0.25.1"
glamx = { version = "0.1", features = ["nalgebra"] }
parry3d = "0.26.0"
simba = "0.9.1"
approx = "0.5"
rayon = { version = "1", optional = true }

View File

@@ -1,6 +1,6 @@
[package]
name = "rapier_testbed2d-f64"
version = "0.31.0"
version = "0.32.0"
authors = ["Sébastien Crozet <sebcrozet@dimforge.com>"]
description = "Testbed for the Rapier 2-dimensional physics engine in Rust."
homepage = "http://rapier.rs"
@@ -44,6 +44,7 @@ features = ["parallel", "profiler_ui"]
[dependencies]
nalgebra = { version = "0.34", features = ["rand", "glam029"] }
glamx = "0.1"
rand = "0.9"
rand_pcg = "0.9"
web-time = { version = "1.1" }
@@ -52,51 +53,17 @@ num_cpus = { version = "1", optional = true }
wrapped2d = { version = "0.4", optional = true }
bincode = "1"
Inflector = "0.11"
md5 = "0.7"
bevy_egui = "0.31"
bevy_ecs = "0.15"
bevy_core_pipeline = "0.15"
bevy_pbr = "0.15"
bevy_sprite = "0.15"
md5 = "0.8"
egui = "0.33"
profiling = "1.0"
puffin_egui = { version = "0.29", optional = true }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
serde = { version = "1.0.215", features = ["derive"] }
indexmap = { version = "2", features = ["serde"] }
# Dependencies for native only.
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
bevy = { version = "0.15", default-features = false, features = [
"bevy_asset",
"bevy_winit",
"bevy_window",
"x11",
"tonemapping_luts",
"ktx2",
"zstd",
"bevy_render",
"bevy_pbr",
"bevy_gizmos",
"serialize"
] }
# Dependencies for WASM only.
[target.'cfg(target_arch = "wasm32")'.dependencies]
bevy = { version = "0.15", default-features = false, features = [
"bevy_asset",
"bevy_winit",
"bevy_window",
"tonemapping_luts",
"ktx2",
"zstd",
"bevy_render",
"bevy_pbr",
"bevy_gizmos",
] }
#bevy_webgl2 = "0.5"
kiss3d = { version = "0.40.0", features = ["egui", "parry", "serde"] }
[dependencies.rapier]
package = "rapier2d-f64"
path = "../rapier2d-f64"
version = "0.31.0"
version = "0.32.0"
features = ["serde-serialize", "debug-render", "profiler"]

View File

@@ -1,6 +1,6 @@
[package]
name = "rapier_testbed2d"
version = "0.31.0"
version = "0.32.0"
authors = ["Sébastien Crozet <sebcrozet@dimforge.com>"]
description = "Testbed for the Rapier 2-dimensional physics engine in Rust."
homepage = "http://rapier.rs"
@@ -44,6 +44,7 @@ features = ["parallel", "other-backends", "profiler_ui"]
[dependencies]
nalgebra = { version = "0.34", features = ["rand", "glam029"] }
glamx = "0.1"
rand = "0.9"
rand_pcg = "0.9"
web-time = { version = "1.1" }
@@ -52,51 +53,17 @@ num_cpus = { version = "1", optional = true }
wrapped2d = { version = "0.4", optional = true }
bincode = "1"
Inflector = "0.11"
md5 = "0.7"
bevy_egui = "0.31"
bevy_ecs = "0.15"
bevy_core_pipeline = "0.15"
bevy_pbr = "0.15"
bevy_sprite = "0.15"
md5 = "0.8"
egui = "0.33"
profiling = "1.0"
puffin_egui = { version = "0.29", optional = true }
serde = { version = "1.0.215", features = ["derive"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
indexmap = { version = "2", features = ["serde"] }
# Dependencies for native only.
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
bevy = { version = "0.15", default-features = false, features = [
"bevy_sprite",
"bevy_winit",
"bevy_window",
"x11",
"tonemapping_luts",
"ktx2",
"zstd",
"bevy_render",
"bevy_pbr",
"bevy_gizmos",
"serialize"
] }
# Dependencies for WASM only.
[target.'cfg(target_arch = "wasm32")'.dependencies]
bevy = { version = "0.15", default-features = false, features = [
"bevy_sprite",
"bevy_winit",
"bevy_window",
"tonemapping_luts",
"ktx2",
"zstd",
"bevy_render",
"bevy_pbr",
"bevy_gizmos",
] }
#bevy_webgl2 = "0.5"
kiss3d = { version = "0.40.0", features = ["egui", "parry", "serde"] }
[dependencies.rapier]
package = "rapier2d"
path = "../rapier2d"
version = "0.31.0"
version = "0.32.0"
features = ["serde-serialize", "debug-render", "profiler"]

View File

@@ -1,6 +1,6 @@
[package]
name = "rapier_testbed3d-f64"
version = "0.31.0"
version = "0.32.0"
authors = ["Sébastien Crozet <sebcrozet@dimforge.com>"]
description = "Testbed for the Rapier 3-dimensional physics engine in Rust."
homepage = "http://rapier.rs"
@@ -46,6 +46,7 @@ features = ["parallel", "profiler_ui"]
[dependencies]
nalgebra = { version = "0.34", features = ["rand", "glam029"] }
glamx = "0.1"
rand = "0.9"
rand_pcg = "0.9"
web-time = { version = "1.1" }
@@ -54,50 +55,16 @@ num_cpus = { version = "1", optional = true }
bincode = "1"
md5 = "0.7"
Inflector = "0.11"
egui = "0.33"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
bevy_egui = "0.31"
bevy_ecs = "0.15"
bevy_core_pipeline = "0.15"
bevy_pbr = "0.15"
bevy_sprite = "0.15"
profiling = "1.0"
puffin_egui = { version = "0.29", optional = true, git = "https://github.com/Vrixyz/puffin.git", branch = "expose_ui_options" }
puffin_egui = { version = "0.29", optional = true }
indexmap = { version = "2", features = ["serde"] }
# Dependencies for native only.
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
bevy = { version = "0.15", default-features = false, features = [
"bevy_winit",
"bevy_window",
"x11",
"tonemapping_luts",
"ktx2",
"zstd",
"bevy_render",
"bevy_pbr",
"bevy_gizmos",
"serialize"
] }
# Dependencies for WASM only.
[target.'cfg(target_arch = "wasm32")'.dependencies]
bevy = { version = "0.15", default-features = false, features = [
"bevy_winit",
"bevy_window",
"bevy_window",
"tonemapping_luts",
"ktx2",
"zstd",
"bevy_render",
"bevy_pbr",
"bevy_gizmos",
"serialize"
] }
#bevy_webgl2 = "0.5"
kiss3d = { version = "0.40.0", features = ["egui", "parry", "serde"] }
[dependencies.rapier]
package = "rapier3d-f64"
path = "../rapier3d-f64"
version = "0.31.0"
version = "0.32.0"
features = ["serde-serialize", "debug-render", "profiler"]

View File

@@ -1,6 +1,6 @@
[package]
name = "rapier_testbed3d"
version = "0.31.0"
version = "0.32.0"
authors = ["Sébastien Crozet <sebcrozet@dimforge.com>"]
description = "Testbed for the Rapier 3-dimensional physics engine in Rust."
homepage = "http://rapier.rs"
@@ -44,6 +44,7 @@ features = ["parallel", "other-backends", "profiler_ui"]
[dependencies]
nalgebra = { version = "0.34", features = ["rand", "glam029"] }
glamx = "0.1"
rand = "0.9"
rand_pcg = "0.9"
web-time = { version = "1.1" }
@@ -57,45 +58,14 @@ md5 = "0.7"
Inflector = "0.11"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
bevy_egui = "0.31"
bevy_ecs = "0.15"
bevy_core_pipeline = "0.15"
bevy_pbr = "0.15"
bevy_sprite = "0.15"
egui = "0.33"
profiling = "1.0"
puffin_egui = { version = "0.29", optional = true }
indexmap = { version = "2", features = ["serde"] }
# Dependencies for native only.
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
bevy = { version = "0.15", default-features = false, features = [
"bevy_winit",
"bevy_window",
"x11",
"tonemapping_luts",
"ktx2",
"zstd",
"bevy_render",
"bevy_pbr",
"bevy_gizmos",
"serialize"
] }
# Dependencies for WASM only.
[target.'cfg(target_arch = "wasm32")'.dependencies]
bevy = { version = "0.15", default-features = false, features = [
"bevy_winit",
"tonemapping_luts",
"ktx2",
"zstd",
"bevy_render",
"bevy_pbr",
"bevy_gizmos",
] }
#bevy_webgl2 = "0.5"
kiss3d = { version = "0.40.0", features = ["egui", "parry", "serde"] }
[dependencies.rapier]
package = "rapier3d"
path = "../rapier3d"
version = "0.31.0"
version = "0.32.0"
features = ["serde-serialize", "debug-render", "profiler"]