From a5e8a82801b62f3ff5dc6b63993ed2524b016e43 Mon Sep 17 00:00:00 2001 From: Joshua Simmons Date: Sun, 20 Nov 2022 17:35:01 +0100 Subject: [PATCH] Move image stuff into its own crate --- Cargo.lock | 8 ++++++++ Cargo.toml | 1 + narcissus-core/src/lib.rs | 2 -- narcissus-image/Cargo.toml | 9 +++++++++ .../texture.rs => narcissus-image/src/lib.rs | 18 +++++++++++++----- narcissus/Cargo.toml | 1 + narcissus/src/main.rs | 9 +++++---- 7 files changed, 37 insertions(+), 11 deletions(-) create mode 100644 narcissus-image/Cargo.toml rename narcissus-core/src/texture.rs => narcissus-image/src/lib.rs (92%) diff --git a/Cargo.lock b/Cargo.lock index 30b7efb..a6c4f68 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -37,6 +37,7 @@ dependencies = [ "narcissus-app", "narcissus-core", "narcissus-gpu", + "narcissus-image", "narcissus-maths", ] @@ -65,6 +66,13 @@ dependencies = [ "vulkan-sys", ] +[[package]] +name = "narcissus-image" +version = "0.1.0" +dependencies = [ + "stb_image-sys", +] + [[package]] name = "narcissus-maths" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 0f8c72e..bddc787 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,7 @@ members = [ "narcissus-app", "narcissus-core", "narcissus-gpu", + "narcissus-image", "narcissus-maths", "narcissus-world", ] diff --git a/narcissus-core/src/lib.rs b/narcissus-core/src/lib.rs index 83653ac..cffbf95 100644 --- a/narcissus-core/src/lib.rs +++ b/narcissus-core/src/lib.rs @@ -10,7 +10,6 @@ pub mod rand; pub mod raw_window; mod ref_count; pub mod slice; -mod texture; mod uuid; mod virtual_mem; mod virtual_vec; @@ -22,7 +21,6 @@ pub use fixed_vec::FixedVec; pub use mutex::Mutex; pub use pool::{Handle, Pool}; pub use ref_count::{Arc, Rc}; -pub use texture::Texture; pub use uuid::Uuid; pub use virtual_mem::{virtual_commit, virtual_free, virtual_reserve}; pub use virtual_vec::{VirtualDeque, VirtualVec}; diff --git a/narcissus-image/Cargo.toml b/narcissus-image/Cargo.toml new file mode 100644 index 0000000..f1435d4 --- /dev/null +++ b/narcissus-image/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "narcissus-image" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +stb_image-sys = { path = "../ffi/stb_image-sys" } \ No newline at end of file diff --git a/narcissus-core/src/texture.rs b/narcissus-image/src/lib.rs similarity index 92% rename from narcissus-core/src/texture.rs rename to narcissus-image/src/lib.rs index 49fa4ec..9df77be 100644 --- a/narcissus-core/src/texture.rs +++ b/narcissus-image/src/lib.rs @@ -13,7 +13,7 @@ impl std::fmt::Display for LoadError { impl std::error::Error for LoadError {} -pub struct Texture { +pub struct Image { width: usize, height: usize, components: usize, @@ -21,8 +21,8 @@ pub struct Texture { buffer: NonNull, } -impl Texture { - pub fn from_buffer(buffer: &[u8]) -> Result { +impl Image { + pub fn from_buffer(buffer: &[u8]) -> Result { let mut x = 0; let mut y = 0; let mut components = 0; @@ -47,7 +47,7 @@ impl Texture { let components = components as usize; let len = x * y * components; - Ok(Texture { + Ok(Image { width: x, height: y, components, @@ -95,9 +95,17 @@ impl Texture { } } -impl Drop for Texture { +impl Drop for Image { fn drop(&mut self) { // Safety: Always allocated by `stbi_load_xxx` functions. unsafe { stbi_image_free(self.buffer.as_ptr() as *mut _) } } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn it_works() {} +} diff --git a/narcissus/Cargo.toml b/narcissus/Cargo.toml index 8605f27..2332c3a 100644 --- a/narcissus/Cargo.toml +++ b/narcissus/Cargo.toml @@ -8,5 +8,6 @@ edition = "2021" [dependencies] narcissus-core = { path = "../narcissus-core" } narcissus-maths = { path = "../narcissus-maths" } +narcissus-image = { path = "../narcissus-image" } narcissus-app = { path = "../narcissus-app" } narcissus-gpu = { path = "../narcissus-gpu" } \ No newline at end of file diff --git a/narcissus/src/main.rs b/narcissus/src/main.rs index 4905ee8..c433417 100644 --- a/narcissus/src/main.rs +++ b/narcissus/src/main.rs @@ -1,7 +1,7 @@ use std::{path::Path, time::Instant}; use narcissus_app::{create_app, Event, Key, WindowDesc}; -use narcissus_core::{cstr, default, obj, rand::Pcg64, Texture}; +use narcissus_core::{cstr, default, obj, rand::Pcg64}; use narcissus_gpu::{ create_device, Access, Bind, BindGroupLayoutDesc, BindGroupLayoutEntryDesc, BindingType, Buffer, BufferDesc, BufferImageCopy, BufferUsageFlags, ClearValue, CompareOp, CullingMode, @@ -11,6 +11,7 @@ use narcissus_gpu::{ SamplerAddressMode, SamplerDesc, SamplerFilter, Scissor, ShaderDesc, ShaderStageFlags, StoreOp, ThreadToken, Topology, TypedBind, Viewport, }; +use narcissus_image as image; use narcissus_maths::{ sin_cos_pi_f32, vec2, vec3, vec4, Affine3, Deg, HalfTurn, Mat3, Mat4, Point3, Vec2, Vec3, }; @@ -113,11 +114,11 @@ fn load_obj>(path: P) -> (Vec, Vec) { (vertices, indices) } -fn load_texture>(path: P) -> Texture { +fn load_image>(path: P) -> image::Image { let start = std::time::Instant::now(); let path = path.as_ref(); let texture = - Texture::from_buffer(std::fs::read(path).expect("failed to read file").as_slice()) + image::Image::from_buffer(std::fs::read(path).expect("failed to read file").as_slice()) .expect("failed to load image"); println!( "loading image {path:?} took {:?}", @@ -365,7 +366,7 @@ pub fn main() { stencil_front: default(), }); - let blåhaj_image = load_texture("narcissus/data/blåhaj.png"); + let blåhaj_image = load_image("narcissus/data/blåhaj.png"); let (blåhaj_vertices, blåhaj_indices) = load_obj("narcissus/data/blåhaj.obj"); let blåhaj_vertex_buffer = create_buffer_with_data( -- 2.49.0