From 251f72f52462b7afe8c31dc9ab06722b270ebddb Mon Sep 17 00:00:00 2001 From: skorpi-and-friends <61868957+skorpi-and-friends@users.noreply.github.com> Date: Sat, 14 Aug 2021 23:03:43 +0300 Subject: [PATCH] Fixes a bunch of examples --- .../src/render_graph/nodes/camera_node.rs | 3 +- .../render_resource/render_resource.rs | 9 ++- .../src/components/transform.rs | 20 ++++++ examples/3d/load_gltf.rs | 6 +- examples/3d/load_gltf_pipelined.rs | 10 +-- examples/game/alien_cake_addict.rs | 67 ++++++++++--------- examples/ios/src/lib.rs | 2 +- examples/tools/bevymark.rs | 34 +++++----- pipelined/bevy_pbr2/src/render/mod.rs | 3 +- 9 files changed, 90 insertions(+), 64 deletions(-) diff --git a/crates/bevy_render/src/render_graph/nodes/camera_node.rs b/crates/bevy_render/src/render_graph/nodes/camera_node.rs index bbf3533169b934..142f1a40767c18 100644 --- a/crates/bevy_render/src/render_graph/nodes/camera_node.rs +++ b/crates/bevy_render/src/render_graph/nodes/camera_node.rs @@ -159,7 +159,8 @@ pub fn camera_node_system( ); } - let view = global_transform.compute_matrix(); + // TODO: camera centered RenderWorld fix + let view = global_transform.compute_matrix().f32(); let mut offset = 0; if let Some(RenderResourceBinding::Buffer { buffer, .. }) = bindings.get(CAMERA_VIEW) { diff --git a/crates/bevy_render/src/renderer/render_resource/render_resource.rs b/crates/bevy_render/src/renderer/render_resource/render_resource.rs index 40f4d7113bf178..b4af0968286c97 100644 --- a/crates/bevy_render/src/renderer/render_resource/render_resource.rs +++ b/crates/bevy_render/src/renderer/render_resource/render_resource.rs @@ -4,7 +4,7 @@ use bevy_asset::Handle; use bevy_core::{cast_slice, Bytes, Pod}; pub use bevy_derive::{RenderResource, RenderResources}; -use bevy_math::{Mat4, Vec2, Vec3, Vec4}; +use bevy_math::{Mat4, Vec2, Vec3, Vec4, F32Convert}; use bevy_transform::components::GlobalTransform; #[derive(Debug, Clone, Eq, PartialEq)] @@ -229,13 +229,16 @@ where } } -impl RenderResource for GlobalTransform { +// FIXME: impl these for both precisions to allow cohabitation +// of entitites with either type (and consider where else this'll matter) +impl RenderResource for GlobalTransform{ fn resource_type(&self) -> Option { Some(RenderResourceType::Buffer) } fn write_buffer_bytes(&self, buffer: &mut [u8]) { - let mat4 = self.compute_matrix(); + // TODO: camera centered RenderWorld fix + let mat4 = self.compute_matrix().f32(); mat4.write_bytes(buffer); } diff --git a/crates/bevy_transform/src/components/transform.rs b/crates/bevy_transform/src/components/transform.rs index 9071369abd1e18..18b2a0658d1a90 100644 --- a/crates/bevy_transform/src/components/transform.rs +++ b/crates/bevy_transform/src/components/transform.rs @@ -498,6 +498,26 @@ mod xform_64 { } } + impl F64Convert for Transform64 { + type F64Ver = Self; + + #[inline] + fn f64(&self) -> Self::F64Ver { + *self + } + } + impl F32Convert for Transform64 { + type F32Ver = super::Transform32; + + fn f32(&self) -> Self::F32Ver { + super::Transform32 { + translation: self.translation.f32(), + rotation: self.rotation.f32(), + scale: self.scale.f32(), + } + } + } + /// Describe the position of an entity relative to the reference frame. /// /// * To place or move an entity, you should set its [`Transform`]. diff --git a/examples/3d/load_gltf.rs b/examples/3d/load_gltf.rs index 27ea98d304e957..23fe5837b3be6d 100644 --- a/examples/3d/load_gltf.rs +++ b/examples/3d/load_gltf.rs @@ -16,7 +16,7 @@ fn main() { fn setup(mut commands: Commands, asset_server: Res) { commands.spawn_scene(asset_server.load("models/FlightHelmet/FlightHelmet.gltf#Scene0")); commands.spawn_bundle(PerspectiveCameraBundle { - transform: Transform::from_xyz(0.7, 0.7, 1.0).looking_at(Vec3::new(0.0, 0.3, 0.0), Vec3::Y), + transform: Transform::from_xyz(0.7, 0.7, 1.0).looking_at(TVec3::new(0.0, 0.3, 0.0), TVec3::Y), ..Default::default() }); commands @@ -32,8 +32,8 @@ struct Rotates; fn rotator_system(time: Res