From 3331150162e34471bf0294bdb61a1a748cb94ee5 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 28 Jan 2025 14:50:56 +0100 Subject: server+world: tangent handedness --- shared/src/helper.rs | 38 +++++++++++++++++++++++++++++++++++++- shared/src/lib.rs | 2 +- shared/src/resources.rs | 4 ++-- 3 files changed, 40 insertions(+), 4 deletions(-) (limited to 'shared/src') diff --git a/shared/src/helper.rs b/shared/src/helper.rs index 366ea52..be7d929 100644 --- a/shared/src/helper.rs +++ b/shared/src/helper.rs @@ -16,7 +16,7 @@ */ use crate::packets::{Data, Message, Object, Resource}; use anyhow::Result; -use glam::{Affine3A, Vec2, Vec3, Vec3A}; +use glam::{Affine3A, Vec2, Vec3, Vec3A, Vec4}; use std::{ borrow::Cow, io::{Read, Write}, @@ -122,6 +122,25 @@ impl ReadWrite for Vec { .collect()) } } +impl ReadWrite for Vec { + fn write(&self, w: &mut dyn Write) -> Result<()> { + for e in self { + e.write(w)?; + } + Ok(()) + } + fn read(r: &mut dyn Read) -> Result { + let mut buf = Vec::new(); + r.read_to_end(&mut buf)?; + Ok(buf + .into_iter() + .array_chunks::<{ size_of::() }>() + .map(f32::from_be_bytes) + .array_chunks::<4>() + .map(Vec4::from_array) + .collect()) + } +} impl ReadWrite for Vec { fn write(&self, w: &mut dyn Write) -> Result<()> { for e in self { @@ -382,6 +401,23 @@ impl ReadWrite for Vec3A { Ok(Self::new(f32::read(r)?, f32::read(r)?, f32::read(r)?)) } } +impl ReadWrite for Vec4 { + fn write(&self, w: &mut dyn Write) -> Result<()> { + self.x.write(w)?; + self.y.write(w)?; + self.z.write(w)?; + self.w.write(w)?; + Ok(()) + } + fn read(r: &mut dyn Read) -> Result { + Ok(Self::new( + f32::read(r)?, + f32::read(r)?, + f32::read(r)?, + f32::read(r)?, + )) + } +} impl ReadWrite for Vec3 { fn write(&self, w: &mut dyn Write) -> Result<()> { self.x.write(w)?; diff --git a/shared/src/lib.rs b/shared/src/lib.rs index e6b296e..9c3e863 100644 --- a/shared/src/lib.rs +++ b/shared/src/lib.rs @@ -28,4 +28,4 @@ pub mod resources; pub mod store; pub mod tree; -pub use glam::{Affine3A, Mat3A, Vec2, Vec3A, vec2, vec3a}; +pub use glam::{Affine3A, Mat3A, Vec2, Vec3A, Vec4, vec2, vec3a, vec4}; diff --git a/shared/src/resources.rs b/shared/src/resources.rs index 2c94d05..f2b7859 100644 --- a/shared/src/resources.rs +++ b/shared/src/resources.rs @@ -16,7 +16,7 @@ */ use crate::{helper::ReadWrite, packets::Resource}; use anyhow::Result; -use glam::{Affine3A, Vec2, Vec3A}; +use glam::{Affine3A, Vec2, Vec3A, Vec4}; use log::warn; use std::{ borrow::Cow, @@ -65,7 +65,7 @@ pub struct MeshPart { pub g_double_sided: Option<()>, pub va_position: Option>>, pub va_normal: Option>>, - pub va_tangent: Option>>, + pub va_tangent: Option>>, pub va_texcoord: Option>>, pub va_roughness: Option>>, pub va_metallic: Option>>, -- cgit v1.2.3-70-g09d2