
## Objective Reduce dependencies on `bevy_render` by preferring `bevy_mesh` imports over `bevy_render` re-exports. ```diff - use bevy_render::mesh::Mesh; + use bevy_mesh::Mesh; ``` This is intended to help with #18423 (render crate restructure). Affects `bevy_gltf`, `bevy_animation` and `bevy_picking`. ## But Why? As part of #18423, I'm assuming there'll be a push to make crates less dependent on the big render crates. This PR seemed like a small and safe step along that path - it only changes imports and makes the `bevy_mesh` crate dependency explicit in `Cargo.toml`. Any remaining dependencies on `bevy_render` are true dependencies. ## Testing ``` cargo run --example testbed_3d cargo run --example mesh_picking ```
58 lines
2.1 KiB
Rust
58 lines
2.1 KiB
Rust
#![expect(missing_docs, reason = "Not all docs are written yet, see #3492.")]
|
|
|
|
extern crate alloc;
|
|
extern crate core;
|
|
|
|
mod conversions;
|
|
mod index;
|
|
mod mesh;
|
|
mod mikktspace;
|
|
pub mod morph;
|
|
pub mod primitives;
|
|
pub mod skinning;
|
|
mod vertex;
|
|
use bitflags::bitflags;
|
|
pub use index::*;
|
|
pub use mesh::*;
|
|
pub use mikktspace::*;
|
|
pub use primitives::*;
|
|
pub use vertex::*;
|
|
pub use wgpu_types::VertexFormat;
|
|
|
|
bitflags! {
|
|
/// Our base mesh pipeline key bits start from the highest bit and go
|
|
/// downward. The PBR mesh pipeline key bits start from the lowest bit and
|
|
/// go upward. This allows the PBR bits in the downstream crate `bevy_pbr`
|
|
/// to coexist in the same field without any shifts.
|
|
#[derive(Clone, Debug)]
|
|
pub struct BaseMeshPipelineKey: u64 {
|
|
const MORPH_TARGETS = 1 << (u64::BITS - 1);
|
|
}
|
|
}
|
|
|
|
impl BaseMeshPipelineKey {
|
|
pub const PRIMITIVE_TOPOLOGY_MASK_BITS: u64 = 0b111;
|
|
pub const PRIMITIVE_TOPOLOGY_SHIFT_BITS: u64 =
|
|
(u64::BITS - 1 - Self::PRIMITIVE_TOPOLOGY_MASK_BITS.count_ones()) as u64;
|
|
|
|
pub fn from_primitive_topology(primitive_topology: PrimitiveTopology) -> Self {
|
|
let primitive_topology_bits = ((primitive_topology as u64)
|
|
& Self::PRIMITIVE_TOPOLOGY_MASK_BITS)
|
|
<< Self::PRIMITIVE_TOPOLOGY_SHIFT_BITS;
|
|
Self::from_bits_retain(primitive_topology_bits)
|
|
}
|
|
|
|
pub fn primitive_topology(&self) -> PrimitiveTopology {
|
|
let primitive_topology_bits = (self.bits() >> Self::PRIMITIVE_TOPOLOGY_SHIFT_BITS)
|
|
& Self::PRIMITIVE_TOPOLOGY_MASK_BITS;
|
|
match primitive_topology_bits {
|
|
x if x == PrimitiveTopology::PointList as u64 => PrimitiveTopology::PointList,
|
|
x if x == PrimitiveTopology::LineList as u64 => PrimitiveTopology::LineList,
|
|
x if x == PrimitiveTopology::LineStrip as u64 => PrimitiveTopology::LineStrip,
|
|
x if x == PrimitiveTopology::TriangleList as u64 => PrimitiveTopology::TriangleList,
|
|
x if x == PrimitiveTopology::TriangleStrip as u64 => PrimitiveTopology::TriangleStrip,
|
|
_ => PrimitiveTopology::default(),
|
|
}
|
|
}
|
|
}
|