mirror of
https://github.com/FyroxEngine/Fyrox.git
synced 2026-10-12 02:02:20 +00:00
* chore(#630): reformatting transmute_vec_as_bytes to properly handle padding for usize and f32 types * chore(630): added bytemuck to fyrox-core and fyrox-impl . Updated transmute_vec_as_bytes to have the generic T implement pod trait * chore(630): removing commented statement * general cleanup * removed podvector3 struct and enabled bytemuck on half dependency. --------- Co-authored-by: Ouroboros <[email protected]>
This commit is contained in:
co-authored by
Ouroboros
parent
31344ef042
commit
474e3b01a8
@@ -22,7 +22,7 @@ byteorder = "1.4.3"
|
||||
rand = "0.8.4"
|
||||
memoffset = "0.9.0"
|
||||
lazy_static = "1.4.0"
|
||||
nalgebra = "0.32.3"
|
||||
nalgebra = { version = "0.32.3", features = ["bytemuck"] }
|
||||
arrayvec = "0.7.2"
|
||||
futures = {version = "0.3.17", features = ["thread-pool"] }
|
||||
uuid = { version = "1", features = ["v4", "js"] }
|
||||
@@ -35,6 +35,7 @@ once_cell = "1.17.1"
|
||||
notify = "6"
|
||||
serde = { version = "1", features = ["derive"] }
|
||||
bincode = "1.3.3"
|
||||
bytemuck = "1.16.1"
|
||||
|
||||
[target.'cfg(target_arch = "wasm32")'.dependencies]
|
||||
web-sys = { version = "0.3.53", features = ["Request", "Window", "Response", "AudioContext", "AudioBuffer", "AudioContextOptions", "AudioNode", "AudioBufferSourceNode", "AudioDestinationNode"] }
|
||||
|
||||
+22
-6
@@ -30,6 +30,7 @@ use std::{
|
||||
path::{Path, PathBuf},
|
||||
};
|
||||
|
||||
use bytemuck::Pod;
|
||||
pub mod color;
|
||||
pub mod color_gradient;
|
||||
pub mod io;
|
||||
@@ -66,7 +67,6 @@ pub use wasm_bindgen_futures;
|
||||
pub use web_sys;
|
||||
|
||||
pub use type_traits::prelude::*;
|
||||
|
||||
/// Defines as_(variant), as_mut_(variant) and is_(variant) methods.
|
||||
#[macro_export]
|
||||
macro_rules! define_is_as {
|
||||
@@ -321,7 +321,7 @@ pub fn value_as_u8_slice<T: Sized>(v: &T) -> &'_ [u8] {
|
||||
}
|
||||
|
||||
/// Takes a vector of trivially-copyable values and turns it into a vector of bytes.
|
||||
pub fn transmute_vec_as_bytes<T: Copy>(vec: Vec<T>) -> Vec<u8> {
|
||||
pub fn transmute_vec_as_bytes<T: Pod>(vec: Vec<T>) -> Vec<u8> {
|
||||
unsafe {
|
||||
let mut vec = std::mem::ManuallyDrop::new(vec);
|
||||
Vec::from_raw_parts(
|
||||
@@ -449,15 +449,15 @@ where
|
||||
mod test {
|
||||
use std::path::Path;
|
||||
|
||||
use fxhash::FxHashMap;
|
||||
use uuid::uuid;
|
||||
|
||||
use crate::{
|
||||
append_extension, cmp_strings_case_insensitive, combine_uuids, hash_combine,
|
||||
make_relative_path,
|
||||
make_relative_path, transmute_vec_as_bytes,
|
||||
visitor::{Visit, Visitor},
|
||||
BiDirHashMap,
|
||||
};
|
||||
use fxhash::FxHashMap;
|
||||
use std::mem::size_of;
|
||||
use uuid::uuid;
|
||||
|
||||
#[test]
|
||||
fn test_combine_uuids() {
|
||||
@@ -627,4 +627,20 @@ mod test {
|
||||
assert!(!cmp_strings_case_insensitive("FooBaz", "FOOBaR"));
|
||||
assert!(cmp_strings_case_insensitive("foobar", "foobar"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_transmute_vec_as_bytes_length_new_f32() {
|
||||
let vec = vec![1.0f32, 2.0, 3.0];
|
||||
let byte_vec = transmute_vec_as_bytes(vec.clone());
|
||||
let expected_length = vec.len() * size_of::<f32>();
|
||||
assert_eq!(byte_vec.len(), expected_length);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_transmute_vec_as_bytes_length_new_usize() {
|
||||
let vec = vec![1usize, 2, 3];
|
||||
let byte_vec = transmute_vec_as_bytes(vec.clone());
|
||||
let expected_length = vec.len() * size_of::<usize>();
|
||||
assert_eq!(byte_vec.len(), expected_length);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,14 +40,14 @@ strum = "0.26.1"
|
||||
strum_macros = "0.26.1"
|
||||
clap = { version = "4", features = ["derive"] }
|
||||
winit = { version = "0.29.2", features = ["serde"] }
|
||||
half = "2.2.1"
|
||||
half = { version = "2.2.1", features = ["bytemuck"] }
|
||||
fast_image_resize = "4.0.0"
|
||||
base64 = "0.22.1"
|
||||
uvgen = "0.1.0"
|
||||
lightmap = "0.1.1"
|
||||
libloading = "0.8.1"
|
||||
gltf = { version = "1.4.0", optional = true, default-features = false, features = ["names", "utils"] }
|
||||
|
||||
bytemuck = { version = "1.16.1", features = ["derive"]}
|
||||
# These dependencies isn't actually used by the engine, but it is needed to prevent cargo from rebuilding
|
||||
# the engine lib on different packages.
|
||||
hashbrown = { version = "0.14.3", features = ["raw"] }
|
||||
@@ -67,4 +67,4 @@ raw-window-handle = "0.5.0"
|
||||
serde-wasm-bindgen = "0.6.3"
|
||||
|
||||
[target.'cfg(target_os = "android")'.dependencies]
|
||||
winit = { version = "0.29.2", features = ["android-native-activity"] }
|
||||
winit = { version = "0.29.2", features = ["android-native-activity"] }
|
||||
|
||||
@@ -37,6 +37,7 @@ use crate::{
|
||||
},
|
||||
utils::raw_mesh::{RawMesh, RawMeshBuilder},
|
||||
};
|
||||
use bytemuck::{Pod, Zeroable};
|
||||
use fxhash::{FxHashMap, FxHasher};
|
||||
use half::f16;
|
||||
use lazy_static::lazy_static;
|
||||
@@ -101,7 +102,7 @@ impl BlendShapesContainer {
|
||||
input_blend_shapes: &[InputBlendShapeData],
|
||||
) -> Self {
|
||||
#[repr(C)]
|
||||
#[derive(Default, Clone, Copy)]
|
||||
#[derive(Default, Clone, Copy, Pod, Zeroable)]
|
||||
struct VertexData {
|
||||
position: Vector3<f16>,
|
||||
normal: Vector3<f16>,
|
||||
@@ -167,7 +168,7 @@ impl BlendShapesContainer {
|
||||
}
|
||||
}
|
||||
|
||||
let bytes = crate::core::transmute_vec_as_bytes(vertex_data);
|
||||
let bytes = crate::core::transmute_vec_as_bytes::<VertexData>(vertex_data);
|
||||
|
||||
assert_eq!(
|
||||
bytes.len(),
|
||||
|
||||
Reference in New Issue
Block a user