diff options
author | metamuffin <metamuffin@disroot.org> | 2025-01-19 16:44:06 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-01-19 16:44:06 +0100 |
commit | 2d6f319dfccf6339ed1a3bbfb003b8b2dde82383 (patch) | |
tree | 4229b75a26d6e02d1eb15c84096c7020875e650e /shared | |
parent | 2c737d660cab38fdf4ff3e940395df396a75f959 (diff) | |
download | weareserver-2d6f319dfccf6339ed1a3bbfb003b8b2dde82383.tar weareserver-2d6f319dfccf6339ed1a3bbfb003b8b2dde82383.tar.bz2 weareserver-2d6f319dfccf6339ed1a3bbfb003b8b2dde82383.tar.zst |
client: normal maps
Diffstat (limited to 'shared')
-rw-r--r-- | shared/src/helper.rs | 32 | ||||
-rw-r--r-- | shared/src/resources.rs | 3 |
2 files changed, 34 insertions, 1 deletions
diff --git a/shared/src/helper.rs b/shared/src/helper.rs index eb1f321..d46a830 100644 --- a/shared/src/helper.rs +++ b/shared/src/helper.rs @@ -16,7 +16,7 @@ */ use crate::packets::{Data, Object, Resource}; use anyhow::Result; -use glam::{Affine3A, Vec2, Vec3A}; +use glam::{Affine3A, Vec2, Vec3, Vec3A}; use std::{ borrow::Cow, io::{Read, Write}, @@ -103,6 +103,25 @@ impl ReadWrite for Vec<Vec3A> { .collect()) } } +impl ReadWrite for Vec<Vec3> { + fn write(&self, w: &mut dyn Write) -> Result<()> { + for e in self { + e.write(w)?; + } + Ok(()) + } + fn read(r: &mut dyn Read) -> Result<Self> { + let mut buf = Vec::new(); + r.read_to_end(&mut buf)?; + Ok(buf + .into_iter() + .array_chunks::<{ size_of::<f32>() }>() + .map(f32::from_be_bytes) + .array_chunks::<3>() + .map(Vec3::from_array) + .collect()) + } +} impl ReadWrite for Vec<Vec2> { fn write(&self, w: &mut dyn Write) -> Result<()> { for e in self { @@ -249,6 +268,17 @@ impl ReadWrite for Vec3A { Ok(Self::new(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)?; + self.y.write(w)?; + self.z.write(w)?; + Ok(()) + } + fn read(r: &mut dyn Read) -> Result<Self> { + Ok(Self::new(f32::read(r)?, f32::read(r)?, f32::read(r)?)) + } +} impl ReadWrite for Affine3A { fn write(&self, w: &mut dyn Write) -> Result<()> { for v in self.to_cols_array() { diff --git a/shared/src/resources.rs b/shared/src/resources.rs index b2708cb..54a34b8 100644 --- a/shared/src/resources.rs +++ b/shared/src/resources.rs @@ -64,6 +64,7 @@ pub struct MeshPart { pub g_double_sided: Option<()>, pub va_position: Option<Resource<Vec<Vec3A>>>, pub va_normal: Option<Resource<Vec<Vec3A>>>, + pub va_tangent: Option<Resource<Vec<Vec3A>>>, pub va_texcoord: Option<Resource<Vec<Vec2>>>, pub va_roughness: Option<Resource<Vec<f32>>>, pub va_metallic: Option<Resource<Vec<f32>>>, @@ -240,6 +241,7 @@ impl ReadWrite for MeshPart { write_kv_opt(w, b"g_double_sided", &self.g_double_sided)?; write_kv_opt(w, b"va_position", &self.va_position)?; write_kv_opt(w, b"va_normal", &self.va_normal)?; + write_kv_opt(w, b"va_tangent", &self.va_tangent)?; write_kv_opt(w, b"va_texcoord", &self.va_texcoord)?; write_kv_opt(w, b"va_roughness", &self.va_roughness)?; write_kv_opt(w, b"va_metallic", &self.va_metallic)?; @@ -272,6 +274,7 @@ impl ReadWrite for MeshPart { b"g_double_sided" => Ok(s.g_double_sided = Some(read_slice(v)?)), b"va_position" => Ok(s.va_position = Some(read_slice(v)?)), b"va_normal" => Ok(s.va_normal = Some(read_slice(v)?)), + b"va_tangent" => Ok(s.va_tangent = Some(read_slice(v)?)), b"va_texcoord" => Ok(s.va_texcoord = Some(read_slice(v)?)), b"va_roughness" => Ok(s.va_roughness = Some(read_slice(v)?)), b"va_metallic" => Ok(s.va_metallic = Some(read_slice(v)?)), |