summaryrefslogtreecommitdiff
path: root/shared/src/resources.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-01-12 23:35:00 +0100
committermetamuffin <metamuffin@disroot.org>2025-01-12 23:35:00 +0100
commit9f5d815e932c9c01265fec2f5a079470d73d6cc8 (patch)
tree4d86b50699ea4a36cba451bdffe13a30b457d889 /shared/src/resources.rs
parent32b749262d305b5ce09d1fc0c02f40023033c9bd (diff)
downloadweareserver-9f5d815e932c9c01265fec2f5a079470d73d6cc8.tar
weareserver-9f5d815e932c9c01265fec2f5a079470d73d6cc8.tar.bz2
weareserver-9f5d815e932c9c01265fec2f5a079470d73d6cc8.tar.zst
zero copy texture write
Diffstat (limited to 'shared/src/resources.rs')
-rw-r--r--shared/src/resources.rs31
1 files changed, 17 insertions, 14 deletions
diff --git a/shared/src/resources.rs b/shared/src/resources.rs
index ba45284..40a9cad 100644
--- a/shared/src/resources.rs
+++ b/shared/src/resources.rs
@@ -19,6 +19,7 @@ use anyhow::Result;
use glam::{Affine3A, Vec2, Vec3A};
use log::warn;
use std::{
+ borrow::Cow,
collections::BTreeMap,
io::{Read, Write},
};
@@ -40,7 +41,7 @@ pub struct LightPart {
#[derive(Debug, Default, Clone)]
pub struct EnvironmentPart {
- pub skybox: Option<Resource<Image>>,
+ pub skybox: Option<Resource<Image<'static>>>,
pub sun: Option<(Vec3A, Vec3A)>,
}
@@ -69,15 +70,15 @@ pub struct MeshPart {
pub va_transmission: Option<Resource<Vec<f32>>>,
pub va_alpha: Option<Resource<Vec<f32>>>,
pub va_emission: Option<Resource<Vec<Vec3A>>>,
- pub tex_normal: Option<Resource<Image>>,
- pub tex_roughness: Option<Resource<Image>>,
- pub tex_metallic: Option<Resource<Image>>,
- pub tex_albedo: Option<Resource<Image>>,
- pub tex_transmission: Option<Resource<Image>>,
- pub tex_alpha: Option<Resource<Image>>,
- pub tex_emission: Option<Resource<Image>>,
- pub tex_thickness: Option<Resource<Image>>,
- pub tex_occlusion: Option<Resource<Image>>,
+ pub tex_normal: Option<Resource<Image<'static>>>,
+ pub tex_roughness: Option<Resource<Image<'static>>>,
+ pub tex_metallic: Option<Resource<Image<'static>>>,
+ pub tex_albedo: Option<Resource<Image<'static>>>,
+ pub tex_transmission: Option<Resource<Image<'static>>>,
+ pub tex_alpha: Option<Resource<Image<'static>>>,
+ pub tex_emission: Option<Resource<Image<'static>>>,
+ pub tex_thickness: Option<Resource<Image<'static>>>,
+ pub tex_occlusion: Option<Resource<Image<'static>>>,
}
#[derive(Debug, Default, Clone)]
@@ -97,7 +98,7 @@ pub struct CollisionPart {
pub struct PrefabIndex(pub BTreeMap<String, Resource<Prefab>>);
#[derive(Debug, Clone)]
-pub struct Image(pub Vec<u8>);
+pub struct Image<'a>(pub Cow<'a, [u8]>);
impl ReadWrite for PrefabIndex {
fn write(&self, w: &mut dyn Write) -> Result<()> {
@@ -331,12 +332,14 @@ fn write_kv(w: &mut dyn Write, key: &[u8], value: &[u8]) -> Result<()> {
Ok(())
}
-impl ReadWrite for Image {
+impl<'a> ReadWrite for Image<'a> {
fn write(&self, w: &mut dyn Write) -> Result<()> {
self.0.write(w)
}
-
fn read(r: &mut dyn Read) -> Result<Self> {
- Ok(Self(<Vec<u8> as ReadWrite>::read(r)?))
+ Ok(Self(<Vec<u8> as ReadWrite>::read(r)?.into()))
+ }
+ fn write_alloc<'b>(&'b self) -> Cow<'b, [u8]> {
+ self.0.write_alloc()
}
}