From a148472d83f8902f700bb938dd5f89df2f532b97 Mon Sep 17 00:00:00 2001 From: Elham Aryanpur Date: Sun, 4 May 2025 14:37:23 +0300 Subject: [PATCH 01/12] fix: #108 - exchanged StringBuffer with AsRef and String with Arc --- Cargo.lock | 22 +- Cargo.toml | 4 +- crates/blue_engine_core/src/definition.rs | 34 +- crates/blue_engine_core/src/objects/mod.rs | 18 +- .../src/objects/resource_sharing.rs | 18 +- .../src/objects/transformation.rs | 13 +- crates/blue_engine_core/src/prelude/mod.rs | 37 - .../src/prelude/primitive_shapes.rs | 22 +- crates/blue_engine_core/src/render.rs | 4 +- crates/blue_engine_utilities/Cargo.lock | 1222 +++++++++++------ crates/blue_engine_utilities/Cargo.toml | 17 +- .../src/definitions/animation.rs | 33 +- .../src/definitions/egui.rs | 1 - .../src/definitions/model_load.rs | 92 +- .../src/definitions/physics.rs | 2 +- .../src/definitions/raycast.rs | 37 +- examples/shapes/square.rs | 9 +- 17 files changed, 987 insertions(+), 598 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d0e16ca..d29ff64 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -301,10 +301,28 @@ dependencies = [ name = "blue_engine" version = "0.9.0" dependencies = [ - "blue_engine_core", + "blue_engine_core 0.9.0", "blue_engine_dynamic", ] +[[package]] +name = "blue_engine_core" +version = "0.9.0" +dependencies = [ + "android_logger", + "bytemuck", + "downcast", + "env_logger", + "flume", + "glam", + "image", + "log", + "pollster", + "thiserror 2.0.12", + "wgpu", + "winit", +] + [[package]] name = "blue_engine_core" version = "0.9.0" @@ -331,7 +349,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ba8279e15a6297e46bae68f0c893eb2b3729a6f25f6b534f8a55e8246fc2568" dependencies = [ - "blue_engine_core", + "blue_engine_core 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 8890a77..ae2798e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -44,8 +44,8 @@ glam_fast_math = [ ] [dependencies] -blue_engine_core = { version = "0.9.0", optional = true } -# blue_engine_core = { path = "crates/blue_engine_core", optional = true } +# blue_engine_core = { version = "0.9.0", optional = true } +blue_engine_core = { path = "crates/blue_engine_core", optional = true } # Wasm does not support dynamic linking. [target.'cfg(not(target_family = "wasm"))'.dependencies] diff --git a/crates/blue_engine_core/src/definition.rs b/crates/blue_engine_core/src/definition.rs index 5971a36..f2f7300 100644 --- a/crates/blue_engine_core/src/definition.rs +++ b/crates/blue_engine_core/src/definition.rs @@ -9,7 +9,7 @@ use wgpu::{BindGroupLayout, Sampler, Texture, TextureView, util::DeviceExt}; use crate::{ InstanceRaw, UnsignedIntType, - prelude::{Shaders, StringBuffer, Textures, UniformBuffers, Vertex}, + prelude::{Shaders, Textures, UniformBuffers, Vertex}, }; /// Container for pipeline values. Each pipeline takes only 1 vertex shader, @@ -32,7 +32,7 @@ unsafe impl Sync for Pipeline {} #[derive(Debug)] pub enum PipelineData { /// No data, just a reference to a buffer - Copy(String), + Copy(std::sync::Arc), /// The actual data Data(T), } @@ -181,7 +181,7 @@ impl crate::prelude::Renderer { /// Creates a shader group, the input must be spir-v compiled vertex and fragment shader pub fn build_shader( &mut self, - name: impl StringBuffer, + name: impl AsRef, shader_source: String, uniform_layout: Option<&BindGroupLayout>, settings: ShaderSettings, @@ -189,7 +189,7 @@ impl crate::prelude::Renderer { let shader = self .device .create_shader_module(wgpu::ShaderModuleDescriptor { - label: Some(format!("{} Shader", name.as_str()).as_str()), + label: Some(format!("{} Shader", name.as_ref()).as_str()), source: wgpu::ShaderSource::Wgsl(shader_source.into()), }); @@ -212,7 +212,7 @@ impl crate::prelude::Renderer { let render_pipeline = self .device .create_render_pipeline(&wgpu::RenderPipelineDescriptor { - label: Some(name.as_str()), + label: Some(name.as_ref()), layout: Some(&render_pipeline_layout), vertex: wgpu::VertexState { module: &shader, @@ -262,7 +262,7 @@ impl crate::prelude::Renderer { /// Creates a new texture data pub fn build_texture( &mut self, - name: impl StringBuffer, + name: impl AsRef, texture_data: TextureData, texture_mode: TextureMode, ) -> Result { @@ -287,7 +287,7 @@ impl crate::prelude::Renderer { depth_or_array_layers: 1, }; let texture = self.device.create_texture(&wgpu::TextureDescriptor { - label: Some(name.as_str()), + label: Some(name.as_ref()), size, mip_level_count: 1, sample_count: 1, @@ -346,7 +346,7 @@ impl crate::prelude::Renderer { } pub(crate) fn build_depth_buffer( - label: impl StringBuffer, + label: impl AsRef, device: &wgpu::Device, config: &wgpu::SurfaceConfiguration, ) -> (Texture, TextureView, Sampler) { @@ -356,7 +356,7 @@ impl crate::prelude::Renderer { depth_or_array_layers: 1, }; let desc = wgpu::TextureDescriptor { - label: Some(label.as_str()), + label: Some(label.as_ref()), size, mip_level_count: 1, sample_count: 1, @@ -389,12 +389,12 @@ impl crate::prelude::Renderer { /// This function doesn't build the entire uniform buffers list, but rather only one of them pub fn build_uniform_buffer_part( &self, - name: impl StringBuffer, + name: impl AsRef, value: T, ) -> wgpu::Buffer { self.device .create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some(name.as_str()), + label: Some(name.as_ref()), contents: bytemuck::cast_slice(&[value]), usage: wgpu::BufferUsages::UNIFORM, }) @@ -491,25 +491,25 @@ impl crate::SignalStorage { } /// Adds an event - pub fn add_signal(&mut self, key: impl StringBuffer, event: Box) { - self.events.push((key.as_string(), event)); + pub fn add_signal(&mut self, key: impl AsRef, event: Box) { + self.events.push((key.as_ref().to_string(), event)); } /// Removes an event - pub fn remove_signal(&mut self, key: impl StringBuffer) { - self.events.retain(|k| k.0 != key.as_string()); + pub fn remove_signal(&mut self, key: impl AsRef) { + self.events.retain(|k| k.0 != key.as_ref()); } /// Gets an event pub fn get_signal( &mut self, - key: impl StringBuffer, + key: impl AsRef, ) -> Option> { // fetch the event let event = self .events .iter_mut() - .find(|k| k.0 == key.as_string()) + .find(|k| k.0 == key.as_ref()) .map(|k| &mut k.1); if let Some(event) = event { diff --git a/crates/blue_engine_core/src/objects/mod.rs b/crates/blue_engine_core/src/objects/mod.rs index 6f11bea..11b9897 100644 --- a/crates/blue_engine_core/src/objects/mod.rs +++ b/crates/blue_engine_core/src/objects/mod.rs @@ -1,5 +1,5 @@ //! # Objects -//! +//! //! Objects make it easier to work with Blue Engine, it automates most of work needed for //! creating 3D objects and showing them on screen. A range of default objects are available //! as well as ability to customize each of them and even create your own! You can also @@ -7,10 +7,10 @@ use crate::utils::default_resources::{DEFAULT_SHADER, DEFAULT_TEXTURE}; use crate::{ - Matrix4, Pipeline, PipelineData, Quaternion, Renderer, ShaderSettings, StringBuffer, - TextureData, UnsignedIntType, Vector3, Vector4, Vertex, + Matrix4, Pipeline, PipelineData, Quaternion, Renderer, ShaderSettings, TextureData, + UnsignedIntType, Vector3, Vector4, Vertex, }; - +use std::sync::Arc; mod transformation; pub use transformation::{RotateAmount, RotateAxis}; mod instance; @@ -99,7 +99,7 @@ unsafe impl Sync for ObjectSettings {} /// /// This is a container for objects that is used to apply different operations on the objects at the same time. /// It can deref to the object hashmap itself when needed. -pub struct ObjectStorage(std::collections::HashMap); +pub struct ObjectStorage(std::collections::HashMap, Object>); impl ObjectStorage { /// Creates a new object storage pub fn new() -> Self { @@ -113,7 +113,7 @@ impl Default for ObjectStorage { } unsafe impl Send for ObjectStorage {} unsafe impl Sync for ObjectStorage {} -crate::macros::impl_deref!(ObjectStorage, std::collections::HashMap); +crate::macros::impl_deref!(ObjectStorage, std::collections::HashMap, Object>); impl Object { /// Creates a new object @@ -121,7 +121,7 @@ impl Object { /// Is used to define a new object and add it to the storage. This offers full customizability /// and a framework for in-engine shapes to be developed. pub fn new( - name: impl StringBuffer, + name: impl AsRef, vertices: Vec, indices: Vec, settings: ObjectSettings, @@ -138,7 +138,7 @@ impl Object { let shader_source = ShaderBuilder::new(DEFAULT_SHADER.to_string(), settings.camera_effect.clone()); let shader = renderer.build_shader( - name.as_str(), + name.as_ref(), shader_source.shader.clone(), Some(&uniform.1), settings.shader_settings, @@ -155,7 +155,7 @@ impl Object { let instance_buffer = renderer.build_instance(vec![instance.build()]); Ok(Object { - name: name.as_arc(), + name: name.as_ref().into(), vertices, indices, pipeline: Pipeline { diff --git a/crates/blue_engine_core/src/objects/resource_sharing.rs b/crates/blue_engine_core/src/objects/resource_sharing.rs index 4c76b62..d378b31 100644 --- a/crates/blue_engine_core/src/objects/resource_sharing.rs +++ b/crates/blue_engine_core/src/objects/resource_sharing.rs @@ -1,28 +1,28 @@ use super::{Instance, Object}; -use crate::{PipelineData, StringBuffer}; +use crate::PipelineData; impl Object { /// References another object's vertices - pub fn reference_vertices(&mut self, object_id: impl StringBuffer) -> &mut Self { - self.pipeline.vertex_buffer = PipelineData::Copy(object_id.as_string()); + pub fn reference_vertices(&mut self, object_id: impl AsRef) -> &mut Self { + self.pipeline.vertex_buffer = PipelineData::Copy(object_id.as_ref().into()); self } /// References another object's shader - pub fn reference_shader(&mut self, object_id: impl StringBuffer) -> &mut Self { - self.pipeline.shader = PipelineData::Copy(object_id.as_string()); + pub fn reference_shader(&mut self, object_id: impl AsRef) -> &mut Self { + self.pipeline.shader = PipelineData::Copy(object_id.as_ref().into()); self } /// References another object's texture - pub fn reference_texture(&mut self, object_id: impl StringBuffer) -> &mut Self { - self.pipeline.texture = PipelineData::Copy(object_id.as_string()); + pub fn reference_texture(&mut self, object_id: impl AsRef) -> &mut Self { + self.pipeline.texture = PipelineData::Copy(object_id.as_ref().into()); self } /// References another object's uniform buffer - pub fn reference_uniform_buffer(&mut self, object_id: impl StringBuffer) -> &mut Self { - self.pipeline.uniform = PipelineData::Copy(object_id.as_string()); + pub fn reference_uniform_buffer(&mut self, object_id: impl AsRef) -> &mut Self { + self.pipeline.uniform = PipelineData::Copy(object_id.as_ref().into()); self } diff --git a/crates/blue_engine_core/src/objects/transformation.rs b/crates/blue_engine_core/src/objects/transformation.rs index 65157ba..5fa2ed1 100644 --- a/crates/blue_engine_core/src/objects/transformation.rs +++ b/crates/blue_engine_core/src/objects/transformation.rs @@ -1,10 +1,9 @@ +use super::Object; use crate::{ - Matrix4, PipelineData, Quaternion, Renderer, StringBuffer, TextureData, TextureMode, Textures, - Vector3, Vector4, + Matrix4, PipelineData, Quaternion, Renderer, TextureData, TextureMode, Textures, Vector3, + Vector4, }; -use super::Object; - /// Defines how the rotation axis is #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum RotateAxis { @@ -31,8 +30,8 @@ unsafe impl Sync for RotateAmount {} impl Object { /// Sets the name of the object - pub fn set_name(&mut self, name: impl StringBuffer) -> &mut Self { - self.name = name.as_arc(); + pub fn set_name(&mut self, name: impl AsRef) -> &mut Self { + self.name = name.as_ref().into(); self } @@ -156,7 +155,7 @@ impl Object { /// This function previously served the role of [crate::Object::set_texture_raw] pub fn set_texture( &mut self, - name: impl StringBuffer, + name: impl AsRef, texture_data: TextureData, texture_mode: TextureMode, renderer: &mut Renderer, diff --git a/crates/blue_engine_core/src/prelude/mod.rs b/crates/blue_engine_core/src/prelude/mod.rs index c2ff404..ceff1c4 100644 --- a/crates/blue_engine_core/src/prelude/mod.rs +++ b/crates/blue_engine_core/src/prelude/mod.rs @@ -141,42 +141,5 @@ pub struct SignalStorage { pub events: Vec<(String, Box)>, } -/// A unified way to handle strings -pub trait StringBuffer: StringBufferTrait + Clone {} -/// A trait for [StringBuffer] -pub trait StringBufferTrait { - /// Returns the string as &[`str`] - fn as_str(&self) -> &str; - /// Returns the string as [`String`] - fn as_string(&self) -> String; - /// Returns Arc for ease of computation - fn as_arc(&self) -> std::sync::Arc; -} - -impl StringBufferTrait for String { - fn as_str(&self) -> &str { - self.as_ref() - } - fn as_string(&self) -> String { - self.clone() - } - fn as_arc(&self) -> std::sync::Arc { - self.as_str().into() - } -} -impl StringBuffer for String {} -impl StringBufferTrait for &str { - fn as_str(&self) -> &str { - self - } - fn as_string(&self) -> String { - self.to_string() - } - fn as_arc(&self) -> std::sync::Arc { - self.as_str().into() - } -} -impl StringBuffer for &str {} - /// To hold the width and height of the engine frames pub type WindowSize = (u32, u32); diff --git a/crates/blue_engine_core/src/prelude/primitive_shapes.rs b/crates/blue_engine_core/src/prelude/primitive_shapes.rs index 541b49a..f3ecdf8 100644 --- a/crates/blue_engine_core/src/prelude/primitive_shapes.rs +++ b/crates/blue_engine_core/src/prelude/primitive_shapes.rs @@ -4,7 +4,7 @@ use super::Object; use crate::{ - ObjectStorage, Renderer, StringBuffer, + ObjectStorage, Renderer, prelude::{ObjectSettings, UnsignedIntType, Vertex}, }; use std::f32::consts::PI; @@ -12,13 +12,13 @@ use std::f32::consts::PI; // MARK: 2D /// Creates a 2D triangle pub fn triangle( - name: impl StringBuffer, + name: impl AsRef, settings: ObjectSettings, renderer: &mut Renderer, objects: &mut ObjectStorage, ) -> Result<(), crate::error::Error> { objects.insert( - name.as_string(), + name.as_ref().into(), Object::new( name, vec![ @@ -49,13 +49,13 @@ pub fn triangle( /// Creates a 2D square pub fn square( - name: impl StringBuffer, + name: impl AsRef, settings: ObjectSettings, renderer: &mut Renderer, objects: &mut ObjectStorage, ) -> Result<(), crate::error::Error> { objects.insert( - name.as_string(), + name.as_ref().into(), Object::new( name, vec![ @@ -93,13 +93,13 @@ pub fn square( pub fn rectangle( width: f32, height: f32, - name: impl StringBuffer, + name: impl AsRef, settings: ObjectSettings, renderer: &mut Renderer, objects: &mut ObjectStorage, ) -> Result<(), crate::error::Error> { objects.insert( - name.as_string(), + name.as_ref().into(), Object::new( name, vec![ @@ -137,13 +137,13 @@ pub fn rectangle( /// Creates a 3D cube pub fn cube( - name: impl StringBuffer, + name: impl AsRef, settings: ObjectSettings, renderer: &mut Renderer, objects: &mut ObjectStorage, ) -> Result<(), crate::error::Error> { objects.insert( - name.as_string(), + name.as_ref().into(), Object::new( name, vec![ @@ -297,7 +297,7 @@ pub fn cube( /// example = (18, 36, 1.0) /// ``` pub fn uv_sphere( - name: impl StringBuffer, + name: impl AsRef, settings: ObjectSettings, details: (usize, usize, f32), renderer: &mut Renderer, @@ -349,7 +349,7 @@ pub fn uv_sphere( } objects.insert( - name.as_string(), + name.as_ref().into(), Object::new(name, vertices, indices, settings, renderer)?, ); diff --git a/crates/blue_engine_core/src/render.rs b/crates/blue_engine_core/src/render.rs index 7af4684..ee25aa8 100644 --- a/crates/blue_engine_core/src/render.rs +++ b/crates/blue_engine_core/src/render.rs @@ -474,7 +474,7 @@ macro_rules! gen_pipeline { ) -> Option<&'a $buffer_type> { match data { PipelineData::Copy(object_id) => { - let data = objects.get(object_id.as_str()); + let data = objects.get(object_id); if let Some(data) = data { $function_name(&data.pipeline.$buffer_field, objects) } else { @@ -502,7 +502,7 @@ fn get_pipeline_uniform_buffer<'a>( ) -> Option<&'a Option> { match data { PipelineData::Copy(object_id) => { - let data = objects.get(object_id.as_str()); + let data = objects.get(object_id); if let Some(data) = data { get_pipeline_uniform_buffer(&data.pipeline.uniform, objects) } else { diff --git a/crates/blue_engine_utilities/Cargo.lock b/crates/blue_engine_utilities/Cargo.lock index c45ae18..5e5a764 100644 --- a/crates/blue_engine_utilities/Cargo.lock +++ b/crates/blue_engine_utilities/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "ab_glyph" -version = "0.2.28" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79faae4620f45232f599d9bc7b290f88247a0834162c4495ab2f02d60004adfb" +checksum = "ec3672c180e71eeaaac3a541fbbc5f5ad4def8b747c595ad30d674e43049f7b0" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -18,12 +18,6 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - [[package]] name = "adler2" version = "2.0.0" @@ -37,10 +31,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom", + "getrandom 0.2.15", "once_cell", "version_check", - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -60,9 +54,9 @@ checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-activity" @@ -102,9 +96,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.15" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -117,43 +111,44 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.4" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "once_cell", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.87" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f00e1f6e58a40e807377c75c6a7f97bf9044fab57816f2414e6f5f4499d7b8" +checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" [[package]] name = "approx" @@ -166,25 +161,27 @@ dependencies = [ [[package]] name = "arbitrary" -version = "1.3.2" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" +checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" [[package]] name = "arboard" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb4009533e8ff8f1450a5bcbc30f4242a1d34442221f72314bea1f5dc9c7f89" +checksum = "c1df21f715862ede32a0c525ce2ca4d52626bb0007f8c18b87a384503ac33e70" dependencies = [ "clipboard-win", - "core-graphics", "image", "log", - "objc2", - "objc2-app-kit", - "objc2-foundation", + "objc2 0.6.0", + "objc2-app-kit 0.3.0", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation 0.3.0", "parking_lot", - "windows-sys 0.48.0", + "percent-encoding", + "windows-sys 0.59.0", "x11rb", ] @@ -196,14 +193,14 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.100", ] [[package]] name = "arrayref" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" @@ -234,9 +231,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "av1-grain" @@ -254,9 +251,9 @@ dependencies = [ [[package]] name = "avif-serialize" -version = "0.8.1" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876c75a42f6364451a033496a14c44bffe41f5f4a8236f697391f11024e596d2" +checksum = "98922d6a4cfbcb08820c69d8eeccc05bb1f29bfa06b4f5b1dbfe9a868bd7608e" dependencies = [ "arrayvec", ] @@ -311,9 +308,9 @@ dependencies = [ [[package]] name = "bitstream-io" -version = "2.5.3" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b81e1519b0d82120d2fd469d5bfb2919a9361c48b02d82d04befc1cdd2002452" +checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" [[package]] name = "block" @@ -327,14 +324,14 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" dependencies = [ - "objc2", + "objc2 0.5.2", ] [[package]] name = "blue_engine" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a06c4eae4a4acf2c34546101a20137b02b04b79f581632fbae9b0149781ff71" +checksum = "345c9594e244ae3dad262744464f193aa372d83312f59194a3fc9c9fde52c562" dependencies = [ "blue_engine_core", "blue_engine_dynamic", @@ -342,33 +339,33 @@ dependencies = [ [[package]] name = "blue_engine_core" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80a06eba2ab8c5e6917b44531d29b115e1e1ce60cb758e9016bcd44a0049c5ce" +checksum = "a84836a16d3b3cbd75661b5365361031160210e6b212ad6d3ec4f361e2c5ca15" dependencies = [ "bytemuck", "downcast", "env_logger", + "flume", "glam", "image", "pollster", - "thiserror 2.0.9", + "thiserror 2.0.12", "wgpu", - "winit", ] [[package]] name = "blue_engine_dynamic" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab2d620a8e1adf37738bccdfff208e1a8120164a2234060b95ce075528eb2cba" +checksum = "5ba8279e15a6297e46bae68f0c893eb2b3729a6f25f6b534f8a55e8246fc2568" dependencies = [ "blue_engine_core", ] [[package]] name = "blue_engine_utilities" -version = "0.8.0" +version = "0.9.0" dependencies = [ "blue_engine", "egui", @@ -384,34 +381,34 @@ dependencies = [ [[package]] name = "built" -version = "0.7.4" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "236e6289eda5a812bc6b53c3b024039382a2895fbbeef2d748b2931546d392c4" +checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "bytemuck" -version = "1.21.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" +checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.7.1" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc8b54b395f2fcfbb3d90c47b01c7f444d94d05bdeb775811dec868ac3bbc26" +checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.100", ] [[package]] @@ -428,9 +425,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.7.1" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "calloop" @@ -460,9 +457,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.18" +version = "1.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62ac837cdb5cb22e10a256099b4fc502b1dfe560cb282963a974d7abd80e476" +checksum = "8e3a13707ac958681c13b39b458c073d0d9bc8a22cb1b2f4c8e55eb72c13f362" dependencies = [ "jobserver", "libc", @@ -524,9 +521,9 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "colorchoice" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "combine" @@ -557,6 +554,16 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -570,7 +577,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", "core-graphics-types", "foreign-types", "libc", @@ -583,7 +590,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", "libc", ] @@ -611,18 +618,18 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.13" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -639,24 +646,24 @@ dependencies = [ [[package]] name = "crossbeam-queue" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "cursor-icon" @@ -670,6 +677,17 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "dlib" version = "0.5.2" @@ -681,9 +699,9 @@ dependencies = [ [[package]] name = "document-features" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0" +checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" dependencies = [ "litrs", ] @@ -771,9 +789,9 @@ dependencies = [ [[package]] name = "either" -version = "1.13.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "emath" @@ -795,9 +813,9 @@ dependencies = [ [[package]] name = "env_filter" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" dependencies = [ "log", "regex", @@ -805,14 +823,14 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.5" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" dependencies = [ "anstream", "anstyle", "env_filter", - "humantime", + "jiff", "log", ] @@ -842,18 +860,18 @@ checksum = "fc7e7a64c02cf7a5b51e745a9e45f60660a286f151c238b9d397b3e923f5082f" [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -864,15 +882,14 @@ checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" [[package]] name = "exr" -version = "1.72.0" +version = "1.73.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4" +checksum = "f83197f59927b46c04a183a619b7c29df34e63e63c7869320862268c0ef687e0" dependencies = [ "bit_field", - "flume", "half", "lebe", - "miniz_oxide 0.7.4", + "miniz_oxide", "rayon-core", "smallvec", "zune-inflate", @@ -890,32 +907,41 @@ dependencies = [ [[package]] name = "fdeflate" -version = "0.3.4" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" dependencies = [ "simd-adler32", ] [[package]] name = "flate2" -version = "1.0.33" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" +checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" dependencies = [ "crc32fast", - "miniz_oxide 0.8.0", + "miniz_oxide", ] [[package]] name = "flume" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" dependencies = [ + "futures-core", + "futures-sink", + "nanorand", "spin", ] +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + [[package]] name = "foreign-types" version = "0.5.0" @@ -934,7 +960,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.100", ] [[package]] @@ -952,6 +978,18 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + [[package]] name = "gethostname" version = "0.4.3" @@ -969,8 +1007,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", + "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", ] [[package]] @@ -996,9 +1048,9 @@ dependencies = [ [[package]] name = "glam" -version = "0.30.1" +version = "0.30.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf3aa70d918d2b234126ff4f850f628f172542bf0603ded26b8ee36e5e22d5f9" +checksum = "d0e9b6647e9b41d3a5ef02964c6be01311a7f2472fea40595c635c6d046c259e" dependencies = [ "bytemuck", "serde", @@ -1040,7 +1092,7 @@ dependencies = [ "inflections", "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.100", ] [[package]] @@ -1057,9 +1109,9 @@ dependencies = [ [[package]] name = "glutin_wgl_sys" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a4e1951bbd9434a81aa496fe59ccc2235af3820d27b85f9314e279609211e2c" +checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e" dependencies = [ "gl_generator", ] @@ -1097,9 +1149,9 @@ dependencies = [ [[package]] name = "gpu-descriptor" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c08c1f623a8d0b722b8b99f821eb0ba672a1618f0d3b16ddbee1cedd2dd8557" +checksum = "dcf29e94d6d243368b7a56caa16bc213e4f9f8ed38c4d9557069527b5d5281ca" dependencies = [ "bitflags 2.9.0", "gpu-descriptor-types", @@ -1117,9 +1169,9 @@ dependencies = [ [[package]] name = "half" -version = "2.4.1" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" dependencies = [ "cfg-if", "crunchy", @@ -1136,12 +1188,13 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" dependencies = [ - "ahash", "allocator-api2", + "equivalent", + "foldhash", ] [[package]] @@ -1174,34 +1227,157 @@ checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] -name = "humantime" -version = "2.1.0" +name = "icu_collections" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "icu_normalizer", + "icu_properties", ] [[package]] name = "image" -version = "0.25.2" +version = "0.25.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99314c8a2152b8ddb211f924cdae532d8c5e4c8bb54728e12fff1b0cd5963a10" +checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" dependencies = [ "bytemuck", "byteorder-lite", @@ -1222,9 +1398,9 @@ dependencies = [ [[package]] name = "image-webp" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f79afb8cbee2ef20f59ccd477a218c12a93943d075b492015ecb1bb81f8ee904" +checksum = "b77d01e822461baa8409e156015a1d91735549f0f2c17691bd2d996bef238f7f" dependencies = [ "byteorder-lite", "quick-error", @@ -1232,9 +1408,9 @@ dependencies = [ [[package]] name = "imgref" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44feda355f4159a7c757171a77de25daf6411e217b4cabd03bd6650690468126" +checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" [[package]] name = "indenter" @@ -1244,9 +1420,9 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexmap" -version = "2.5.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", "hashbrown", @@ -1266,7 +1442,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.100", ] [[package]] @@ -1286,9 +1462,33 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jiff" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "1f33145a5cbea837164362c7bd596106eb7c5198f97d1ba6f6ebb3223952e488" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "jiff-static" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43ce13c40ec6956157a3635d97a1ee2df323b263f09ea14165131289cb0f5c19" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] [[package]] name = "jni" @@ -1314,10 +1514,11 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ + "getrandom 0.3.2", "libc", ] @@ -1329,9 +1530,9 @@ checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" [[package]] name = "js-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ "once_cell", "wasm-bindgen", @@ -1388,26 +1589,25 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "libc" -version = "0.2.158" +version = "0.2.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" [[package]] name = "libfuzzer-sys" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a96cfd5557eb82f2b83fed4955246c988d331975a002961b07c81584d107e7f7" +checksum = "cf78f52d400cf2d84a3a973a78a592b4adc535739e0a5597a0da6f0c357adc75" dependencies = [ "arbitrary", "cc", - "once_cell", ] [[package]] name = "libloading" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", "windows-targets 0.52.6", @@ -1415,26 +1615,32 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.8" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" [[package]] name = "libredox" -version = "0.0.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.9.0", "libc", - "redox_syscall 0.4.1", + "redox_syscall 0.5.11", ] [[package]] name = "linux-raw-sys" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "litemap" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" [[package]] name = "litrs" @@ -1454,9 +1660,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "loop9" @@ -1493,6 +1699,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" dependencies = [ "cfg-if", + "rayon", ] [[package]] @@ -1503,9 +1710,9 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memmap2" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" +checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" dependencies = [ "libc", ] @@ -1533,21 +1740,12 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" -dependencies = [ - "adler", - "simd-adler32", -] - -[[package]] -name = "miniz_oxide" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" dependencies = [ "adler2", + "simd-adler32", ] [[package]] @@ -1574,15 +1772,15 @@ dependencies = [ "spirv", "strum", "termcolor", - "thiserror 2.0.9", + "thiserror 2.0.12", "unicode-xid", ] [[package]] name = "nalgebra" -version = "0.33.0" +version = "0.33.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c4b5f057b303842cf3262c27e465f4c303572e7f6b0648f60e16248ac3397f4" +checksum = "26aecdf64b707efd1310e3544d709c5c0ac61c13756046aaaba41be5c4f66a3b" dependencies = [ "approx", "matrixmultiply", @@ -1602,7 +1800,16 @@ checksum = "254a5372af8fc138e36684761d3c0cdb758a4410e938babcff1c860ce14ddbfc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.100", +] + +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom 0.2.15", ] [[package]] @@ -1699,7 +1906,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.100", ] [[package]] @@ -1750,7 +1957,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.100", ] [[package]] @@ -1788,6 +1995,15 @@ dependencies = [ "objc2-encode", ] +[[package]] +name = "objc2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3531f65190d9cff863b77a99857e74c314dd16bf56c538c4b57c7cbc3f3a6e59" +dependencies = [ + "objc2-encode", +] + [[package]] name = "objc2-app-kit" version = "0.2.2" @@ -1797,13 +2013,25 @@ dependencies = [ "bitflags 2.9.0", "block2", "libc", - "objc2", + "objc2 0.5.2", "objc2-core-data", "objc2-core-image", - "objc2-foundation", + "objc2-foundation 0.2.2", "objc2-quartz-core", ] +[[package]] +name = "objc2-app-kit" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5906f93257178e2f7ae069efb89fbd6ee94f0592740b5f8a1512ca498814d0fb" +dependencies = [ + "bitflags 2.9.0", + "objc2 0.6.0", + "objc2-core-graphics", + "objc2-foundation 0.3.0", +] + [[package]] name = "objc2-cloud-kit" version = "0.2.2" @@ -1812,9 +2040,9 @@ checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ "bitflags 2.9.0", "block2", - "objc2", + "objc2 0.5.2", "objc2-core-location", - "objc2-foundation", + "objc2-foundation 0.2.2", ] [[package]] @@ -1824,8 +2052,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" dependencies = [ "block2", - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -1836,8 +2064,30 @@ checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ "bitflags 2.9.0", "block2", - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daeaf60f25471d26948a1c2f840e3f7d86f4109e3af4e8e4b5cd70c39690d925" +dependencies = [ + "bitflags 2.9.0", + "objc2 0.6.0", +] + +[[package]] +name = "objc2-core-graphics" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dca602628b65356b6513290a21a6405b4d4027b8b250f0b98dddbb28b7de02" +dependencies = [ + "bitflags 2.9.0", + "objc2 0.6.0", + "objc2-core-foundation", + "objc2-io-surface", ] [[package]] @@ -1847,8 +2097,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" dependencies = [ "block2", - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", "objc2-metal", ] @@ -1859,16 +2109,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" dependencies = [ "block2", - "objc2", + "objc2 0.5.2", "objc2-contacts", - "objc2-foundation", + "objc2-foundation 0.2.2", ] [[package]] name = "objc2-encode" -version = "4.0.3" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" [[package]] name = "objc2-foundation" @@ -1880,7 +2130,29 @@ dependencies = [ "block2", "dispatch", "libc", - "objc2", + "objc2 0.5.2", +] + +[[package]] +name = "objc2-foundation" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a21c6c9014b82c39515db5b396f91645182611c97d24637cf56ac01e5f8d998" +dependencies = [ + "bitflags 2.9.0", + "objc2 0.6.0", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-surface" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "161a8b87e32610086e1a7a9e9ec39f84459db7b3a0881c1f16ca5a2605581c19" +dependencies = [ + "bitflags 2.9.0", + "objc2 0.6.0", + "objc2-core-foundation", ] [[package]] @@ -1890,9 +2162,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" dependencies = [ "block2", - "objc2", - "objc2-app-kit", - "objc2-foundation", + "objc2 0.5.2", + "objc2-app-kit 0.2.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -1903,8 +2175,8 @@ checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ "bitflags 2.9.0", "block2", - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -1915,8 +2187,8 @@ checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ "bitflags 2.9.0", "block2", - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", "objc2-metal", ] @@ -1926,8 +2198,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" dependencies = [ - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -1938,12 +2210,12 @@ checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ "bitflags 2.9.0", "block2", - "objc2", + "objc2 0.5.2", "objc2-cloud-kit", "objc2-core-data", "objc2-core-image", "objc2-core-location", - "objc2-foundation", + "objc2-foundation 0.2.2", "objc2-link-presentation", "objc2-quartz-core", "objc2-symbols", @@ -1958,8 +2230,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" dependencies = [ "block2", - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -1970,40 +2242,40 @@ checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ "bitflags 2.9.0", "block2", - "objc2", + "objc2 0.5.2", "objc2-core-location", - "objc2-foundation", + "objc2-foundation 0.2.2", ] [[package]] name = "once_cell" -version = "1.20.2" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "orbclient" -version = "0.3.47" +version = "0.3.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" +checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43" dependencies = [ "libredox", ] [[package]] name = "ordered-float" -version = "4.2.2" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a91171844676f8c7990ce64959210cd2eaef32c2612c50f9fae9f8aaa6065a6" +checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" dependencies = [ "num-traits", ] [[package]] name = "owned_ttf_parser" -version = "0.24.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490d3a563d3122bf7c911a59b0add9389e5ec0f5f0c3ac6b91ff235a0e6a7f90" +checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4" dependencies = [ "ttf-parser", ] @@ -2026,7 +2298,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.3", + "redox_syscall 0.5.11", "smallvec", "windows-targets 0.52.6", ] @@ -2049,7 +2321,7 @@ dependencies = [ "num-traits", "ordered-float", "rstar", - "rustc-hash 2.0.0", + "rustc-hash 2.1.1", "simba", "slab", "smallvec", @@ -2071,54 +2343,54 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project" -version = "1.1.5" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.100", ] [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "png" -version = "0.17.13" +version = "0.17.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" dependencies = [ "bitflags 1.3.2", "crc32fast", "fdeflate", "flate2", - "miniz_oxide 0.7.4", + "miniz_oxide", ] [[package]] name = "polling" -version = "3.7.3" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" dependencies = [ "cfg-if", "concurrent-queue", @@ -2135,13 +2407,28 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" +[[package]] +name = "portable-atomic" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy", + "zerocopy 0.8.24", ] [[package]] @@ -2152,18 +2439,18 @@ checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" [[package]] name = "proc-macro-crate" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ "toml_edit", ] [[package]] name = "proc-macro2" -version = "1.0.92" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" dependencies = [ "unicode-ident", ] @@ -2184,7 +2471,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30" dependencies = [ "quote", - "syn 2.0.93", + "syn 2.0.100", ] [[package]] @@ -2204,22 +2491,28 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quick-xml" -version = "0.36.1" +version = "0.37.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96a05e2e8efddfa51a84ca47cec303fac86c8541b686d37cac5efc0e094417bc" +checksum = "a4ce8c88de324ff838700f36fb6ab86c96df0e3c4ab6ef3a9b2044465cce1369" dependencies = [ "memchr", ] [[package]] name = "quote" -version = "1.0.37" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + [[package]] name = "rand" version = "0.8.5" @@ -2247,14 +2540,14 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", ] [[package]] name = "range-alloc" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab" +checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" [[package]] name = "rapier3d" @@ -2275,7 +2568,7 @@ dependencies = [ "ordered-float", "parry3d", "profiling", - "rustc-hash 2.0.0", + "rustc-hash 2.1.1", "simba", "thiserror 1.0.69", "vec_map", @@ -2318,15 +2611,16 @@ dependencies = [ [[package]] name = "ravif" -version = "0.11.10" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f0bfd976333248de2078d350bfdf182ff96e168a24d23d2436cef320dd4bdd" +checksum = "2413fd96bd0ea5cdeeb37eaf446a22e6ed7b981d792828721e74ded1980a45c6" dependencies = [ "avif-serialize", "imgref", "loop9", "quick-error", "rav1e", + "rayon", "rgb", ] @@ -2373,18 +2667,18 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" dependencies = [ "bitflags 2.9.0", ] [[package]] name = "regex" -version = "1.10.6" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", @@ -2394,9 +2688,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -2405,9 +2699,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "renderdoc-sys" @@ -2420,9 +2714,6 @@ name = "rgb" version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" -dependencies = [ - "bytemuck", -] [[package]] name = "robust" @@ -2449,21 +2740,21 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustix" -version = "0.38.36" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f55e80d50763938498dd5ebb18647174e0c76dc38c5505294bb224624f30f36" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ "bitflags 2.9.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2474,15 +2765,15 @@ checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "safe_arch" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3460605018fdc9612bce72735cba0d27efbcd9904780d44c7e3a9948f96148a" +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" dependencies = [ "bytemuck", ] @@ -2523,29 +2814,29 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.210" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.210" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.100", ] [[package]] name = "serde_json" -version = "1.0.128" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", "memchr", @@ -2555,9 +2846,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] @@ -2616,9 +2907,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.2" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "smithay-client-toolkit" @@ -2667,9 +2958,9 @@ dependencies = [ [[package]] name = "spade" -version = "2.12.1" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f5ef1f863aca7d1d7dda7ccfc36a0a4279bd6d3c375176e5e0712e25cb4889" +checksum = "1ece03ff43cd2a9b57ebf776ea5e78bd30b3b4185a619f041079f4109f385034" dependencies = [ "hashbrown", "num-traits", @@ -2732,7 +3023,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.93", + "syn 2.0.100", ] [[package]] @@ -2748,15 +3039,26 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.93" +version = "2.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c786062daee0d6db1132800e623df74274a0a87322d8e183338e01b3d98d058" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "system-deps" version = "6.2.2" @@ -2796,11 +3098,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.9" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" dependencies = [ - "thiserror-impl 2.0.9", + "thiserror-impl 2.0.12", ] [[package]] @@ -2811,18 +3113,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.100", ] [[package]] name = "thiserror-impl" -version = "2.0.9" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.100", ] [[package]] @@ -2862,25 +3164,20 @@ dependencies = [ ] [[package]] -name = "tinyvec" -version = "1.8.0" +name = "tinystr" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" dependencies = [ - "tinyvec_macros", + "displaydoc", + "zerovec", ] -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - [[package]] name = "toml" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" dependencies = [ "serde", "serde_spanned", @@ -2899,9 +3196,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.20" +version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ "indexmap", "serde", @@ -2912,9 +3209,9 @@ dependencies = [ [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", "tracing-core", @@ -2922,15 +3219,15 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" [[package]] name = "ttf-parser" -version = "0.24.1" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be21190ff5d38e8b4a2d3b6a3ae57f612cc39c96e83cedeaf7abc338a8bac4a" +checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" [[package]] name = "type-map" @@ -2943,42 +3240,27 @@ dependencies = [ [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.23" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-xid" @@ -2988,9 +3270,9 @@ checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "url" -version = "2.5.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -3003,6 +3285,18 @@ version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -3054,36 +3348,46 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.100", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.49" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", @@ -3094,9 +3398,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3104,28 +3408,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.100", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wayland-backend" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "056535ced7a150d45159d3a8dc30f91a2e2d588ca0b23f70e56033622b8016f6" +checksum = "b7208998eaa3870dad37ec8836979581506e0c5c64c20c9e79e9d2a10d6f47bf" dependencies = [ "cc", "downcast-rs", @@ -3137,9 +3444,9 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.6" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3f45d1222915ef1fd2057220c1d9d9624b7654443ea35c3877f7a52bd0a5a2d" +checksum = "c2120de3d33638aaef5b9f4472bff75f07c56379cf76ea320bd3a3d65ecaf73f" dependencies = [ "bitflags 2.9.0", "rustix", @@ -3160,9 +3467,9 @@ dependencies = [ [[package]] name = "wayland-cursor" -version = "0.31.6" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a94697e66e76c85923b0d28a0c251e8f0666f58fc47d316c0f4da6da75d37cb" +checksum = "a93029cbb6650748881a00e4922b076092a6a08c11e7fbdb923f064b23968c5d" dependencies = [ "rustix", "wayland-client", @@ -3171,9 +3478,9 @@ dependencies = [ [[package]] name = "wayland-protocols" -version = "0.32.4" +version = "0.32.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b5755d77ae9040bb872a25026555ce4cb0ae75fd923e90d25fba07d81057de0" +checksum = "0781cf46869b37e36928f7b432273c0995aa8aed9552c556fb18754420541efc" dependencies = [ "bitflags 2.9.0", "wayland-backend", @@ -3183,9 +3490,9 @@ dependencies = [ [[package]] name = "wayland-protocols-plasma" -version = "0.3.4" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0a41a6875e585172495f7a96dfa42ca7e0213868f4f15c313f7c33221a7eff" +checksum = "7ccaacc76703fefd6763022ac565b590fcade92202492381c95b2edfdf7d46b3" dependencies = [ "bitflags 2.9.0", "wayland-backend", @@ -3196,9 +3503,9 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.4" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad87b5fd1b1d3ca2f792df8f686a2a11e3fe1077b71096f7a175ab699f89109" +checksum = "248a02e6f595aad796561fa82d25601bd2c8c3b145b1c7453fc8f94c1a58f8b2" dependencies = [ "bitflags 2.9.0", "wayland-backend", @@ -3209,9 +3516,9 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.5" +version = "0.31.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597f2001b2e5fc1121e3d5b9791d3e78f05ba6bfa4641053846248e3a13661c3" +checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484" dependencies = [ "proc-macro2", "quick-xml", @@ -3220,9 +3527,9 @@ dependencies = [ [[package]] name = "wayland-sys" -version = "0.31.5" +version = "0.31.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efa8ac0d8e8ed3e3b5c9fc92c7881406a268e11555abe36493efabe649a29e09" +checksum = "dbcebb399c77d5aa9fa5db874806ee7b4eba4e73650948e8f93963f128896615" dependencies = [ "dlib", "log", @@ -3232,9 +3539,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -3252,18 +3559,17 @@ dependencies = [ [[package]] name = "webbrowser" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "425ba64c1e13b1c6e8c5d2541c8fac10022ca584f33da781db01b5756aef1f4e" +checksum = "d5df295f8451142f1856b1bd86a606dfe9587d439bc036e319c827700dbd555e" dependencies = [ - "block2", - "core-foundation", + "core-foundation 0.10.0", "home", "jni", "log", "ndk-context", - "objc2", - "objc2-foundation", + "objc2 0.6.0", + "objc2-foundation 0.3.0", "url", "web-sys", ] @@ -3320,16 +3626,16 @@ dependencies = [ "raw-window-handle", "rustc-hash 1.1.0", "smallvec", - "thiserror 2.0.9", + "thiserror 2.0.12", "wgpu-hal", "wgpu-types", ] [[package]] name = "wgpu-hal" -version = "24.0.2" +version = "24.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4317a17171dc20e6577bf606796794580accae0716a69edbc7388c86a3ec9f23" +checksum = "f112f464674ca69f3533248508ee30cb84c67cf06c25ff6800685f5e0294e259" dependencies = [ "android_system_properties", "arrayvec", @@ -3363,7 +3669,7 @@ dependencies = [ "renderdoc-sys", "rustc-hash 1.1.0", "smallvec", - "thiserror 2.0.9", + "thiserror 2.0.12", "wasm-bindgen", "web-sys", "wgpu-types", @@ -3385,9 +3691,9 @@ dependencies = [ [[package]] name = "wide" -version = "0.7.28" +version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b828f995bf1e9622031f8009f8481a85406ce1f4d4588ff746d872043e855690" +checksum = "41b5576b9a81633f3e8df296ce0063042a73507636cbe956c61133dd7034ab22" dependencies = [ "bytemuck", "safe_arch", @@ -3433,7 +3739,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.100", ] [[package]] @@ -3444,7 +3750,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.100", ] [[package]] @@ -3475,15 +3781,6 @@ dependencies = [ "windows-targets 0.42.2", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" @@ -3695,7 +3992,7 @@ dependencies = [ "calloop", "cfg_aliases", "concurrent-queue", - "core-foundation", + "core-foundation 0.9.4", "core-graphics", "cursor-icon", "dpi", @@ -3703,9 +4000,9 @@ dependencies = [ "libc", "memmap2", "ndk", - "objc2", - "objc2-app-kit", - "objc2-foundation", + "objc2 0.5.2", + "objc2-app-kit 0.2.2", + "objc2-foundation 0.2.2", "objc2-ui-kit", "orbclient", "percent-encoding", @@ -3734,13 +4031,34 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.18" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +checksum = "63d3fcd9bba44b03821e7d699eeee959f3126dcc4aa8e4ae18ec617c2a5cea10" dependencies = [ "memchr", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags 2.9.0", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "x11-dl" version = "2.21.0" @@ -3800,9 +4118,33 @@ checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] name = "xml-rs" -version = "0.8.22" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a62ce76d9b56901b19a74f19431b0d8b3bc7ca4ad685a746dfd78ca8f4fc6bda" + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af4e2e2f7cba5a093896c1e150fbfe177d1883e7448200efb81d40b9d339ef26" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", + "synstructure", +] [[package]] name = "zerocopy" @@ -3810,8 +4152,16 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ - "byteorder", - "zerocopy-derive", + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy" +version = "0.8.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" +dependencies = [ + "zerocopy-derive 0.8.24", ] [[package]] @@ -3822,7 +4172,61 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.100", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", + "synstructure", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] @@ -3842,9 +4246,9 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16099418600b4d8f028622f73ff6e3deaabdff330fb9a2a131dea781ee8b0768" +checksum = "99a5bab8d7dedf81405c4bb1f2b83ea057643d9cb28778cea9eecddeedd2e028" dependencies = [ "zune-core", ] diff --git a/crates/blue_engine_utilities/Cargo.toml b/crates/blue_engine_utilities/Cargo.toml index cda026e..8a21c88 100644 --- a/crates/blue_engine_utilities/Cargo.toml +++ b/crates/blue_engine_utilities/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "blue_engine_utilities" -version = "0.8.0" +version = "0.9.0" edition = "2024" authors = ["Elham Aryanpur "] description = "Utilities for Blue Engine" @@ -10,20 +10,23 @@ categories = ["game-development", "graphics", "rendering"] license = "Apache-2.0" [features] -default = ["debug"] +default = ["headless", "all"] +all = ["animation", "gltf", "obj", "physics", "egui"] animation = ["dep:keyframe_derive", "dep:keyframe"] gltf = ["dep:gltf"] obj = ["dep:obj-rs"] physics = ["dep:rapier3d"] egui = ["dep:egui", "dep:egui-winit", "dep:egui-wgpu"] -# pass blue engine's u32 feature -u32 = ["blue_engine/u32"] -# pass blue engine's debug feature -debug = ["blue_engine/debug"] +## pass blue engine's headless mode +headless = ["blue_engine/headless"] [dependencies] # blue_engine = { path = "../Blue Engine", default-features = false } -blue_engine = { version = "0.8.0" } +blue_engine = { version = "0.9.0", default-features = false, features = [ + "debug", + "static_link", + "headless", +] } eyre = "0.6.12" # Animation diff --git a/crates/blue_engine_utilities/src/definitions/animation.rs b/crates/blue_engine_utilities/src/definitions/animation.rs index 53536f1..68a4738 100644 --- a/crates/blue_engine_utilities/src/definitions/animation.rs +++ b/crates/blue_engine_utilities/src/definitions/animation.rs @@ -1,7 +1,7 @@ #![cfg(feature = "animation")] use crate::AnimationKeyframe; -use blue_engine::{ObjectStorage, PhysicalSize, RotateAxis}; +use blue_engine::{ObjectStorage, StringBuffer}; use keyframe::{AnimationSequence, AnimationSequenceError, Keyframe, functions::Linear}; #[derive(Clone)] @@ -9,16 +9,16 @@ pub struct Animation { pub keyframes: Vec<(f64, AnimationKeyframe)>, pub animation_sequence: AnimationSequence, pub time: std::time::Instant, - pub object: &'static str, + pub object: String, } impl Animation { - pub fn new(object: &'static str) -> Self { + pub fn new(object: impl StringBuffer) -> Self { Self { keyframes: Vec::new(), time: std::time::Instant::now(), animation_sequence: AnimationSequence::new(), - object, + object: object.as_string(), } } @@ -31,29 +31,24 @@ impl Animation { Ok(()) } - pub fn animate(&mut self, objects: &mut ObjectStorage, window_size: PhysicalSize) { + pub fn animate(&mut self, objects: &mut ObjectStorage) { let elapsed = self.time.elapsed().as_secs_f64(); - let obj = objects.get_mut(self.object).unwrap(); + let obj = objects.get_mut(&self.object).unwrap(); self.animation_sequence.advance_to(elapsed); let frame_data = self.animation_sequence.now(); if !self.animation_sequence.finished() { - obj.set_position( + obj.set_position([ frame_data.position.x, frame_data.position.y, frame_data.position.z, - ); - - obj.set_rotatation(frame_data.rotation.x - obj.rotation.x, RotateAxis::X); - obj.set_rotatation(frame_data.rotation.y - obj.rotation.y, RotateAxis::Y); - obj.set_rotatation(frame_data.rotation.z - obj.rotation.z, RotateAxis::Z); - - obj.resize( - frame_data.size.x, - frame_data.size.y, - frame_data.size.z, - window_size, - ); + ]); + + obj.set_rotation([frame_data.rotation.x - obj.rotation.x, 0f32, 0f32]); + obj.set_rotation([0f32, frame_data.rotation.y - obj.rotation.y, 0f32]); + obj.set_rotation([0f32, 0f32, frame_data.rotation.z - obj.rotation.z]); + + obj.resize([frame_data.size.x, frame_data.size.y, frame_data.size.z]); } } } diff --git a/crates/blue_engine_utilities/src/definitions/egui.rs b/crates/blue_engine_utilities/src/definitions/egui.rs index 6924785..ae9e06c 100644 --- a/crates/blue_engine_utilities/src/definitions/egui.rs +++ b/crates/blue_engine_utilities/src/definitions/egui.rs @@ -4,7 +4,6 @@ use blue_engine::{ CameraContainer, CommandEncoder, DEPTH_FORMAT, InputHelper, ObjectStorage, Renderer, TextureView, Window as Win, wgpu, }; - pub use egui; use egui::ViewportId; diff --git a/crates/blue_engine_utilities/src/definitions/model_load.rs b/crates/blue_engine_utilities/src/definitions/model_load.rs index 1140e0e..25ad2ab 100644 --- a/crates/blue_engine_utilities/src/definitions/model_load.rs +++ b/crates/blue_engine_utilities/src/definitions/model_load.rs @@ -1,6 +1,6 @@ #![cfg(feature = "gltf")] -use blue_engine::{ObjectSettings, ObjectStorage, Renderer, StringBuffer, Vertex}; +use blue_engine::{Object, ObjectSettings, ObjectStorage, Renderer, StringBuffer, Vertex}; pub fn load_gltf( name: Option, @@ -68,20 +68,25 @@ pub fn load_gltf( } } } + let name = if name.as_ref().is_some() { + let new_name = name.as_ref().unwrap(); + new_name.as_str() + } else if mesh.name().is_some() { + mesh.name().unwrap() + } else { + path.to_str().unwrap() + }; + //break; - objects.new_object( - if name.as_ref().is_some() { - let new_name = name.as_ref().unwrap(); - new_name.as_str() - } else if mesh.name().is_some() { - mesh.name().unwrap() - } else { - path.to_str().unwrap() - }, - verticies, - indicies, - ObjectSettings::default(), - renderer, + objects.insert( + name.into(), + Object::new( + name, + verticies, + indicies, + ObjectSettings::default(), + renderer, + )?, ); } @@ -99,33 +104,38 @@ pub fn load_obj( let buffer = BufReader::new(std::fs::File::open(path)?); let model_desc: obj::Obj = obj::load_obj(buffer)?; - objects.new_object( - if name.as_ref().is_some() { - let new_name = name.as_ref().unwrap(); - new_name.as_str() - } else { - path.to_str().unwrap() - }, - model_desc - .vertices - .iter() - .map(|vertex| { - let pos = vertex.position; - let norm = vertex.normal; - let uv = [vertex.texture[0], vertex.texture[1]]; - blue_engine::Vertex { - position: pos, - uv, - normal: norm, - } - }) - .collect(), - model_desc.indices, - blue_engine::ObjectSettings { - ..Default::default() - }, - renderer, - )?; + let name = if name.as_ref().is_some() { + let new_name = name.as_ref().unwrap(); + new_name.as_str() + } else { + path.to_str().unwrap() + }; + + objects.insert( + name.into(), + Object::new( + name, + model_desc + .vertices + .iter() + .map(|vertex| { + let pos = vertex.position; + let norm = vertex.normal; + let uv = [vertex.texture[0], vertex.texture[1]]; + blue_engine::Vertex { + position: pos, + uv, + normal: norm, + } + }) + .collect(), + model_desc.indices, + blue_engine::ObjectSettings { + ..Default::default() + }, + renderer, + )?, + ); Ok(()) } diff --git a/crates/blue_engine_utilities/src/definitions/physics.rs b/crates/blue_engine_utilities/src/definitions/physics.rs index 4ec9c0f..f6b77c9 100644 --- a/crates/blue_engine_utilities/src/definitions/physics.rs +++ b/crates/blue_engine_utilities/src/definitions/physics.rs @@ -6,7 +6,7 @@ #![cfg(feature = "physics")] -use blue_engine::{StringBuffer, glm}; +use blue_engine::StringBuffer; use rapier3d::prelude::*; use std::collections::HashMap; diff --git a/crates/blue_engine_utilities/src/definitions/raycast.rs b/crates/blue_engine_utilities/src/definitions/raycast.rs index 915d0a9..b83acbf 100644 --- a/crates/blue_engine_utilities/src/definitions/raycast.rs +++ b/crates/blue_engine_utilities/src/definitions/raycast.rs @@ -1,11 +1,11 @@ #![cfg(feature = "physics")] -use blue_engine::{Camera, imports::glm}; +use blue_engine::{Camera, Matrix4, Vector3}; pub struct Raycast { - current_ray: glm::Vec3, - projection_matrix: glm::Mat4, - view_matrix: glm::Mat4, + current_ray: Vector3, + projection_matrix: Matrix4, + view_matrix: Matrix4, mouse_x_y: (f32, f32), } impl Raycast { @@ -15,12 +15,12 @@ impl Raycast { Self { projection_matrix, view_matrix, - current_ray: glm::Vec3::new(0f32, 0f32, 0f32), + current_ray: Vector3::ZERO, mouse_x_y: (0.0, 0.0), } } - pub fn get_current_ray(&self) -> glm::Vec3 { + pub fn get_current_ray(&self) -> Vector3 { self.current_ray } @@ -36,25 +36,26 @@ impl Raycast { self.current_ray = self.calculate_mouse_ray(window_size); } - pub fn calculate_mouse_ray(&self, window_size: &blue_engine::PhysicalSize) -> glm::Vec3 { + pub fn calculate_mouse_ray(&self, window_size: &blue_engine::PhysicalSize) -> Vector3 { let normalized_coordinates = self.get_normalized_device_coordinates(window_size); - let clip_coordinates = glm::vec3(normalized_coordinates.x, normalized_coordinates.y, -1f32); + let clip_coordinates = + Vector3::new(normalized_coordinates.x, normalized_coordinates.y, -1f32); let eye_coordinates = self.to_eye_coordinates(clip_coordinates); self.to_world_coordinates(eye_coordinates) //let ray = self.projection_matrix * self.view_matrix * clip_coordinates; } - pub fn to_world_coordinates(&self, eye_coordinates: glm::Vec3) -> glm::Vec3 { + pub fn to_world_coordinates(&self, eye_coordinates: Vector3) -> Vector3 { let inverted_view = glm::inverse(&self.view_matrix); let ray_world = inverted_view.transform_vector(&eye_coordinates); - let mouse_ray = glm::Vec3::new(ray_world.x, ray_world.y, ray_world.z); + let mouse_ray = Vector3::new(ray_world.x, ray_world.y, ray_world.z); mouse_ray.normalize() } - pub fn to_eye_coordinates(&self, clip_coordinates: glm::Vec3) -> glm::Vec3 { + pub fn to_eye_coordinates(&self, clip_coordinates: Vector3) -> Vector3 { let inverted_projection = glm::inverse(&self.projection_matrix); let eye_coordinates = inverted_projection.transform_vector(&clip_coordinates); - glm::Vec3::new(eye_coordinates.x, eye_coordinates.y, -1f32) + Vector3::new(eye_coordinates.x, eye_coordinates.y, -1f32) } pub fn get_normalized_device_coordinates( @@ -69,31 +70,31 @@ impl Raycast { pub fn ray_intersects_bounding_box( &self, - bounding_box: (glm::Vec3, glm::Vec3), + bounding_box: (Vector3, Vector3), _max_length: f32, camera: &Camera, - ) -> Option { + ) -> Option { let (min_corner, max_corner) = bounding_box; // calculate the inverse of the ray direction - let inv_dir = glm::vec3( + let inv_dir = Vector3::new( 1f32 / self.current_ray.x, 1f32 / self.current_ray.y, 1f32 / self.current_ray.z, ); let camera_pos = - blue_engine::glm::vec3(camera.position.x, camera.position.y, camera.position.z); + blue_engine::Vector3::new(camera.position.x, camera.position.y, camera.position.z); let min_corner = min_corner - camera_pos; let max_corner = max_corner - camera_pos; // calculate the minimum and maximum intersection distances for each axis - let tmin = glm::vec3( + let tmin = Vector3::new( min_corner.x * self.current_ray.x, min_corner.y * self.current_ray.y, min_corner.z * self.current_ray.z, ); - let tmax = glm::vec3( + let tmax = Vector3::new( max_corner.x * inv_dir.x, max_corner.y * inv_dir.y, max_corner.z * inv_dir.z, diff --git a/examples/shapes/square.rs b/examples/shapes/square.rs index 2d9ed8e..bc2087f 100644 --- a/examples/shapes/square.rs +++ b/examples/shapes/square.rs @@ -7,14 +7,11 @@ */ use blue_engine::{ - Object, StringBuffer, + Object, prelude::{Engine, ObjectSettings, Vertex}, }; -pub fn square( - name: impl StringBuffer, - engine: &mut Engine, -) -> Result<(), blue_engine::error::Error> { +pub fn square(name: &str, engine: &mut Engine) -> Result<(), blue_engine::error::Error> { let vertices = vec![ Vertex { position: [1.0, 1.0, 0.0], @@ -39,7 +36,7 @@ pub fn square( ]; engine.objects.insert( - name.as_string(), + name.into(), Object::new( name, vertices, From aa6076fe2ef605a06868a1dc93a1002b582e0cdb Mon Sep 17 00:00:00 2001 From: Elham Aryanpur Date: Sun, 4 May 2025 15:38:32 +0300 Subject: [PATCH 02/12] chore: updated dependencies --- Cargo.lock | 257 ++++++++++-- Cargo.toml | 9 +- crates/blue_engine_core/Cargo.toml | 20 +- crates/blue_engine_core/src/error.rs | 2 +- crates/blue_engine_core/src/render.rs | 20 +- crates/blue_engine_dynamic/Cargo.toml | 4 +- crates/blue_engine_utilities/Cargo.lock | 499 +++++++++++++++++------- crates/blue_engine_utilities/Cargo.toml | 14 +- 8 files changed, 627 insertions(+), 198 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d29ff64..5064ae2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -299,15 +299,17 @@ dependencies = [ [[package]] name = "blue_engine" -version = "0.9.0" +version = "0.9.1" dependencies = [ - "blue_engine_core 0.9.0", + "blue_engine_core 0.9.1", "blue_engine_dynamic", ] [[package]] name = "blue_engine_core" version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84836a16d3b3cbd75661b5365361031160210e6b212ad6d3ec4f361e2c5ca15" dependencies = [ "android_logger", "bytemuck", @@ -319,15 +321,13 @@ dependencies = [ "log", "pollster", "thiserror 2.0.12", - "wgpu", + "wgpu 24.0.3", "winit", ] [[package]] name = "blue_engine_core" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a84836a16d3b3cbd75661b5365361031160210e6b212ad6d3ec4f361e2c5ca15" +version = "0.9.1" dependencies = [ "android_logger", "bytemuck", @@ -339,7 +339,7 @@ dependencies = [ "log", "pollster", "thiserror 2.0.12", - "wgpu", + "wgpu 25.0.0", "winit", ] @@ -349,7 +349,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ba8279e15a6297e46bae68f0c893eb2b3729a6f25f6b534f8a55e8246fc2568" dependencies = [ - "blue_engine_core 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "blue_engine_core 0.9.0", ] [[package]] @@ -471,6 +471,17 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "codespan-reporting" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" +dependencies = [ + "serde", + "termcolor", + "unicode-width", +] + [[package]] name = "color_quant" version = "1.1.0" @@ -912,6 +923,7 @@ checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" dependencies = [ "cfg-if", "crunchy", + "num-traits", ] [[package]] @@ -1137,6 +1149,12 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "libm" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9627da5196e5d8ed0b0495e61e518847578da83483c37288316d9b2e03a7f72" + [[package]] name = "libredox" version = "0.1.3" @@ -1260,7 +1278,7 @@ dependencies = [ "bit-set", "bitflags 2.9.0", "cfg_aliases", - "codespan-reporting", + "codespan-reporting 0.11.1", "hexf-parse", "indexmap", "log", @@ -1272,6 +1290,31 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "naga" +version = "25.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b977c445f26e49757f9aca3631c3b8b836942cb278d69a92e7b80d3b24da632" +dependencies = [ + "arrayvec", + "bit-set", + "bitflags 2.9.0", + "cfg_aliases", + "codespan-reporting 0.12.0", + "half", + "hashbrown", + "hexf-parse", + "indexmap", + "log", + "num-traits", + "once_cell", + "rustc-hash", + "spirv", + "strum", + "thiserror 2.0.12", + "unicode-ident", +] + [[package]] name = "nanorand" version = "0.7.0" @@ -1390,6 +1433,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -2577,9 +2621,9 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7208998eaa3870dad37ec8836979581506e0c5c64c20c9e79e9d2a10d6f47bf" +checksum = "fe770181423e5fc79d3e2a7f4410b7799d5aab1de4372853de3c6aa13ca24121" dependencies = [ "cc", "downcast-rs", @@ -2591,9 +2635,9 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.8" +version = "0.31.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2120de3d33638aaef5b9f4472bff75f07c56379cf76ea320bd3a3d65ecaf73f" +checksum = "978fa7c67b0847dbd6a9f350ca2569174974cd4082737054dbb7fbb79d7d9a61" dependencies = [ "bitflags 2.9.0", "rustix", @@ -2625,9 +2669,9 @@ dependencies = [ [[package]] name = "wayland-protocols" -version = "0.32.6" +version = "0.32.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0781cf46869b37e36928f7b432273c0995aa8aed9552c556fb18754420541efc" +checksum = "779075454e1e9a521794fed15886323ea0feda3f8b0fc1390f5398141310422a" dependencies = [ "bitflags 2.9.0", "wayland-backend", @@ -2637,9 +2681,9 @@ dependencies = [ [[package]] name = "wayland-protocols-plasma" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ccaacc76703fefd6763022ac565b590fcade92202492381c95b2edfdf7d46b3" +checksum = "4fd38cdad69b56ace413c6bcc1fbf5acc5e2ef4af9d5f8f1f9570c0c83eae175" dependencies = [ "bitflags 2.9.0", "wayland-backend", @@ -2722,8 +2766,36 @@ dependencies = [ "document-features", "js-sys", "log", - "naga", + "naga 24.0.0", + "parking_lot", + "profiling", + "raw-window-handle", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core 24.0.2", + "wgpu-hal 24.0.4", + "wgpu-types 24.0.0", +] + +[[package]] +name = "wgpu" +version = "25.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca6049eb2014a0e0d8689f9b787605dd71d5bbfdc74095ead499f3cff705c229" +dependencies = [ + "arrayvec", + "bitflags 2.9.0", + "cfg_aliases", + "document-features", + "hashbrown", + "js-sys", + "log", + "naga 25.0.1", "parking_lot", + "portable-atomic", "profiling", "raw-window-handle", "smallvec", @@ -2731,9 +2803,9 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "wgpu-core", - "wgpu-hal", - "wgpu-types", + "wgpu-core 25.0.1", + "wgpu-hal 25.0.1", + "wgpu-types 25.0.0", ] [[package]] @@ -2749,7 +2821,7 @@ dependencies = [ "document-features", "indexmap", "log", - "naga", + "naga 24.0.0", "once_cell", "parking_lot", "profiling", @@ -2757,8 +2829,76 @@ dependencies = [ "rustc-hash", "smallvec", "thiserror 2.0.12", - "wgpu-hal", - "wgpu-types", + "wgpu-hal 24.0.4", + "wgpu-types 24.0.0", +] + +[[package]] +name = "wgpu-core" +version = "25.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a19813e647da7aa3cdaa84f5846e2c64114970ea7c86b1e6aae8be08091f4bdc" +dependencies = [ + "arrayvec", + "bit-set", + "bit-vec", + "bitflags 2.9.0", + "cfg_aliases", + "document-features", + "hashbrown", + "indexmap", + "log", + "naga 25.0.1", + "once_cell", + "parking_lot", + "portable-atomic", + "profiling", + "raw-window-handle", + "rustc-hash", + "smallvec", + "thiserror 2.0.12", + "wgpu-core-deps-apple", + "wgpu-core-deps-emscripten", + "wgpu-core-deps-wasm", + "wgpu-core-deps-windows-linux-android", + "wgpu-hal 25.0.1", + "wgpu-types 25.0.0", +] + +[[package]] +name = "wgpu-core-deps-apple" +version = "25.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfd488b3239b6b7b185c3b045c39ca6bf8af34467a4c5de4e0b1a564135d093d" +dependencies = [ + "wgpu-hal 25.0.1", +] + +[[package]] +name = "wgpu-core-deps-emscripten" +version = "25.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f09ad7aceb3818e52539acc679f049d3475775586f3f4e311c30165cf2c00445" +dependencies = [ + "wgpu-hal 25.0.1", +] + +[[package]] +name = "wgpu-core-deps-wasm" +version = "25.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca8809ad123f6c7f2c5e01a2c7117c4fdfd02f70bd422ee2533f69dfa98756c" +dependencies = [ + "wgpu-hal 25.0.1", +] + +[[package]] +name = "wgpu-core-deps-windows-linux-android" +version = "25.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cba5fb5f7f9c98baa7c889d444f63ace25574833df56f5b817985f641af58e46" +dependencies = [ + "wgpu-hal 25.0.1", ] [[package]] @@ -2787,7 +2927,7 @@ dependencies = [ "libloading", "log", "metal", - "naga", + "naga 24.0.0", "ndk-sys 0.5.0+25.2.9519653", "objc", "once_cell", @@ -2802,7 +2942,54 @@ dependencies = [ "thiserror 2.0.12", "wasm-bindgen", "web-sys", - "wgpu-types", + "wgpu-types 24.0.0", + "windows", + "windows-core", +] + +[[package]] +name = "wgpu-hal" +version = "25.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb7c4a1dc42ff14c23c9b11ebf1ee85cde661a9b1cf0392f79c1faca5bc559fb" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set", + "bitflags 2.9.0", + "block", + "bytemuck", + "cfg-if", + "cfg_aliases", + "core-graphics-types", + "glow", + "glutin_wgl_sys", + "gpu-alloc", + "gpu-allocator", + "gpu-descriptor", + "hashbrown", + "js-sys", + "khronos-egl", + "libc", + "libloading", + "log", + "metal", + "naga 25.0.1", + "ndk-sys 0.5.0+25.2.9519653", + "objc", + "ordered-float", + "parking_lot", + "portable-atomic", + "profiling", + "range-alloc", + "raw-window-handle", + "renderdoc-sys", + "smallvec", + "thiserror 2.0.12", + "wasm-bindgen", + "web-sys", + "wgpu-types 25.0.0", "windows", "windows-core", ] @@ -2819,6 +3006,20 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wgpu-types" +version = "25.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2aa49460c2a8ee8edba3fca54325540d904dd85b2e086ada762767e17d06e8bc" +dependencies = [ + "bitflags 2.9.0", + "bytemuck", + "js-sys", + "log", + "thiserror 2.0.12", + "web-sys", +] + [[package]] name = "winapi-util" version = "0.1.9" @@ -3099,9 +3300,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winit" -version = "0.30.9" +version = "0.30.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a809eacf18c8eca8b6635091543f02a5a06ddf3dad846398795460e6e0ae3cc0" +checksum = "b0d05bd8908e14618c9609471db04007e644fd9cce6529756046cfc577f9155e" dependencies = [ "ahash", "android-activity", diff --git a/Cargo.toml b/Cargo.toml index ae2798e..67826ad 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "blue_engine" -version = "0.9.0" +version = "0.9.1" authors = ["Elham Aryanpur "] edition = "2024" description = "General-Purpose, Easy-to-use, Fast, and Portable graphics engine" @@ -21,10 +21,10 @@ static_link = ["dep:blue_engine_core"] ## Use the dynamic build of the engine dynamic_link = ["dep:blue_engine_dynamic"] ## Enables a window for rendering. This needs the `headless` feature to be disabled -window = ["blue_engine_core/window", "blue_engine_dynamic/window"] +window = ["blue_engine_core?/window", "blue_engine_dynamic?/window"] debug = ["blue_engine_core?/debug", "blue_engine_dynamic?/debug"] ## Enables rendering in headless mode, and without a window. Thus needs the `window` feature to be disabled -headless = ["blue_engine_core/headless", "blue_engine_dynamic/headless"] +headless = ["blue_engine_core?/headless", "blue_engine_dynamic?/headless"] ## For android builds. This needs the `headless` feature to be disabled android = ["blue_engine_core?/android", "blue_engine_dynamic?/android"] android_native_activity = [ @@ -44,11 +44,10 @@ glam_fast_math = [ ] [dependencies] -# blue_engine_core = { version = "0.9.0", optional = true } +# blue_engine_core = { version = "0.9.1", optional = true } blue_engine_core = { path = "crates/blue_engine_core", optional = true } # Wasm does not support dynamic linking. -[target.'cfg(not(target_family = "wasm"))'.dependencies] blue_engine_dynamic = { version = "0.9.0", optional = true } # blue_engine_dynamic = { path = "crates/blue_engine_dynamic", optional = true } diff --git a/crates/blue_engine_core/Cargo.toml b/crates/blue_engine_core/Cargo.toml index eb6c80b..50eb9ea 100644 --- a/crates/blue_engine_core/Cargo.toml +++ b/crates/blue_engine_core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "blue_engine_core" -version = "0.9.0" +version = "0.9.1" authors = ["Elham Aryanpur "] edition = "2024" description = "USE blue_engine THIS IS FOR INTERNAL USE" @@ -26,20 +26,20 @@ u32 = [] glam_fast_math = ["glam/fast-math"] [dependencies] -winit = { version = "0.30", features = ["rwh_06"], optional = true } -wgpu = { version = "24.0.3" } -image = { version = "0.25" } -pollster = "0.4" +winit = { version = "0.30.10", features = ["rwh_06"], optional = true } +wgpu = { version = "25.0.0" } +image = { version = "0.25.6" } +pollster = "0.4.0" bytemuck = { version = "1.22.0", features = ["derive"] } -downcast = "0.11" -thiserror = "2.0" -env_logger = { version = "0.11", optional = true } +downcast = "0.11.0" +thiserror = "2.0.12" +env_logger = { version = "0.11.8", optional = true } glam = { version = "0.30.1", features = ["bytemuck", "serde"] } flume = { version = "0.11.1", optional = true } # android -log = { version = "0.4", optional = true } +log = { version = "0.4.27", optional = true } android_logger = { version = "0.15.0", optional = true } [target.'cfg(target_arch = "wasm32")'.dependencies] -wgpu = { version = "24.0.3", features = ["webgl"] } +wgpu = { version = "25.0.0", features = ["webgl"] } diff --git a/crates/blue_engine_core/src/error.rs b/crates/blue_engine_core/src/error.rs index 37902a3..7d25309 100644 --- a/crates/blue_engine_core/src/error.rs +++ b/crates/blue_engine_core/src/error.rs @@ -13,7 +13,7 @@ pub enum Error { // ===== WGPU #[error("Failed to find an appropriate adapter")] - AdapterNotFound, + AdapterNotFound(#[from] wgpu::RequestAdapterError), #[error("Failed to find an appropriate device for rendering")] DeviceNotFound(#[from] wgpu::RequestDeviceError), diff --git a/crates/blue_engine_core/src/render.rs b/crates/blue_engine_core/src/render.rs index ee25aa8..14ab059 100644 --- a/crates/blue_engine_core/src/render.rs +++ b/crates/blue_engine_core/src/render.rs @@ -65,17 +65,15 @@ impl Renderer { }) .await { - Some(adapter) => { + Ok(adapter) => { let (device, queue) = adapter - .request_device( - &wgpu::DeviceDescriptor { - label: Some("Device"), - required_features: settings.features, - required_limits: settings.limits, - memory_hints: wgpu::MemoryHints::Performance, - }, - None, // Trace path - ) + .request_device(&wgpu::DeviceDescriptor { + label: Some("Device"), + required_features: settings.features, + required_limits: settings.limits, + memory_hints: wgpu::MemoryHints::Performance, + trace: wgpu::Trace::Off, + }) .await?; let texture_format = wgpu::TextureFormat::Bgra8UnormSrgb; @@ -172,7 +170,7 @@ impl Renderer { Ok(renderer) } - None => Err(crate::error::Error::AdapterNotFound), + Err(e) => Err(crate::error::Error::AdapterNotFound(e)), } } diff --git a/crates/blue_engine_dynamic/Cargo.toml b/crates/blue_engine_dynamic/Cargo.toml index 4b22456..1d39b62 100644 --- a/crates/blue_engine_dynamic/Cargo.toml +++ b/crates/blue_engine_dynamic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "blue_engine_dynamic" -version = "0.9.0" +version = "0.9.1" authors = ["Elham Aryanpur "] edition = "2024" description = "USE blue_engine THIS IS FOR INTERNAL USE" @@ -24,5 +24,5 @@ u32 = ["blue_engine_core/u32"] glam_fast_math = ["blue_engine_core/glam_fast_math"] [dependencies] -blue_engine_core = { version = "0.9.0" } +blue_engine_core = { version = "0.9.1" } # blue_engine_core = { path = "../blue_engine_core" } diff --git a/crates/blue_engine_utilities/Cargo.lock b/crates/blue_engine_utilities/Cargo.lock index 5e5a764..2e9efa0 100644 --- a/crates/blue_engine_utilities/Cargo.lock +++ b/crates/blue_engine_utilities/Cargo.lock @@ -31,7 +31,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom 0.2.15", + "getrandom 0.2.16", "once_cell", "version_check", "zerocopy 0.7.35", @@ -146,9 +146,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.97" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" [[package]] name = "approx" @@ -174,11 +174,11 @@ dependencies = [ "clipboard-win", "image", "log", - "objc2 0.6.0", - "objc2-app-kit 0.3.0", + "objc2 0.6.1", + "objc2-app-kit 0.3.1", "objc2-core-foundation", "objc2-core-graphics", - "objc2-foundation 0.3.0", + "objc2-foundation 0.3.1", "parking_lot", "percent-encoding", "windows-sys 0.59.0", @@ -193,7 +193,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -329,11 +329,9 @@ dependencies = [ [[package]] name = "blue_engine" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345c9594e244ae3dad262744464f193aa372d83312f59194a3fc9c9fde52c562" +version = "0.9.1" dependencies = [ - "blue_engine_core", + "blue_engine_core 0.9.1", "blue_engine_dynamic", ] @@ -351,7 +349,24 @@ dependencies = [ "image", "pollster", "thiserror 2.0.12", - "wgpu", + "wgpu 24.0.3", + "winit", +] + +[[package]] +name = "blue_engine_core" +version = "0.9.1" +dependencies = [ + "bytemuck", + "downcast", + "env_logger", + "flume", + "glam", + "image", + "pollster", + "thiserror 2.0.12", + "wgpu 25.0.0", + "winit", ] [[package]] @@ -360,12 +375,12 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ba8279e15a6297e46bae68f0c893eb2b3729a6f25f6b534f8a55e8246fc2568" dependencies = [ - "blue_engine_core", + "blue_engine_core 0.9.0", ] [[package]] name = "blue_engine_utilities" -version = "0.9.0" +version = "0.9.1" dependencies = [ "blue_engine", "egui", @@ -393,9 +408,9 @@ checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "bytemuck" -version = "1.22.0" +version = "1.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540" +checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c" dependencies = [ "bytemuck_derive", ] @@ -408,7 +423,7 @@ checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -457,9 +472,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.19" +version = "1.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e3a13707ac958681c13b39b458c073d0d9bc8a22cb1b2f4c8e55eb72c13f362" +checksum = "8691782945451c1c383942c4874dbe63814f61cb57ef773cda2972682b7bb3c0" dependencies = [ "jobserver", "libc", @@ -510,7 +525,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" dependencies = [ "termcolor", - "unicode-width", + "unicode-width 0.1.14", +] + +[[package]] +name = "codespan-reporting" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" +dependencies = [ + "serde", + "termcolor", + "unicode-width 0.2.0", ] [[package]] @@ -677,6 +703,16 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" +[[package]] +name = "dispatch2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +dependencies = [ + "bitflags 2.9.0", + "objc2 0.6.1", +] + [[package]] name = "displaydoc" version = "0.2.5" @@ -685,7 +721,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -720,9 +756,9 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dpi" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" [[package]] name = "ecolor" @@ -765,7 +801,7 @@ dependencies = [ "thiserror 1.0.69", "type-map", "web-time", - "wgpu", + "wgpu 24.0.3", ] [[package]] @@ -960,7 +996,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -1002,9 +1038,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "js-sys", @@ -1048,9 +1084,9 @@ dependencies = [ [[package]] name = "glam" -version = "0.30.2" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0e9b6647e9b41d3a5ef02964c6be01311a7f2472fea40595c635c6d046c259e" +checksum = "6b46b9ca4690308844c644e7c634d68792467260e051c8543e0c7871662b3ba7" dependencies = [ "bytemuck", "serde", @@ -1092,7 +1128,7 @@ dependencies = [ "inflections", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -1175,6 +1211,7 @@ checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" dependencies = [ "cfg-if", "crunchy", + "num-traits", ] [[package]] @@ -1188,9 +1225,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" dependencies = [ "allocator-api2", "equivalent", @@ -1349,7 +1386,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -1442,7 +1479,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -1468,9 +1505,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jiff" -version = "0.2.6" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f33145a5cbea837164362c7bd596106eb7c5198f97d1ba6f6ebb3223952e488" +checksum = "d07d8d955d798e7a4d6f9c58cd1f1916e790b42b092758a9ef6e16fef9f1b3fd" dependencies = [ "jiff-static", "log", @@ -1481,13 +1518,13 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.6" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43ce13c40ec6956157a3635d97a1ee2df323b263f09ea14165131289cb0f5c19" +checksum = "f244cfe006d98d26f859c7abd1318d85327e1882dc9cef80f62daeeb0adcf300" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -1589,9 +1626,9 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "libc" -version = "0.2.171" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "libfuzzer-sys" @@ -1615,9 +1652,9 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.11" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +checksum = "c9627da5196e5d8ed0b0495e61e518847578da83483c37288316d9b2e03a7f72" [[package]] name = "libredox" @@ -1627,7 +1664,7 @@ checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.9.0", "libc", - "redox_syscall 0.5.11", + "redox_syscall 0.5.12", ] [[package]] @@ -1764,7 +1801,7 @@ dependencies = [ "bit-set", "bitflags 2.9.0", "cfg_aliases", - "codespan-reporting", + "codespan-reporting 0.11.1", "hexf-parse", "indexmap", "log", @@ -1776,6 +1813,31 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "naga" +version = "25.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b977c445f26e49757f9aca3631c3b8b836942cb278d69a92e7b80d3b24da632" +dependencies = [ + "arrayvec", + "bit-set", + "bitflags 2.9.0", + "cfg_aliases", + "codespan-reporting 0.12.0", + "half", + "hashbrown", + "hexf-parse", + "indexmap", + "log", + "num-traits", + "once_cell", + "rustc-hash 1.1.0", + "spirv", + "strum", + "thiserror 2.0.12", + "unicode-ident", +] + [[package]] name = "nalgebra" version = "0.33.2" @@ -1800,7 +1862,7 @@ checksum = "254a5372af8fc138e36684761d3c0cdb758a4410e938babcff1c860ce14ddbfc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -1809,7 +1871,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", ] [[package]] @@ -1906,7 +1968,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -1957,7 +2019,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -1997,9 +2059,9 @@ dependencies = [ [[package]] name = "objc2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3531f65190d9cff863b77a99857e74c314dd16bf56c538c4b57c7cbc3f3a6e59" +checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551" dependencies = [ "objc2-encode", ] @@ -2022,14 +2084,14 @@ dependencies = [ [[package]] name = "objc2-app-kit" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5906f93257178e2f7ae069efb89fbd6ee94f0592740b5f8a1512ca498814d0fb" +checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" dependencies = [ "bitflags 2.9.0", - "objc2 0.6.0", + "objc2 0.6.1", "objc2-core-graphics", - "objc2-foundation 0.3.0", + "objc2-foundation 0.3.1", ] [[package]] @@ -2070,22 +2132,24 @@ dependencies = [ [[package]] name = "objc2-core-foundation" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daeaf60f25471d26948a1c2f840e3f7d86f4109e3af4e8e4b5cd70c39690d925" +checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" dependencies = [ "bitflags 2.9.0", - "objc2 0.6.0", + "dispatch2", + "objc2 0.6.1", ] [[package]] name = "objc2-core-graphics" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dca602628b65356b6513290a21a6405b4d4027b8b250f0b98dddbb28b7de02" +checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" dependencies = [ "bitflags 2.9.0", - "objc2 0.6.0", + "dispatch2", + "objc2 0.6.1", "objc2-core-foundation", "objc2-io-surface", ] @@ -2135,23 +2199,23 @@ dependencies = [ [[package]] name = "objc2-foundation" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a21c6c9014b82c39515db5b396f91645182611c97d24637cf56ac01e5f8d998" +checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" dependencies = [ "bitflags 2.9.0", - "objc2 0.6.0", + "objc2 0.6.1", "objc2-core-foundation", ] [[package]] name = "objc2-io-surface" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "161a8b87e32610086e1a7a9e9ec39f84459db7b3a0881c1f16ca5a2605581c19" +checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" dependencies = [ "bitflags 2.9.0", - "objc2 0.6.0", + "objc2 0.6.1", "objc2-core-foundation", ] @@ -2298,7 +2362,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.11", + "redox_syscall 0.5.12", "smallvec", "windows-targets 0.52.6", ] @@ -2358,7 +2422,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -2428,7 +2492,7 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.8.24", + "zerocopy 0.8.25", ] [[package]] @@ -2448,9 +2512,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] @@ -2471,7 +2535,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30" dependencies = [ "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -2491,9 +2555,9 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quick-xml" -version = "0.37.4" +version = "0.37.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4ce8c88de324ff838700f36fb6ab86c96df0e3c4ab6ef3a9b2044465cce1369" +checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" dependencies = [ "memchr", ] @@ -2540,7 +2604,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", ] [[package]] @@ -2611,9 +2675,9 @@ dependencies = [ [[package]] name = "ravif" -version = "0.11.11" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2413fd96bd0ea5cdeeb37eaf446a22e6ed7b981d792828721e74ded1980a45c6" +checksum = "d6a5f31fcf7500f9401fea858ea4ab5525c99f2322cfcee732c0e6c74208c0c6" dependencies = [ "avif-serialize", "imgref", @@ -2667,9 +2731,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.11" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" +checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" dependencies = [ "bitflags 2.9.0", ] @@ -2829,7 +2893,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -3023,7 +3087,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -3039,9 +3103,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.100" +version = "2.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" +checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" dependencies = [ "proc-macro2", "quote", @@ -3050,13 +3114,13 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -3113,7 +3177,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -3124,7 +3188,7 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -3175,9 +3239,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.20" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" +checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae" dependencies = [ "serde", "serde_spanned", @@ -3187,18 +3251,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.22.24" +version = "0.22.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" +checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" dependencies = [ "indexmap", "serde", @@ -3262,6 +3326,12 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" +[[package]] +name = "unicode-width" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" + [[package]] name = "unicode-xid" version = "0.2.6" @@ -3379,7 +3449,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", "wasm-bindgen-shared", ] @@ -3414,7 +3484,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3430,9 +3500,9 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7208998eaa3870dad37ec8836979581506e0c5c64c20c9e79e9d2a10d6f47bf" +checksum = "fe770181423e5fc79d3e2a7f4410b7799d5aab1de4372853de3c6aa13ca24121" dependencies = [ "cc", "downcast-rs", @@ -3444,9 +3514,9 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.8" +version = "0.31.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2120de3d33638aaef5b9f4472bff75f07c56379cf76ea320bd3a3d65ecaf73f" +checksum = "978fa7c67b0847dbd6a9f350ca2569174974cd4082737054dbb7fbb79d7d9a61" dependencies = [ "bitflags 2.9.0", "rustix", @@ -3467,9 +3537,9 @@ dependencies = [ [[package]] name = "wayland-cursor" -version = "0.31.8" +version = "0.31.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a93029cbb6650748881a00e4922b076092a6a08c11e7fbdb923f064b23968c5d" +checksum = "a65317158dec28d00416cb16705934070aef4f8393353d41126c54264ae0f182" dependencies = [ "rustix", "wayland-client", @@ -3478,9 +3548,9 @@ dependencies = [ [[package]] name = "wayland-protocols" -version = "0.32.6" +version = "0.32.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0781cf46869b37e36928f7b432273c0995aa8aed9552c556fb18754420541efc" +checksum = "779075454e1e9a521794fed15886323ea0feda3f8b0fc1390f5398141310422a" dependencies = [ "bitflags 2.9.0", "wayland-backend", @@ -3490,9 +3560,9 @@ dependencies = [ [[package]] name = "wayland-protocols-plasma" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ccaacc76703fefd6763022ac565b590fcade92202492381c95b2edfdf7d46b3" +checksum = "4fd38cdad69b56ace413c6bcc1fbf5acc5e2ef4af9d5f8f1f9570c0c83eae175" dependencies = [ "bitflags 2.9.0", "wayland-backend", @@ -3503,9 +3573,9 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248a02e6f595aad796561fa82d25601bd2c8c3b145b1c7453fc8f94c1a58f8b2" +checksum = "1cb6cdc73399c0e06504c437fe3cf886f25568dd5454473d565085b36d6a8bbf" dependencies = [ "bitflags 2.9.0", "wayland-backend", @@ -3568,8 +3638,8 @@ dependencies = [ "jni", "log", "ndk-context", - "objc2 0.6.0", - "objc2-foundation 0.3.0", + "objc2 0.6.1", + "objc2-foundation 0.3.1", "url", "web-sys", ] @@ -3592,8 +3662,36 @@ dependencies = [ "document-features", "js-sys", "log", - "naga", + "naga 24.0.0", + "parking_lot", + "profiling", + "raw-window-handle", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core 24.0.2", + "wgpu-hal 24.0.4", + "wgpu-types 24.0.0", +] + +[[package]] +name = "wgpu" +version = "25.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca6049eb2014a0e0d8689f9b787605dd71d5bbfdc74095ead499f3cff705c229" +dependencies = [ + "arrayvec", + "bitflags 2.9.0", + "cfg_aliases", + "document-features", + "hashbrown", + "js-sys", + "log", + "naga 25.0.1", "parking_lot", + "portable-atomic", "profiling", "raw-window-handle", "smallvec", @@ -3601,9 +3699,9 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "wgpu-core", - "wgpu-hal", - "wgpu-types", + "wgpu-core 25.0.1", + "wgpu-hal 25.0.1", + "wgpu-types 25.0.0", ] [[package]] @@ -3619,16 +3717,84 @@ dependencies = [ "document-features", "indexmap", "log", - "naga", + "naga 24.0.0", + "once_cell", + "parking_lot", + "profiling", + "raw-window-handle", + "rustc-hash 1.1.0", + "smallvec", + "thiserror 2.0.12", + "wgpu-hal 24.0.4", + "wgpu-types 24.0.0", +] + +[[package]] +name = "wgpu-core" +version = "25.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a19813e647da7aa3cdaa84f5846e2c64114970ea7c86b1e6aae8be08091f4bdc" +dependencies = [ + "arrayvec", + "bit-set", + "bit-vec 0.8.0", + "bitflags 2.9.0", + "cfg_aliases", + "document-features", + "hashbrown", + "indexmap", + "log", + "naga 25.0.1", "once_cell", "parking_lot", + "portable-atomic", "profiling", "raw-window-handle", "rustc-hash 1.1.0", "smallvec", "thiserror 2.0.12", - "wgpu-hal", - "wgpu-types", + "wgpu-core-deps-apple", + "wgpu-core-deps-emscripten", + "wgpu-core-deps-wasm", + "wgpu-core-deps-windows-linux-android", + "wgpu-hal 25.0.1", + "wgpu-types 25.0.0", +] + +[[package]] +name = "wgpu-core-deps-apple" +version = "25.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfd488b3239b6b7b185c3b045c39ca6bf8af34467a4c5de4e0b1a564135d093d" +dependencies = [ + "wgpu-hal 25.0.1", +] + +[[package]] +name = "wgpu-core-deps-emscripten" +version = "25.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f09ad7aceb3818e52539acc679f049d3475775586f3f4e311c30165cf2c00445" +dependencies = [ + "wgpu-hal 25.0.1", +] + +[[package]] +name = "wgpu-core-deps-wasm" +version = "25.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca8809ad123f6c7f2c5e01a2c7117c4fdfd02f70bd422ee2533f69dfa98756c" +dependencies = [ + "wgpu-hal 25.0.1", +] + +[[package]] +name = "wgpu-core-deps-windows-linux-android" +version = "25.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cba5fb5f7f9c98baa7c889d444f63ace25574833df56f5b817985f641af58e46" +dependencies = [ + "wgpu-hal 25.0.1", ] [[package]] @@ -3657,7 +3823,7 @@ dependencies = [ "libloading", "log", "metal", - "naga", + "naga 24.0.0", "ndk-sys 0.5.0+25.2.9519653", "objc", "once_cell", @@ -3672,7 +3838,54 @@ dependencies = [ "thiserror 2.0.12", "wasm-bindgen", "web-sys", - "wgpu-types", + "wgpu-types 24.0.0", + "windows", + "windows-core", +] + +[[package]] +name = "wgpu-hal" +version = "25.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb7c4a1dc42ff14c23c9b11ebf1ee85cde661a9b1cf0392f79c1faca5bc559fb" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set", + "bitflags 2.9.0", + "block", + "bytemuck", + "cfg-if", + "cfg_aliases", + "core-graphics-types", + "glow", + "glutin_wgl_sys", + "gpu-alloc", + "gpu-allocator", + "gpu-descriptor", + "hashbrown", + "js-sys", + "khronos-egl", + "libc", + "libloading", + "log", + "metal", + "naga 25.0.1", + "ndk-sys 0.5.0+25.2.9519653", + "objc", + "ordered-float", + "parking_lot", + "portable-atomic", + "profiling", + "range-alloc", + "raw-window-handle", + "renderdoc-sys", + "smallvec", + "thiserror 2.0.12", + "wasm-bindgen", + "web-sys", + "wgpu-types 25.0.0", "windows", "windows-core", ] @@ -3689,6 +3902,20 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wgpu-types" +version = "25.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2aa49460c2a8ee8edba3fca54325540d904dd85b2e086ada762767e17d06e8bc" +dependencies = [ + "bitflags 2.9.0", + "bytemuck", + "js-sys", + "log", + "thiserror 2.0.12", + "web-sys", +] + [[package]] name = "wide" version = "0.7.32" @@ -3739,7 +3966,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -3750,7 +3977,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -3979,9 +4206,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winit" -version = "0.30.9" +version = "0.30.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a809eacf18c8eca8b6635091543f02a5a06ddf3dad846398795460e6e0ae3cc0" +checksum = "b0d05bd8908e14618c9609471db04007e644fd9cce6529756046cfc577f9155e" dependencies = [ "ahash", "android-activity", @@ -4031,9 +4258,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.6" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63d3fcd9bba44b03821e7d699eeee959f3126dcc4aa8e4ae18ec617c2a5cea10" +checksum = "d9fb597c990f03753e08d3c29efbfcf2019a003b4bf4ba19225c158e1549f0f3" dependencies = [ "memchr", ] @@ -4142,7 +4369,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", "synstructure", ] @@ -4157,11 +4384,11 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.24" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" +checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" dependencies = [ - "zerocopy-derive 0.8.24", + "zerocopy-derive 0.8.25", ] [[package]] @@ -4172,18 +4399,18 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] name = "zerocopy-derive" -version = "0.8.24" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" +checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -4203,7 +4430,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", "synstructure", ] @@ -4226,7 +4453,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] diff --git a/crates/blue_engine_utilities/Cargo.toml b/crates/blue_engine_utilities/Cargo.toml index 8a21c88..69b3d20 100644 --- a/crates/blue_engine_utilities/Cargo.toml +++ b/crates/blue_engine_utilities/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "blue_engine_utilities" -version = "0.9.0" +version = "0.9.1" edition = "2024" authors = ["Elham Aryanpur "] description = "Utilities for Blue Engine" @@ -10,7 +10,7 @@ categories = ["game-development", "graphics", "rendering"] license = "Apache-2.0" [features] -default = ["headless", "all"] +default = ["all"] all = ["animation", "gltf", "obj", "physics", "egui"] animation = ["dep:keyframe_derive", "dep:keyframe"] gltf = ["dep:gltf"] @@ -21,12 +21,16 @@ egui = ["dep:egui", "dep:egui-winit", "dep:egui-wgpu"] headless = ["blue_engine/headless"] [dependencies] -# blue_engine = { path = "../Blue Engine", default-features = false } -blue_engine = { version = "0.9.0", default-features = false, features = [ +blue_engine = { path = "../../", default-features = false, features = [ "debug", + "window", "static_link", - "headless", ] } +# blue_engine = { version = "0.9.0", default-features = false, features = [ +# "debug", +# "static_link", +# "headless", +# ] } eyre = "0.6.12" # Animation From 59338e8427f3957fdc17d15b6d6647827e03aa4c Mon Sep 17 00:00:00 2001 From: Elham Aryanpur Date: Sun, 4 May 2025 15:41:35 +0300 Subject: [PATCH 03/12] chore: updated dependencies --- Cargo.lock | 18 ++++++++++++++++++ crates/blue_engine_core/Cargo.toml | 4 ++-- crates/blue_engine_utilities/Cargo.lock | 2 +- crates/blue_engine_utilities/Cargo.toml | 2 +- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5064ae2..6f1caee 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -343,6 +343,24 @@ dependencies = [ "winit", ] +[[package]] +name = "blue_engine_core" +version = "0.9.1" +dependencies = [ + "android_logger", + "bytemuck", + "downcast", + "env_logger", + "flume", + "glam", + "image", + "log", + "pollster", + "thiserror 2.0.12", + "wgpu", + "winit", +] + [[package]] name = "blue_engine_dynamic" version = "0.9.0" diff --git a/crates/blue_engine_core/Cargo.toml b/crates/blue_engine_core/Cargo.toml index 50eb9ea..cf9f1f0 100644 --- a/crates/blue_engine_core/Cargo.toml +++ b/crates/blue_engine_core/Cargo.toml @@ -27,7 +27,7 @@ glam_fast_math = ["glam/fast-math"] [dependencies] winit = { version = "0.30.10", features = ["rwh_06"], optional = true } -wgpu = { version = "25.0.0" } +wgpu = { version = "24.0.3" } image = { version = "0.25.6" } pollster = "0.4.0" bytemuck = { version = "1.22.0", features = ["derive"] } @@ -42,4 +42,4 @@ log = { version = "0.4.27", optional = true } android_logger = { version = "0.15.0", optional = true } [target.'cfg(target_arch = "wasm32")'.dependencies] -wgpu = { version = "25.0.0", features = ["webgl"] } +wgpu = { version = "24.0.3", features = ["webgl"] } diff --git a/crates/blue_engine_utilities/Cargo.lock b/crates/blue_engine_utilities/Cargo.lock index 2e9efa0..d26c120 100644 --- a/crates/blue_engine_utilities/Cargo.lock +++ b/crates/blue_engine_utilities/Cargo.lock @@ -365,7 +365,7 @@ dependencies = [ "image", "pollster", "thiserror 2.0.12", - "wgpu 25.0.0", + "wgpu", "winit", ] diff --git a/crates/blue_engine_utilities/Cargo.toml b/crates/blue_engine_utilities/Cargo.toml index 69b3d20..dded28b 100644 --- a/crates/blue_engine_utilities/Cargo.toml +++ b/crates/blue_engine_utilities/Cargo.toml @@ -10,7 +10,7 @@ categories = ["game-development", "graphics", "rendering"] license = "Apache-2.0" [features] -default = ["all"] +default = [] all = ["animation", "gltf", "obj", "physics", "egui"] animation = ["dep:keyframe_derive", "dep:keyframe"] gltf = ["dep:gltf"] From 73995d2c57cfc7cbac1f3e617b61db518ca2e5d1 Mon Sep 17 00:00:00 2001 From: Elham Aryanpur Date: Sun, 4 May 2025 15:45:52 +0300 Subject: [PATCH 04/12] chore: reverted wgpu update --- Cargo.lock | 347 +++++--------------------- crates/blue_engine_core/src/error.rs | 2 +- crates/blue_engine_core/src/render.rs | 20 +- 3 files changed, 76 insertions(+), 293 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6f1caee..e67cf2a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -31,7 +31,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom 0.2.15", + "getrandom 0.2.16", "once_cell", "version_check", "zerocopy 0.7.35", @@ -157,9 +157,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.97" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" [[package]] name = "arbitrary" @@ -321,25 +321,7 @@ dependencies = [ "log", "pollster", "thiserror 2.0.12", - "wgpu 24.0.3", - "winit", -] - -[[package]] -name = "blue_engine_core" -version = "0.9.1" -dependencies = [ - "android_logger", - "bytemuck", - "downcast", - "env_logger", - "flume", - "glam", - "image", - "log", - "pollster", - "thiserror 2.0.12", - "wgpu 25.0.0", + "wgpu", "winit", ] @@ -384,9 +366,9 @@ checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "bytemuck" -version = "1.22.0" +version = "1.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540" +checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c" dependencies = [ "bytemuck_derive", ] @@ -442,9 +424,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.19" +version = "1.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e3a13707ac958681c13b39b458c073d0d9bc8a22cb1b2f4c8e55eb72c13f362" +checksum = "8691782945451c1c383942c4874dbe63814f61cb57ef773cda2972682b7bb3c0" dependencies = [ "jobserver", "libc", @@ -489,17 +471,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "codespan-reporting" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" -dependencies = [ - "serde", - "termcolor", - "unicode-width", -] - [[package]] name = "color_quant" version = "1.1.0" @@ -655,9 +626,9 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dpi" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" [[package]] name = "either" @@ -807,9 +778,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "js-sys", @@ -853,9 +824,9 @@ dependencies = [ [[package]] name = "glam" -version = "0.30.1" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf3aa70d918d2b234126ff4f850f628f172542bf0603ded26b8ee36e5e22d5f9" +checksum = "6b46b9ca4690308844c644e7c634d68792467260e051c8543e0c7871662b3ba7" dependencies = [ "bytemuck", "serde", @@ -941,14 +912,13 @@ checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" dependencies = [ "cfg-if", "crunchy", - "num-traits", ] [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" dependencies = [ "foldhash", ] @@ -1048,9 +1018,9 @@ dependencies = [ [[package]] name = "jiff" -version = "0.2.6" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f33145a5cbea837164362c7bd596106eb7c5198f97d1ba6f6ebb3223952e488" +checksum = "d07d8d955d798e7a4d6f9c58cd1f1916e790b42b092758a9ef6e16fef9f1b3fd" dependencies = [ "jiff-static", "log", @@ -1061,9 +1031,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.6" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43ce13c40ec6956157a3635d97a1ee2df323b263f09ea14165131289cb0f5c19" +checksum = "f244cfe006d98d26f859c7abd1318d85327e1882dc9cef80f62daeeb0adcf300" dependencies = [ "proc-macro2", "quote", @@ -1143,9 +1113,9 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "libc" -version = "0.2.171" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "libfuzzer-sys" @@ -1167,12 +1137,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "libm" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9627da5196e5d8ed0b0495e61e518847578da83483c37288316d9b2e03a7f72" - [[package]] name = "libredox" version = "0.1.3" @@ -1181,7 +1145,7 @@ checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.9.0", "libc", - "redox_syscall 0.5.11", + "redox_syscall 0.5.12", ] [[package]] @@ -1296,7 +1260,7 @@ dependencies = [ "bit-set", "bitflags 2.9.0", "cfg_aliases", - "codespan-reporting 0.11.1", + "codespan-reporting", "hexf-parse", "indexmap", "log", @@ -1308,38 +1272,13 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "naga" -version = "25.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b977c445f26e49757f9aca3631c3b8b836942cb278d69a92e7b80d3b24da632" -dependencies = [ - "arrayvec", - "bit-set", - "bitflags 2.9.0", - "cfg_aliases", - "codespan-reporting 0.12.0", - "half", - "hashbrown", - "hexf-parse", - "indexmap", - "log", - "num-traits", - "once_cell", - "rustc-hash", - "spirv", - "strum", - "thiserror 2.0.12", - "unicode-ident", -] - [[package]] name = "nanorand" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", ] [[package]] @@ -1451,7 +1390,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", - "libm", ] [[package]] @@ -1738,7 +1676,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.11", + "redox_syscall 0.5.12", "smallvec", "windows-targets 0.52.6", ] @@ -1842,7 +1780,7 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.8.24", + "zerocopy 0.8.25", ] [[package]] @@ -1862,9 +1800,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] @@ -1905,9 +1843,9 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quick-xml" -version = "0.37.4" +version = "0.37.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4ce8c88de324ff838700f36fb6ab86c96df0e3c4ab6ef3a9b2044465cce1369" +checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" dependencies = [ "memchr", ] @@ -1954,7 +1892,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", ] [[package]] @@ -2000,9 +1938,9 @@ dependencies = [ [[package]] name = "ravif" -version = "0.11.11" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2413fd96bd0ea5cdeeb37eaf446a22e6ed7b981d792828721e74ded1980a45c6" +checksum = "d6a5f31fcf7500f9401fea858ea4ab5525c99f2322cfcee732c0e6c74208c0c6" dependencies = [ "avif-serialize", "imgref", @@ -2050,9 +1988,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.11" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" +checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" dependencies = [ "bitflags 2.9.0", ] @@ -2319,9 +2257,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.100" +version = "2.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" +checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" dependencies = [ "proc-macro2", "quote", @@ -2434,9 +2372,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.20" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" +checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae" dependencies = [ "serde", "serde_spanned", @@ -2446,18 +2384,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.22.24" +version = "0.22.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" +checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" dependencies = [ "indexmap", "serde", @@ -2676,9 +2614,9 @@ dependencies = [ [[package]] name = "wayland-cursor" -version = "0.31.8" +version = "0.31.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a93029cbb6650748881a00e4922b076092a6a08c11e7fbdb923f064b23968c5d" +checksum = "a65317158dec28d00416cb16705934070aef4f8393353d41126c54264ae0f182" dependencies = [ "rustix", "wayland-client", @@ -2712,9 +2650,9 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248a02e6f595aad796561fa82d25601bd2c8c3b145b1c7453fc8f94c1a58f8b2" +checksum = "1cb6cdc73399c0e06504c437fe3cf886f25568dd5454473d565085b36d6a8bbf" dependencies = [ "bitflags 2.9.0", "wayland-backend", @@ -2784,7 +2722,7 @@ dependencies = [ "document-features", "js-sys", "log", - "naga 24.0.0", + "naga", "parking_lot", "profiling", "raw-window-handle", @@ -2793,37 +2731,9 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "wgpu-core 24.0.2", - "wgpu-hal 24.0.4", - "wgpu-types 24.0.0", -] - -[[package]] -name = "wgpu" -version = "25.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6049eb2014a0e0d8689f9b787605dd71d5bbfdc74095ead499f3cff705c229" -dependencies = [ - "arrayvec", - "bitflags 2.9.0", - "cfg_aliases", - "document-features", - "hashbrown", - "js-sys", - "log", - "naga 25.0.1", - "parking_lot", - "portable-atomic", - "profiling", - "raw-window-handle", - "smallvec", - "static_assertions", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "wgpu-core 25.0.1", - "wgpu-hal 25.0.1", - "wgpu-types 25.0.0", + "wgpu-core", + "wgpu-hal", + "wgpu-types", ] [[package]] @@ -2839,7 +2749,7 @@ dependencies = [ "document-features", "indexmap", "log", - "naga 24.0.0", + "naga", "once_cell", "parking_lot", "profiling", @@ -2847,76 +2757,8 @@ dependencies = [ "rustc-hash", "smallvec", "thiserror 2.0.12", - "wgpu-hal 24.0.4", - "wgpu-types 24.0.0", -] - -[[package]] -name = "wgpu-core" -version = "25.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19813e647da7aa3cdaa84f5846e2c64114970ea7c86b1e6aae8be08091f4bdc" -dependencies = [ - "arrayvec", - "bit-set", - "bit-vec", - "bitflags 2.9.0", - "cfg_aliases", - "document-features", - "hashbrown", - "indexmap", - "log", - "naga 25.0.1", - "once_cell", - "parking_lot", - "portable-atomic", - "profiling", - "raw-window-handle", - "rustc-hash", - "smallvec", - "thiserror 2.0.12", - "wgpu-core-deps-apple", - "wgpu-core-deps-emscripten", - "wgpu-core-deps-wasm", - "wgpu-core-deps-windows-linux-android", - "wgpu-hal 25.0.1", - "wgpu-types 25.0.0", -] - -[[package]] -name = "wgpu-core-deps-apple" -version = "25.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfd488b3239b6b7b185c3b045c39ca6bf8af34467a4c5de4e0b1a564135d093d" -dependencies = [ - "wgpu-hal 25.0.1", -] - -[[package]] -name = "wgpu-core-deps-emscripten" -version = "25.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f09ad7aceb3818e52539acc679f049d3475775586f3f4e311c30165cf2c00445" -dependencies = [ - "wgpu-hal 25.0.1", -] - -[[package]] -name = "wgpu-core-deps-wasm" -version = "25.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca8809ad123f6c7f2c5e01a2c7117c4fdfd02f70bd422ee2533f69dfa98756c" -dependencies = [ - "wgpu-hal 25.0.1", -] - -[[package]] -name = "wgpu-core-deps-windows-linux-android" -version = "25.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cba5fb5f7f9c98baa7c889d444f63ace25574833df56f5b817985f641af58e46" -dependencies = [ - "wgpu-hal 25.0.1", + "wgpu-hal", + "wgpu-types", ] [[package]] @@ -2945,7 +2787,7 @@ dependencies = [ "libloading", "log", "metal", - "naga 24.0.0", + "naga", "ndk-sys 0.5.0+25.2.9519653", "objc", "once_cell", @@ -2960,54 +2802,7 @@ dependencies = [ "thiserror 2.0.12", "wasm-bindgen", "web-sys", - "wgpu-types 24.0.0", - "windows", - "windows-core", -] - -[[package]] -name = "wgpu-hal" -version = "25.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb7c4a1dc42ff14c23c9b11ebf1ee85cde661a9b1cf0392f79c1faca5bc559fb" -dependencies = [ - "android_system_properties", - "arrayvec", - "ash", - "bit-set", - "bitflags 2.9.0", - "block", - "bytemuck", - "cfg-if", - "cfg_aliases", - "core-graphics-types", - "glow", - "glutin_wgl_sys", - "gpu-alloc", - "gpu-allocator", - "gpu-descriptor", - "hashbrown", - "js-sys", - "khronos-egl", - "libc", - "libloading", - "log", - "metal", - "naga 25.0.1", - "ndk-sys 0.5.0+25.2.9519653", - "objc", - "ordered-float", - "parking_lot", - "portable-atomic", - "profiling", - "range-alloc", - "raw-window-handle", - "renderdoc-sys", - "smallvec", - "thiserror 2.0.12", - "wasm-bindgen", - "web-sys", - "wgpu-types 25.0.0", + "wgpu-types", "windows", "windows-core", ] @@ -3024,20 +2819,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wgpu-types" -version = "25.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aa49460c2a8ee8edba3fca54325540d904dd85b2e086ada762767e17d06e8bc" -dependencies = [ - "bitflags 2.9.0", - "bytemuck", - "js-sys", - "log", - "thiserror 2.0.12", - "web-sys", -] - [[package]] name = "winapi-util" version = "0.1.9" @@ -3370,9 +3151,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.6" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63d3fcd9bba44b03821e7d699eeee959f3126dcc4aa8e4ae18ec617c2a5cea10" +checksum = "d9fb597c990f03753e08d3c29efbfcf2019a003b4bf4ba19225c158e1549f0f3" dependencies = [ "memchr", ] @@ -3460,11 +3241,11 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.24" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" +checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" dependencies = [ - "zerocopy-derive 0.8.24", + "zerocopy-derive 0.8.25", ] [[package]] @@ -3480,9 +3261,9 @@ dependencies = [ [[package]] name = "zerocopy-derive" -version = "0.8.24" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" +checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" dependencies = [ "proc-macro2", "quote", diff --git a/crates/blue_engine_core/src/error.rs b/crates/blue_engine_core/src/error.rs index 7d25309..37902a3 100644 --- a/crates/blue_engine_core/src/error.rs +++ b/crates/blue_engine_core/src/error.rs @@ -13,7 +13,7 @@ pub enum Error { // ===== WGPU #[error("Failed to find an appropriate adapter")] - AdapterNotFound(#[from] wgpu::RequestAdapterError), + AdapterNotFound, #[error("Failed to find an appropriate device for rendering")] DeviceNotFound(#[from] wgpu::RequestDeviceError), diff --git a/crates/blue_engine_core/src/render.rs b/crates/blue_engine_core/src/render.rs index 14ab059..ad2a1b4 100644 --- a/crates/blue_engine_core/src/render.rs +++ b/crates/blue_engine_core/src/render.rs @@ -65,15 +65,17 @@ impl Renderer { }) .await { - Ok(adapter) => { + Some(adapter) => { let (device, queue) = adapter - .request_device(&wgpu::DeviceDescriptor { - label: Some("Device"), - required_features: settings.features, - required_limits: settings.limits, - memory_hints: wgpu::MemoryHints::Performance, - trace: wgpu::Trace::Off, - }) + .request_device( + &wgpu::DeviceDescriptor { + label: Some("Device"), + required_features: settings.features, + required_limits: settings.limits, + memory_hints: wgpu::MemoryHints::Performance, + }, + None, + ) .await?; let texture_format = wgpu::TextureFormat::Bgra8UnormSrgb; @@ -170,7 +172,7 @@ impl Renderer { Ok(renderer) } - Err(e) => Err(crate::error::Error::AdapterNotFound(e)), + None => Err(crate::error::Error::AdapterNotFound), } } From 547c402a9694312b68ebf9085f32f18a4fb68af4 Mon Sep 17 00:00:00 2001 From: Elham Aryanpur Date: Sun, 4 May 2025 17:14:31 +0300 Subject: [PATCH 05/12] chore: updated utilities to the latest version --- crates/blue_engine_utilities/Cargo.lock | 239 ++---------------- crates/blue_engine_utilities/Cargo.toml | 15 +- .../examples/animation.rs | 15 +- .../examples/basic_light.rs | 13 +- .../examples/flycamera.rs | 25 +- .../examples/hello_egui.rs | 13 +- .../blue_engine_utilities/examples/model.rs | 4 +- .../blue_engine_utilities/examples/physics.rs | 52 +--- .../blue_engine_utilities/examples/raycast.rs | 134 +++++----- .../blue_engine_utilities/src/definitions.rs | 3 +- .../src/definitions/animation.rs | 9 +- .../src/definitions/egui.rs | 62 ++--- .../src/definitions/flycamera.rs | 112 ++++---- .../src/definitions/model_load.rs | 26 +- .../src/definitions/physics.rs | 43 ++-- crates/blue_engine_utilities/src/header.rs | 19 +- 16 files changed, 289 insertions(+), 495 deletions(-) diff --git a/crates/blue_engine_utilities/Cargo.lock b/crates/blue_engine_utilities/Cargo.lock index d26c120..de1a1f6 100644 --- a/crates/blue_engine_utilities/Cargo.lock +++ b/crates/blue_engine_utilities/Cargo.lock @@ -349,7 +349,7 @@ dependencies = [ "image", "pollster", "thiserror 2.0.12", - "wgpu 24.0.3", + "wgpu", "winit", ] @@ -390,6 +390,7 @@ dependencies = [ "gltf", "keyframe", "keyframe_derive", + "nalgebra-glm", "obj-rs", "rapier3d", ] @@ -525,18 +526,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" dependencies = [ "termcolor", - "unicode-width 0.1.14", -] - -[[package]] -name = "codespan-reporting" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" -dependencies = [ - "serde", - "termcolor", - "unicode-width 0.2.0", + "unicode-width", ] [[package]] @@ -801,7 +791,7 @@ dependencies = [ "thiserror 1.0.69", "type-map", "web-time", - "wgpu 24.0.3", + "wgpu", ] [[package]] @@ -1211,7 +1201,6 @@ checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" dependencies = [ "cfg-if", "crunchy", - "num-traits", ] [[package]] @@ -1801,7 +1790,7 @@ dependencies = [ "bit-set", "bitflags 2.9.0", "cfg_aliases", - "codespan-reporting 0.11.1", + "codespan-reporting", "hexf-parse", "indexmap", "log", @@ -1813,31 +1802,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "naga" -version = "25.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b977c445f26e49757f9aca3631c3b8b836942cb278d69a92e7b80d3b24da632" -dependencies = [ - "arrayvec", - "bit-set", - "bitflags 2.9.0", - "cfg_aliases", - "codespan-reporting 0.12.0", - "half", - "hashbrown", - "hexf-parse", - "indexmap", - "log", - "num-traits", - "once_cell", - "rustc-hash 1.1.0", - "spirv", - "strum", - "thiserror 2.0.12", - "unicode-ident", -] - [[package]] name = "nalgebra" version = "0.33.2" @@ -1854,6 +1818,18 @@ dependencies = [ "typenum", ] +[[package]] +name = "nalgebra-glm" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e441f43bccdf40cb6bd4294321e6983c5bc7b9886112d19fd4c9813976b117e4" +dependencies = [ + "approx", + "nalgebra", + "num-traits", + "simba", +] + [[package]] name = "nalgebra-macros" version = "0.2.2" @@ -3326,12 +3302,6 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" -[[package]] -name = "unicode-width" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" - [[package]] name = "unicode-xid" version = "0.2.6" @@ -3662,36 +3632,8 @@ dependencies = [ "document-features", "js-sys", "log", - "naga 24.0.0", - "parking_lot", - "profiling", - "raw-window-handle", - "smallvec", - "static_assertions", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "wgpu-core 24.0.2", - "wgpu-hal 24.0.4", - "wgpu-types 24.0.0", -] - -[[package]] -name = "wgpu" -version = "25.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6049eb2014a0e0d8689f9b787605dd71d5bbfdc74095ead499f3cff705c229" -dependencies = [ - "arrayvec", - "bitflags 2.9.0", - "cfg_aliases", - "document-features", - "hashbrown", - "js-sys", - "log", - "naga 25.0.1", + "naga", "parking_lot", - "portable-atomic", "profiling", "raw-window-handle", "smallvec", @@ -3699,9 +3641,9 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "wgpu-core 25.0.1", - "wgpu-hal 25.0.1", - "wgpu-types 25.0.0", + "wgpu-core", + "wgpu-hal", + "wgpu-types", ] [[package]] @@ -3717,7 +3659,7 @@ dependencies = [ "document-features", "indexmap", "log", - "naga 24.0.0", + "naga", "once_cell", "parking_lot", "profiling", @@ -3725,76 +3667,8 @@ dependencies = [ "rustc-hash 1.1.0", "smallvec", "thiserror 2.0.12", - "wgpu-hal 24.0.4", - "wgpu-types 24.0.0", -] - -[[package]] -name = "wgpu-core" -version = "25.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19813e647da7aa3cdaa84f5846e2c64114970ea7c86b1e6aae8be08091f4bdc" -dependencies = [ - "arrayvec", - "bit-set", - "bit-vec 0.8.0", - "bitflags 2.9.0", - "cfg_aliases", - "document-features", - "hashbrown", - "indexmap", - "log", - "naga 25.0.1", - "once_cell", - "parking_lot", - "portable-atomic", - "profiling", - "raw-window-handle", - "rustc-hash 1.1.0", - "smallvec", - "thiserror 2.0.12", - "wgpu-core-deps-apple", - "wgpu-core-deps-emscripten", - "wgpu-core-deps-wasm", - "wgpu-core-deps-windows-linux-android", - "wgpu-hal 25.0.1", - "wgpu-types 25.0.0", -] - -[[package]] -name = "wgpu-core-deps-apple" -version = "25.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfd488b3239b6b7b185c3b045c39ca6bf8af34467a4c5de4e0b1a564135d093d" -dependencies = [ - "wgpu-hal 25.0.1", -] - -[[package]] -name = "wgpu-core-deps-emscripten" -version = "25.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f09ad7aceb3818e52539acc679f049d3475775586f3f4e311c30165cf2c00445" -dependencies = [ - "wgpu-hal 25.0.1", -] - -[[package]] -name = "wgpu-core-deps-wasm" -version = "25.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca8809ad123f6c7f2c5e01a2c7117c4fdfd02f70bd422ee2533f69dfa98756c" -dependencies = [ - "wgpu-hal 25.0.1", -] - -[[package]] -name = "wgpu-core-deps-windows-linux-android" -version = "25.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cba5fb5f7f9c98baa7c889d444f63ace25574833df56f5b817985f641af58e46" -dependencies = [ - "wgpu-hal 25.0.1", + "wgpu-hal", + "wgpu-types", ] [[package]] @@ -3823,7 +3697,7 @@ dependencies = [ "libloading", "log", "metal", - "naga 24.0.0", + "naga", "ndk-sys 0.5.0+25.2.9519653", "objc", "once_cell", @@ -3838,54 +3712,7 @@ dependencies = [ "thiserror 2.0.12", "wasm-bindgen", "web-sys", - "wgpu-types 24.0.0", - "windows", - "windows-core", -] - -[[package]] -name = "wgpu-hal" -version = "25.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb7c4a1dc42ff14c23c9b11ebf1ee85cde661a9b1cf0392f79c1faca5bc559fb" -dependencies = [ - "android_system_properties", - "arrayvec", - "ash", - "bit-set", - "bitflags 2.9.0", - "block", - "bytemuck", - "cfg-if", - "cfg_aliases", - "core-graphics-types", - "glow", - "glutin_wgl_sys", - "gpu-alloc", - "gpu-allocator", - "gpu-descriptor", - "hashbrown", - "js-sys", - "khronos-egl", - "libc", - "libloading", - "log", - "metal", - "naga 25.0.1", - "ndk-sys 0.5.0+25.2.9519653", - "objc", - "ordered-float", - "parking_lot", - "portable-atomic", - "profiling", - "range-alloc", - "raw-window-handle", - "renderdoc-sys", - "smallvec", - "thiserror 2.0.12", - "wasm-bindgen", - "web-sys", - "wgpu-types 25.0.0", + "wgpu-types", "windows", "windows-core", ] @@ -3902,20 +3729,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wgpu-types" -version = "25.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aa49460c2a8ee8edba3fca54325540d904dd85b2e086ada762767e17d06e8bc" -dependencies = [ - "bitflags 2.9.0", - "bytemuck", - "js-sys", - "log", - "thiserror 2.0.12", - "web-sys", -] - [[package]] name = "wide" version = "0.7.32" diff --git a/crates/blue_engine_utilities/Cargo.toml b/crates/blue_engine_utilities/Cargo.toml index dded28b..a3176a6 100644 --- a/crates/blue_engine_utilities/Cargo.toml +++ b/crates/blue_engine_utilities/Cargo.toml @@ -10,7 +10,7 @@ categories = ["game-development", "graphics", "rendering"] license = "Apache-2.0" [features] -default = [] +default = ["all"] all = ["animation", "gltf", "obj", "physics", "egui"] animation = ["dep:keyframe_derive", "dep:keyframe"] gltf = ["dep:gltf"] @@ -26,11 +26,7 @@ blue_engine = { path = "../../", default-features = false, features = [ "window", "static_link", ] } -# blue_engine = { version = "0.9.0", default-features = false, features = [ -# "debug", -# "static_link", -# "headless", -# ] } +# blue_engine = { version = "0.9.1" } eyre = "0.6.12" # Animation @@ -43,6 +39,7 @@ obj-rs = { version = "0.7.4", optional = true } # physics rapier3d = { version = "0.23.1", features = ["simd-stable"], optional = true } +nalgebra-glm = { version = "0.19.0" } # egui egui = { version = "0.31.1", optional = true } @@ -70,9 +67,9 @@ name = "model" path = "examples/model.rs" # Raycast examples -[[example]] -name = "raycast" -path = "examples/raycast.rs" +# [[example]] +# name = "raycast" +# path = "examples/raycast.rs" # Physics examples [[example]] diff --git a/crates/blue_engine_utilities/examples/animation.rs b/crates/blue_engine_utilities/examples/animation.rs index b30e79b..b49d9cf 100644 --- a/crates/blue_engine_utilities/examples/animation.rs +++ b/crates/blue_engine_utilities/examples/animation.rs @@ -1,9 +1,9 @@ #[cfg(feature = "animation")] -use blue_engine::{Engine, WindowDescriptor, primitive_shapes::cube, ObjectSettings}; +use blue_engine::{Engine, EngineSettings, ObjectSettings, primitive_shapes::cube}; #[cfg(feature = "animation")] use blue_engine_utilities::{AnimationKeyframe, animation::Animation}; -fn main() -> eyre::Result<()> { +fn main() -> Result<(), blue_engine::error::Error> { #[cfg(feature = "animation")] { let mut engine = Engine::new_config(EngineSettings { @@ -14,7 +14,12 @@ fn main() -> eyre::Result<()> { })?; // make a cube - cube("cube", ObjectSettings::default(), &mut engine.renderer, &mut engine.objects)?; + cube( + "cube", + ObjectSettings::default(), + &mut engine.renderer, + &mut engine.objects, + )?; // initialize an animation sequence let mut animation = Animation::new("cube"); @@ -57,9 +62,9 @@ fn main() -> eyre::Result<()> { // compile the animation sequence and start it. animation.start().expect("Couldn't compile the animation"); - engine.update_loop(move |_, window, objects, _, _, _| { + engine.update_loop(move |engine| { // animate the object - animation.animate(objects, window.as_ref().unwrap().inner_size()); + animation.animate(&mut engine.objects); })?; } diff --git a/crates/blue_engine_utilities/examples/basic_light.rs b/crates/blue_engine_utilities/examples/basic_light.rs index 3f1f205..970da15 100644 --- a/crates/blue_engine_utilities/examples/basic_light.rs +++ b/crates/blue_engine_utilities/examples/basic_light.rs @@ -1,9 +1,10 @@ +use blue_engine::ObjectSettings; #[cfg(feature = "gltf")] use blue_engine::{Engine, EngineSettings, primitive_shapes::uv_sphere}; #[cfg(feature = "gltf")] use blue_engine_utilities::{LightManager, model_load::load_gltf}; -fn main() -> eyre::Result<()> { +fn main() -> Result<(), blue_engine::error::Error> { #[cfg(feature = "gltf")] { let mut engine = Engine::new_config(EngineSettings { @@ -16,10 +17,11 @@ fn main() -> eyre::Result<()> { // make a light sphere uv_sphere( "light sphere", + ObjectSettings::default(), (18, 36, 1f32), &mut engine.renderer, &mut engine.objects, - ); + )?; engine .objects .get_mut("light sphere") @@ -46,16 +48,17 @@ fn main() -> eyre::Result<()> { let radius = 10f32; let start = std::time::SystemTime::now(); - engine.update_loop(move |renderer, _, objects, _, camera, _| { + engine.update_loop(move |engine| { light_manager - .update(objects, renderer, camera) + .update(&mut engine.objects, &mut engine.renderer, &engine.camera) .expect("couldn't update the light manager"); let camx = start.elapsed().unwrap().as_secs_f32().sin() * radius; let camy = start.elapsed().unwrap().as_secs_f32().sin() * radius; let camz = start.elapsed().unwrap().as_secs_f32().cos() * radius; - objects + engine + .objects .get_mut("light sphere") .unwrap() .set_position([camx, camy, camz]); diff --git a/crates/blue_engine_utilities/examples/flycamera.rs b/crates/blue_engine_utilities/examples/flycamera.rs index 0a5703f..84d1285 100644 --- a/crates/blue_engine_utilities/examples/flycamera.rs +++ b/crates/blue_engine_utilities/examples/flycamera.rs @@ -1,26 +1,27 @@ -use blue_engine::{Engine, WindowDescriptor, primitive_shapes::cube, ObjectSettings}; +use blue_engine::{Engine, EngineSettings, ObjectSettings, primitive_shapes::cube}; use blue_engine_utilities::FlyCamera; -fn main() -> eyre::Result<()> { +fn main() -> Result<(), blue_engine::error::Error> { let mut engine = Engine::new_config(EngineSettings { width: 1500, height: 1000, title: "Fly Camera", + present_mode: egui_wgpu::wgpu::PresentMode::Fifo, ..Default::default() })?; - let texture_data = include_bytes!("../resources/BlueLogoDiscord.png").to_vec(); - let texture = engine.renderer.build_texture( + cube( + "floor", + ObjectSettings::default(), + &mut engine.renderer, + &mut engine.objects, + )?; + engine.objects.get_mut("floor").unwrap().set_texture( "crate texture", - blue_engine::TextureData::Bytes(texture_data), + blue_engine::TextureData::Path("./resources/BlueLogoDiscord.png".to_string()), blue_engine::TextureMode::Clamp, + &mut engine.renderer, )?; - cube("floor", ObjectSettings::default(), &mut engine.renderer, &mut engine.objects); - engine - .objects - .get_mut("floor") - .unwrap() - .set_texture(texture); // camera let fly_camera = FlyCamera::new(&mut engine.camera); @@ -32,7 +33,7 @@ fn main() -> eyre::Result<()> { let mut tick: u64 = 0; let mut fps: i32 = 0; - engine.update_loop(move |_, _, _, _, _, _| { + engine.update_loop(move |_| { let now = timer.elapsed().unwrap().as_secs(); if tick < now { tick = now; diff --git a/crates/blue_engine_utilities/examples/hello_egui.rs b/crates/blue_engine_utilities/examples/hello_egui.rs index 38b88f4..fc47fe5 100644 --- a/crates/blue_engine_utilities/examples/hello_egui.rs +++ b/crates/blue_engine_utilities/examples/hello_egui.rs @@ -28,7 +28,8 @@ fn main() { ObjectSettings::default(), &mut engine.renderer, &mut engine.objects, - ); + ) + .unwrap(); // Start the egui context let gui_context = egui::EGUI::new(); @@ -40,9 +41,10 @@ fn main() { // Update loop engine - .update_loop(move |_, window, objects, _, _, signals| { + .update_loop(move |engine| { // obtain the plugin - let egui_plugin = signals + let egui_plugin = engine + .signals .get_signal::("egui") .expect("Plugin not found") .expect("Plugin type mismatch"); @@ -57,12 +59,13 @@ fn main() { }); }); - objects + engine + .objects .get_mut("triangle") .unwrap() .set_color(color[0], color[1], color[2], color[3]); }, - window, + &engine.window, ); }) .expect("Error during update loop"); diff --git a/crates/blue_engine_utilities/examples/model.rs b/crates/blue_engine_utilities/examples/model.rs index 5ea3e13..12e451b 100644 --- a/crates/blue_engine_utilities/examples/model.rs +++ b/crates/blue_engine_utilities/examples/model.rs @@ -3,7 +3,7 @@ use blue_engine::{Engine, EngineSettings}; #[cfg(feature = "gltf")] use blue_engine_utilities::{FlyCamera, model_load::load_gltf}; -fn main() -> eyre::Result<()> { +fn main() -> Result<(), blue_engine::error::Error> { #[cfg(feature = "gltf")] { let mut engine = Engine::new_config(EngineSettings { @@ -28,7 +28,7 @@ fn main() -> eyre::Result<()> { let fly_camera = FlyCamera::new(&mut engine.camera); engine.signals.add_signal("fly", Box::new(fly_camera)); - engine.update_loop(move |_renderer, _, _objects, _, _camera, _| { + engine.update_loop(move |_| { let _camx = start.elapsed().unwrap().as_secs_f32().sin() * radius; let _camy = start.elapsed().unwrap().as_secs_f32().sin() * radius; let _camz = start.elapsed().unwrap().as_secs_f32().cos() * radius; diff --git a/crates/blue_engine_utilities/examples/physics.rs b/crates/blue_engine_utilities/examples/physics.rs index b71b2cf..892b7dc 100644 --- a/crates/blue_engine_utilities/examples/physics.rs +++ b/crates/blue_engine_utilities/examples/physics.rs @@ -6,16 +6,15 @@ #[cfg(feature = "physics")] use blue_engine::{ - Engine, EngineSettings, + Engine, EngineSettings, ObjectSettings, primitive_shapes::{cube, uv_sphere}, - ObjectSettings, }; #[cfg(feature = "physics")] -use blue_engine_utilities::{FlyCamera, physics::Physics, raycast::Raycast}; +use blue_engine_utilities::{FlyCamera, physics::Physics}; #[cfg(feature = "physics")] use rapier3d::prelude::*; -fn main() -> eyre::Result<()> { +fn main() -> Result<(), blue_engine::error::Error> { #[cfg(feature = "physics")] { let mut engine = Engine::new_config(EngineSettings { @@ -28,7 +27,12 @@ fn main() -> eyre::Result<()> { let mut physics = Physics::new(); let fly_camera = FlyCamera::new(&mut engine.camera); - cube("floor", ObjectSettings::default(), &mut engine.renderer, &mut engine.objects); + cube( + "floor", + ObjectSettings::default(), + &mut engine.renderer, + &mut engine.objects, + )?; engine .objects .get_mut("floor") @@ -42,10 +46,11 @@ fn main() -> eyre::Result<()> { uv_sphere( "ball", + ObjectSettings::default(), (18, 46, 1f32), &mut engine.renderer, &mut engine.objects, - ); + )?; engine .objects .get_mut("ball") @@ -61,10 +66,11 @@ fn main() -> eyre::Result<()> { uv_sphere( "ball2", + ObjectSettings::default(), (18, 46, 1f32), &mut engine.renderer, &mut engine.objects, - ); + )?; engine .objects .get_mut("ball2") @@ -82,40 +88,10 @@ fn main() -> eyre::Result<()> { let ball_body_handle = physics.insert_rigid_body("ball2", rigid_body); physics.insert_collider_with_parent("ball2 collider", collider, ball_body_handle); - let mut raycast = Raycast::new(engine.camera.get("main").unwrap()); - engine.signals.add_signal("fly", Box::new(fly_camera)); engine.signals.add_signal("physics", Box::new(physics)); - engine.update_loop(move |_, window, _, input, camera, signals| { - let physics = signals.get_signal::("physics").unwrap().unwrap(); - raycast.update( - camera.get("main").unwrap(), - input, - &window.as_ref().unwrap().inner_size(), - ); - - let camera_pos = camera.get("main").unwrap().position; - let camera_pos = blue_engine::glm::vec3(camera_pos.x, camera_pos.y, camera_pos.z); - let ray = Ray::new(camera_pos.into(), raycast.get_current_ray()); - let max_toi = 4.0; - let solid = true; - let filter = QueryFilter::default(); - - if let Some((handle, toi)) = physics.query_pipeline.cast_ray( - &physics.rigid_body_set, - &physics.collider_set, - &ray, - max_toi, - solid, - filter, - ) { - // The first collider hit has the handle `handle` and it hit after - // the ray travelled a distance equal to `ray.dir * toi`. - let hit_point = ray.point_at(toi); // Same as: `ray.origin + ray.dir * toi` - println!("Collider {:?} hit at point {}", handle, hit_point); - } - })?; + engine.update_loop(move |_| {})?; } Ok(()) diff --git a/crates/blue_engine_utilities/examples/raycast.rs b/crates/blue_engine_utilities/examples/raycast.rs index a6dac9f..04d12bc 100644 --- a/crates/blue_engine_utilities/examples/raycast.rs +++ b/crates/blue_engine_utilities/examples/raycast.rs @@ -1,78 +1,80 @@ -#[cfg(feature = "physics")] -use blue_engine::{Engine, WindowDescriptor, imports::glm, primitive_shapes::cube, ObjectSettings}; -#[cfg(feature = "physics")] -use blue_engine_utilities::{FlyCamera, raycast::Raycast}; +// #[cfg(feature = "physics")] +// use blue_engine::{Engine, WindowDescriptor, imports::glm, primitive_shapes::cube, ObjectSettings}; +// #[cfg(feature = "physics")] +// use blue_engine_utilities::{FlyCamera, raycast::Raycast}; -fn main() -> eyre::Result<()> { - #[cfg(feature = "physics")] - { - let mut engine = Engine::new_config(EngineSettings { - width: 1000, - height: 1000, - title: "Raycast", - ..Default::default() - })?; +// fn main() -> eyre::Result<()> { +// #[cfg(feature = "physics")] +// { +// let mut engine = Engine::new_config(EngineSettings { +// width: 1000, +// height: 1000, +// title: "Raycast", +// ..Default::default() +// })?; - cube("cube1", ObjectSettings::default(), &mut engine.renderer, &mut engine.objects); - cube("cube2", ObjectSettings::default(), &mut engine.renderer, &mut engine.objects); - cube("cube3", ObjectSettings::default(), &mut engine.renderer, &mut engine.objects); +// cube("cube1", ObjectSettings::default(), &mut engine.renderer, &mut engine.objects); +// cube("cube2", ObjectSettings::default(), &mut engine.renderer, &mut engine.objects); +// cube("cube3", ObjectSettings::default(), &mut engine.renderer, &mut engine.objects); - engine - .objects - .get_mut("cube1") - .unwrap() - .set_position([10f32, 1f32, -10f32]); - engine - .objects - .get_mut("cube2") - .unwrap() - .set_position([-5f32, -5f32, -5f32]); - engine - .objects - .get_mut("cube3") - .unwrap() - .set_position([0f32, 5f32, -7f32]); +// engine +// .objects +// .get_mut("cube1") +// .unwrap() +// .set_position([10f32, 1f32, -10f32]); +// engine +// .objects +// .get_mut("cube2") +// .unwrap() +// .set_position([-5f32, -5f32, -5f32]); +// engine +// .objects +// .get_mut("cube3") +// .unwrap() +// .set_position([0f32, 5f32, -7f32]); - // camera - let _fly_camera = FlyCamera::new(&mut engine.camera); +// // camera +// let _fly_camera = FlyCamera::new(&mut engine.camera); - // Add fly camera to the engine as plugin - //engine.plugins.push(Box::new(fly_camera)); +// // Add fly camera to the engine as plugin +// //engine.plugins.push(Box::new(fly_camera)); - let mut raycast = Raycast::new(engine.camera.get("main").unwrap()); +// let mut raycast = Raycast::new(engine.camera.get("main").unwrap()); - engine.update_loop(move |_, window, objects, input, camera, _| { - raycast.update( - camera.get("main").unwrap(), - input, - &window.as_ref().unwrap().inner_size(), - ); +// engine.update_loop(move |_, window, objects, input, camera, _| { +// raycast.update( +// camera.get("main").unwrap(), +// input, +// &window.as_ref().unwrap().inner_size(), +// ); - let obj = objects.get_mut("cube1").unwrap(); +// let obj = objects.get_mut("cube1").unwrap(); - //if input.mouse_pressed(0) { - let _raycast_pos = raycast.get_current_ray(); - //cube("cube5", ObjectSettings::default(), renderer, objects); - //obj.position(raycast_pos.x, raycast_pos.y, raycast_pos.z); - //} - //println!("{:?}", raycast_pos); +// //if input.mouse_pressed(0) { +// let _raycast_pos = raycast.get_current_ray(); +// //cube("cube5", ObjectSettings::default(), renderer, objects); +// //obj.position(raycast_pos.x, raycast_pos.y, raycast_pos.z); +// //} +// //println!("{:?}", raycast_pos); - let transformation_matrix = - obj.position_matrix * obj.rotation_matrix * obj.scale_matrix; +// let transformation_matrix = +// obj.position_matrix * obj.rotation_matrix * obj.scale_matrix; - raycast.ray_intersects_bounding_box( - ( - (transformation_matrix - * glm::vec4(obj.position.x, obj.position.y, obj.position.z, 1f32)) - .xyz(), - (transformation_matrix * glm::vec4(obj.size.x, obj.size.y, obj.size.z, 1f32)) - .xyz(), - ), - 1f32, - camera.get("main").unwrap(), - ); - })?; - } +// raycast.ray_intersects_bounding_box( +// ( +// (transformation_matrix +// * glm::vec4(obj.position.x, obj.position.y, obj.position.z, 1f32)) +// .xyz(), +// (transformation_matrix * glm::vec4(obj.size.x, obj.size.y, obj.size.z, 1f32)) +// .xyz(), +// ), +// 1f32, +// camera.get("main").unwrap(), +// ); +// })?; +// } - Ok(()) -} +// Ok(()) +// } + +fn main() {} diff --git a/crates/blue_engine_utilities/src/definitions.rs b/crates/blue_engine_utilities/src/definitions.rs index d31b460..79274a8 100644 --- a/crates/blue_engine_utilities/src/definitions.rs +++ b/crates/blue_engine_utilities/src/definitions.rs @@ -1,10 +1,11 @@ pub mod animation; pub mod egui; pub mod flycamera; +pub use flycamera::*; pub mod light; pub mod model_load; pub mod physics; -pub mod raycast; +// pub mod raycast; //#[cfg(feature = "iced")] //pub mod iced; diff --git a/crates/blue_engine_utilities/src/definitions/animation.rs b/crates/blue_engine_utilities/src/definitions/animation.rs index 68a4738..979aebb 100644 --- a/crates/blue_engine_utilities/src/definitions/animation.rs +++ b/crates/blue_engine_utilities/src/definitions/animation.rs @@ -1,24 +1,25 @@ #![cfg(feature = "animation")] use crate::AnimationKeyframe; -use blue_engine::{ObjectStorage, StringBuffer}; +use blue_engine::ObjectStorage; use keyframe::{AnimationSequence, AnimationSequenceError, Keyframe, functions::Linear}; +use std::sync::Arc; #[derive(Clone)] pub struct Animation { pub keyframes: Vec<(f64, AnimationKeyframe)>, pub animation_sequence: AnimationSequence, pub time: std::time::Instant, - pub object: String, + pub object: Arc, } impl Animation { - pub fn new(object: impl StringBuffer) -> Self { + pub fn new(object: impl AsRef) -> Self { Self { keyframes: Vec::new(), time: std::time::Instant::now(), animation_sequence: AnimationSequence::new(), - object: object.as_string(), + object: object.as_ref().into(), } } diff --git a/crates/blue_engine_utilities/src/definitions/egui.rs b/crates/blue_engine_utilities/src/definitions/egui.rs index ae9e06c..adbe585 100644 --- a/crates/blue_engine_utilities/src/definitions/egui.rs +++ b/crates/blue_engine_utilities/src/definitions/egui.rs @@ -1,9 +1,6 @@ #![cfg(feature = "egui")] -use blue_engine::{ - CameraContainer, CommandEncoder, DEPTH_FORMAT, InputHelper, ObjectStorage, Renderer, - TextureView, Window as Win, wgpu, -}; +use blue_engine::{CommandEncoder, DEPTH_FORMAT, TextureView, Window as Win, wgpu}; pub use egui; use egui::ViewportId; @@ -53,14 +50,8 @@ impl Default for EGUI { } impl blue_engine::Signal for EGUI { - fn init( - &mut self, - renderer: &mut blue_engine::Renderer, - window: &blue_engine::Window, - _objects: &mut ObjectStorage, - _camera: &mut blue_engine::CameraContainer, - ) { - if let Some(window) = window.window.as_ref() { + fn init(&mut self, engine: &mut blue_engine::Engine) { + if let Some(window) = engine.window.window.as_ref() { let context = egui::Context::default(); let platform = egui_winit::State::new( @@ -74,7 +65,7 @@ impl blue_engine::Signal for EGUI { None, Some(egui_winit::winit::window::Theme::Dark), #[cfg(not(target_os = "android"))] - Some(renderer.device.limits().max_texture_dimension_2d as usize), + Some(engine.renderer.device.limits().max_texture_dimension_2d as usize), #[cfg(target_os = "android")] None, ); @@ -82,10 +73,15 @@ impl blue_engine::Signal for EGUI { let format = blue_engine::wgpu::TextureFormat::Rgba8UnormSrgb; #[cfg(not(target_os = "android"))] - let format = renderer.config.format; - - let renderer = - egui_wgpu::Renderer::new(&renderer.device, format, Some(DEPTH_FORMAT), 1, true); + let format = engine.renderer.config.format; + + let renderer = egui_wgpu::Renderer::new( + &engine.renderer.device, + format, + Some(DEPTH_FORMAT), + 1, + true, + ); self.platform = Some(platform); self.renderer = Some(renderer); @@ -94,14 +90,10 @@ impl blue_engine::Signal for EGUI { } fn window_events( &mut self, - _renderer: &mut blue_engine::Renderer, - window: &blue_engine::Window, - _objects: &mut ObjectStorage, + engine: &mut blue_engine::Engine, event: &blue_engine::WindowEvent, - _input: &blue_engine::InputHelper, - _camera: &mut blue_engine::CameraContainer, ) { - if let Some(window) = window.window.as_ref() { + if let Some(window) = engine.window.window.as_ref() { if let Some(platform) = self.platform.as_mut() { //? has a return, maybe useful in the future let _ = platform.on_window_event(window.as_ref(), event); @@ -111,16 +103,12 @@ impl blue_engine::Signal for EGUI { fn frame( &mut self, - be_renderer: &mut Renderer, - window: &Win, - _objects: &mut ObjectStorage, - _camera: &mut CameraContainer, - _input: &InputHelper, + engine: &mut blue_engine::Engine, encoder: &mut CommandEncoder, view: &TextureView, ) { - if let Some(window) = window.window.as_ref() { - if be_renderer.surface.is_some() && self.full_output.is_some() { + if let Some(window) = engine.window.as_ref() { + if engine.renderer.surface.is_some() && self.full_output.is_some() { let egui::FullOutput { platform_output, textures_delta, @@ -143,13 +131,13 @@ impl blue_engine::Signal for EGUI { let screen_descriptor = egui_wgpu::ScreenDescriptor { size_in_pixels: [ - be_renderer.config.width, + engine.renderer.config.width, #[cfg(target_os = "android")] { renderer.config.height - 20 }, #[cfg(not(target_os = "android"))] - be_renderer.config.height, + engine.renderer.config.height, ], pixels_per_point: *pixels_per_point, }; @@ -158,16 +146,16 @@ impl blue_engine::Signal for EGUI { if let Some(paint_jobs) = paint_jobs { for (id, image_delta) in &textures_delta.set { renderer.update_texture( - &be_renderer.device, - &be_renderer.queue, + &engine.renderer.device, + &engine.renderer.queue, *id, image_delta, ); } renderer.update_buffers( - &be_renderer.device, - &be_renderer.queue, + &engine.renderer.device, + &engine.renderer.queue, encoder, &paint_jobs, &screen_descriptor, @@ -188,7 +176,7 @@ impl blue_engine::Signal for EGUI { )], depth_stencil_attachment: Some( wgpu::RenderPassDepthStencilAttachment { - view: &be_renderer.depth_buffer.1, + view: &engine.renderer.depth_buffer.1, depth_ops: Some(wgpu::Operations { load: wgpu::LoadOp::Clear(1.0), store: wgpu::StoreOp::Store, diff --git a/crates/blue_engine_utilities/src/definitions/flycamera.rs b/crates/blue_engine_utilities/src/definitions/flycamera.rs index c2c4585..5642a56 100644 --- a/crates/blue_engine_utilities/src/definitions/flycamera.rs +++ b/crates/blue_engine_utilities/src/definitions/flycamera.rs @@ -1,5 +1,18 @@ -use crate::FlyCamera; -use blue_engine::{CameraContainer, InputHelper, ObjectStorage, Vector3, winit}; +use blue_engine::{CameraContainer, DeviceEvent, ElementState, Vector3, winit}; + +pub struct FlyCamera { + pub camera_right: Vector3, + pub yaw: f32, + pub pitch: f32, + pub last_x: f64, + pub last_y: f64, + + pub is_focus: bool, + pub camera_speed: f32, + pub camera_sensitivity: f32, + pub timer: std::time::Instant, + pub last_frame: f32, +} impl FlyCamera { pub fn new(camera: &mut CameraContainer) -> Self { @@ -15,8 +28,6 @@ impl FlyCamera { camera_sensitivity: 0.10f32, timer: std::time::Instant::now(), last_frame: 0f32, - - test_counter: 0, } } @@ -35,23 +46,13 @@ impl FlyCamera { camera.set_up(up[0], up[1], up[2]).unwrap(); */ Vector3::new(camera_right.x, camera_right.y, camera_right.z) } - - // purely for testing plugin system - pub fn test(&mut self) { - self.test_counter += 1; - println!("IT WORKS! {}", self.test_counter); - } } impl blue_engine::Signal for FlyCamera { fn device_events( &mut self, - _renderer: &mut blue_engine::Renderer, - window: &blue_engine::Window, - _objects: &mut ObjectStorage, + engine: &mut blue_engine::Engine, events: &winit::event::DeviceEvent, - input: &InputHelper, - camera: &mut CameraContainer, ) { // =========== MOVEMENT ============ // let current_frame = self.timer.elapsed().as_secs_f32(); @@ -60,13 +61,18 @@ impl blue_engine::Signal for FlyCamera { let mut camera_speed = self.camera_speed * delta; // ============ Window Focus ============= // - if input.mouse_pressed(blue_engine::MouseButton::Left) && !self.is_focus { - window + if engine + .simple_input + .mouse_pressed(blue_engine::MouseButton::Left) + && !self.is_focus + { + engine + .window .as_ref() .unwrap() .set_cursor_grab(winit::window::CursorGrabMode::Confined) .expect("Couldn't grab the cursor"); - window.as_ref().unwrap().set_cursor_visible(false); + engine.window.as_ref().unwrap().set_cursor_visible(false); self.is_focus = true; } @@ -89,60 +95,80 @@ impl blue_engine::Signal for FlyCamera { self.yaw.to_radians().sin() * self.pitch.to_radians().cos(), ); let direction = direction.normalize(); - camera.set_target([direction.x, direction.y, direction.z]); - self.camera_right = Self::update_vertices(camera); + engine + .camera + .set_target([direction.x, direction.y, direction.z]); + self.camera_right = Self::update_vertices(&mut engine.camera); + } + } + + match events { + blue_engine::DeviceEvent::Button { button, state } => { + println!("{button}"); + if *button == 0 && *state == ElementState::Pressed { + println!("PRESSED LEFT BUTTON"); + } + } + DeviceEvent::Key(key) => { + println!("{key:?}"); } + _ => {} } - if input.key_pressed(blue_engine::KeyCode::Escape) { - window + if engine + .simple_input + .mouse_pressed(blue_engine::MouseButton::Left) + { + engine + .window .as_ref() .unwrap() .set_cursor_grab(winit::window::CursorGrabMode::None) .expect("Couldn't release the cursor"); - window.as_ref().unwrap().set_cursor_visible(true); + engine.window.as_ref().unwrap().set_cursor_visible(true); self.is_focus = false; } // SHIFT - if input.held_shift() { - camera_speed *= 3f32; + if engine.simple_input.held_shift() { + camera_speed *= 0.003f32; } // W - if input.key_held(blue_engine::KeyCode::KeyW) { - let result = camera.get("main").unwrap().position - + (camera.get("main").unwrap().target * camera_speed); + if engine.simple_input.key_held(blue_engine::KeyCode::KeyW) { + println!("MOVE"); + let result = engine.camera.get("main").unwrap().position + + (engine.camera.get("main").unwrap().target * camera_speed); - camera.set_position([result.x, result.y, result.z]); - camera.set_target([result.x, result.y, result.z]); + engine.camera.set_position([result.x, result.y, result.z]); + engine.camera.set_target([result.x, result.y, result.z]); } // S - if input.key_held(blue_engine::KeyCode::KeyS) { - let result = camera.get("main").unwrap().position - - (camera.get("main").unwrap().target * camera_speed); + if engine.simple_input.key_held(blue_engine::KeyCode::KeyS) { + let result = engine.camera.get("main").unwrap().position + - (engine.camera.get("main").unwrap().target * camera_speed); - camera.set_position([result.x, result.y, result.z]); - camera.set_target([result.x, result.y, result.z]); + engine.camera.set_position([result.x, result.y, result.z]); + engine.camera.set_target([result.x, result.y, result.z]); } // A - if input.key_held(blue_engine::KeyCode::KeyA) { - let camera_pos = camera.get("main").unwrap().position; + if engine.simple_input.key_held(blue_engine::KeyCode::KeyA) { + let camera_pos = engine.camera.get("main").unwrap().position; let camera_pos = Vector3::new(camera_pos.x, camera_pos.y, camera_pos.z); let result = camera_pos - (self.camera_right * camera_speed); - camera.set_position([result.x, result.y, result.z]); - camera.set_target([result.x, result.y, result.z]); + engine.camera.set_position([result.x, result.y, result.z]); + engine.camera.set_target([result.x, result.y, result.z]); } // D - if input.key_held(blue_engine::KeyCode::KeyD) { - let camera_pos = camera.get("main").unwrap().position; + if engine.simple_input.key_held(blue_engine::KeyCode::KeyD) { + let camera_pos = engine.camera.get("main").unwrap().position; let camera_pos = Vector3::new(camera_pos.x, camera_pos.y, camera_pos.z); let result = camera_pos + (self.camera_right * camera_speed); - camera.set_position([result.x, result.y, result.z]); - camera.set_target([result.x, result.y, result.z]); + engine.camera.set_position([result.x, result.y, result.z]); + engine.camera.set_target([result.x, result.y, result.z]); } } } diff --git a/crates/blue_engine_utilities/src/definitions/model_load.rs b/crates/blue_engine_utilities/src/definitions/model_load.rs index 25ad2ab..35776fc 100644 --- a/crates/blue_engine_utilities/src/definitions/model_load.rs +++ b/crates/blue_engine_utilities/src/definitions/model_load.rs @@ -1,9 +1,9 @@ #![cfg(feature = "gltf")] -use blue_engine::{Object, ObjectSettings, ObjectStorage, Renderer, StringBuffer, Vertex}; +use blue_engine::{Object, ObjectSettings, ObjectStorage, Renderer, Vertex}; pub fn load_gltf( - name: Option, + name: Option>, path: &std::path::Path, renderer: &mut Renderer, objects: &mut ObjectStorage, @@ -46,9 +46,9 @@ pub fn load_gltf( for i in 0..positions.len() { verticies.push(Vertex { - position: positions[i].into(), - uv: [0f32, 0f32].into(), - normal: normals[i].into(), + position: positions[i], + uv: [0f32, 0f32], + normal: normals[i], }) } @@ -68,11 +68,10 @@ pub fn load_gltf( } } } - let name = if name.as_ref().is_some() { - let new_name = name.as_ref().unwrap(); - new_name.as_str() - } else if mesh.name().is_some() { - mesh.name().unwrap() + let name = if let Some(ref new_name) = name { + new_name.as_ref() + } else if let Some(new_name) = mesh.name() { + new_name } else { path.to_str().unwrap() }; @@ -95,7 +94,7 @@ pub fn load_gltf( #[cfg(feature = "obj")] pub fn load_obj( - name: Option, + name: Option>, path: &std::path::Path, renderer: &mut Renderer, objects: &mut ObjectStorage, @@ -104,9 +103,8 @@ pub fn load_obj( let buffer = BufReader::new(std::fs::File::open(path)?); let model_desc: obj::Obj = obj::load_obj(buffer)?; - let name = if name.as_ref().is_some() { - let new_name = name.as_ref().unwrap(); - new_name.as_str() + let name = if let Some(ref name) = name { + name.as_ref() } else { path.to_str().unwrap() }; diff --git a/crates/blue_engine_utilities/src/definitions/physics.rs b/crates/blue_engine_utilities/src/definitions/physics.rs index f6b77c9..b54a68f 100644 --- a/crates/blue_engine_utilities/src/definitions/physics.rs +++ b/crates/blue_engine_utilities/src/definitions/physics.rs @@ -6,7 +6,7 @@ #![cfg(feature = "physics")] -use blue_engine::StringBuffer; +use blue_engine::Vector3; use rapier3d::prelude::*; use std::collections::HashMap; @@ -16,7 +16,7 @@ pub struct Physics { pub rigid_body_set_map: HashMap, pub collider_set: ColliderSet, pub collider_set_map: HashMap, - pub gravity: glm::Vec3, + pub gravity: Vector3, pub integration_parameters: IntegrationParameters, pub physics_pipeline: PhysicsPipeline, pub island_manager: IslandManager, @@ -37,7 +37,7 @@ impl Physics { rigid_body_set_map: HashMap::new(), collider_set: ColliderSet::new(), collider_set_map: HashMap::new(), - gravity: vector![0.0, -9.81, 0.0], + gravity: Vector3::new(0.0, -9.81, 0.0), integration_parameters: IntegrationParameters::default(), physics_pipeline: PhysicsPipeline::new(), island_manager: IslandManager::new(), @@ -58,13 +58,10 @@ impl Physics { /// # Arguments /// * `name` - The name of the collider. /// * `collider` - The collider to insert - pub fn insert_collider( - &mut self, - name: impl StringBuffer, - collider: Collider, - ) -> ColliderHandle { + pub fn insert_collider(&mut self, name: impl AsRef, collider: Collider) -> ColliderHandle { let handle = self.collider_set.insert(collider.clone()); - self.collider_set_map.insert(name.as_string(), handle); + self.collider_set_map + .insert(name.as_ref().to_string(), handle); handle } @@ -77,7 +74,7 @@ impl Physics { /// * `parent` - The parent of the collider pub fn insert_collider_with_parent( &mut self, - name: impl StringBuffer, + name: impl AsRef, collider: Collider, parent: RigidBodyHandle, ) -> ColliderHandle { @@ -86,7 +83,8 @@ impl Physics { parent, &mut self.rigid_body_set, ); - self.collider_set_map.insert(name.as_string(), handle); + self.collider_set_map + .insert(name.as_ref().to_string(), handle); handle } @@ -98,11 +96,12 @@ impl Physics { /// * `rigid_body` - The rigid body to insert pub fn insert_rigid_body( &mut self, - name: impl StringBuffer, + name: impl AsRef, rigid_body: RigidBody, ) -> RigidBodyHandle { let handle = self.rigid_body_set.insert(rigid_body.clone()); - self.rigid_body_set_map.insert(name.as_string(), handle); + self.rigid_body_set_map + .insert(name.as_ref().to_string(), handle); handle } @@ -111,14 +110,14 @@ impl Physics { /// # Arguments /// * `name` - The name of the collider. /// * `collider` - The collider to remove. - pub fn remove_collider(&mut self, name: impl StringBuffer, collider: ColliderHandle) { + pub fn remove_collider(&mut self, name: impl AsRef, collider: ColliderHandle) { self.collider_set.remove( collider, &mut self.island_manager, &mut self.rigid_body_set, false, ); - self.collider_set_map.remove(&name.as_string()); + self.collider_set_map.remove(name.as_ref()); } /// Removes a rigid body from the physics world. @@ -126,7 +125,7 @@ impl Physics { /// # Arguments /// * `name` - The name of the rigid body. /// * `rigid_body` - The rigid body to remove. - pub fn remove_rigid_body(&mut self, name: impl StringBuffer, rigid_body: RigidBodyHandle) { + pub fn remove_rigid_body(&mut self, name: impl AsRef, rigid_body: RigidBodyHandle) { self.rigid_body_set.remove( rigid_body, &mut self.island_manager, @@ -135,7 +134,7 @@ impl Physics { &mut self.multibody_joint_set, false, ); - self.rigid_body_set_map.remove(&name.as_string()); + self.rigid_body_set_map.remove(name.as_ref()); } } @@ -148,16 +147,12 @@ impl Default for Physics { impl blue_engine::Signal for Physics { fn frame( &mut self, - _renderer: &mut blue_engine::Renderer, - _window: &blue_engine::Window, - objects: &mut blue_engine::ObjectStorage, - _camera: &mut blue_engine::CameraContainer, - _input: &blue_engine::InputHelper, + engine: &mut blue_engine::Engine, _encoder: &mut blue_engine::CommandEncoder, _view: &blue_engine::TextureView, ) { self.physics_pipeline.step( - &self.gravity, + &nalgebra_glm::vec3(self.gravity.x, self.gravity.y, self.gravity.z), &self.integration_parameters, &mut self.island_manager, &mut self.broad_phase, @@ -174,7 +169,7 @@ impl blue_engine::Signal for Physics { self.query_pipeline.update(&self.collider_set); for i in self.rigid_body_set_map.iter() { - let object = objects.get_mut(i.0); + let object = engine.objects.get_mut(i.0.as_str()); if object.is_some() { let position = self.rigid_body_set[*i.1].translation(); diff --git a/crates/blue_engine_utilities/src/header.rs b/crates/blue_engine_utilities/src/header.rs index 8ff641e..013679f 100644 --- a/crates/blue_engine_utilities/src/header.rs +++ b/crates/blue_engine_utilities/src/header.rs @@ -1,4 +1,5 @@ -use blue_engine::{Vector3, Vector4}; +use blue_engine::Vector4; + // ========== For keyframe animation =============== // #[cfg(feature = "animation")] use keyframe_derive::CanTween; @@ -62,22 +63,6 @@ impl Default for AnimationKeyframe { } } -pub struct FlyCamera { - pub camera_right: Vector3, - pub yaw: f32, - pub pitch: f32, - pub last_x: f64, - pub last_y: f64, - - pub is_focus: bool, - pub camera_speed: f32, - pub camera_sensitivity: f32, - pub timer: std::time::Instant, - pub last_frame: f32, - - pub test_counter: u32, -} - #[derive(Debug, Clone)] pub struct LightManager { pub ambient_color: Vector4, From 0d15919c8de94e113c866718b9b9d8cbf3ec821b Mon Sep 17 00:00:00 2001 From: Elham Aryanpur Date: Sun, 4 May 2025 22:20:11 +0300 Subject: [PATCH 06/12] feat: readded the embedded renderer and renamed `egui` plugin to `egui_plugin` for reduction of confusion --- crates/blue_engine_utilities/Cargo.toml | 4 + .../examples/egui_embedded_renderer.rs | 74 +++++ .../examples/hello_egui.rs | 8 +- .../blue_engine_utilities/src/definitions.rs | 2 +- .../definitions/{egui.rs => egui_plugin.rs} | 302 +++++++++--------- 5 files changed, 228 insertions(+), 162 deletions(-) create mode 100644 crates/blue_engine_utilities/examples/egui_embedded_renderer.rs rename crates/blue_engine_utilities/src/definitions/{egui.rs => egui_plugin.rs} (56%) diff --git a/crates/blue_engine_utilities/Cargo.toml b/crates/blue_engine_utilities/Cargo.toml index a3176a6..94e2e8c 100644 --- a/crates/blue_engine_utilities/Cargo.toml +++ b/crates/blue_engine_utilities/Cargo.toml @@ -80,3 +80,7 @@ path = "examples/physics.rs" [[example]] name = "hello_egui" path = "examples/hello_egui.rs" + +[[example]] +name = "egui_embedded_renderer" +path = "examples/egui_embedded_renderer.rs" diff --git a/crates/blue_engine_utilities/examples/egui_embedded_renderer.rs b/crates/blue_engine_utilities/examples/egui_embedded_renderer.rs new file mode 100644 index 0000000..2a0cc5b --- /dev/null +++ b/crates/blue_engine_utilities/examples/egui_embedded_renderer.rs @@ -0,0 +1,74 @@ +/* + * Blue Engine by Elham Aryanpur + * + * Basic GUI example + * + * Licensed under Apache-2.0 +*/ + +// Gui is a trait that you'll be using to add your UI +#[cfg(feature = "egui")] +use blue_engine_utilities::egui_plugin; +#[cfg(feature = "egui")] +use blue_engine_utilities::egui_plugin::egui as gui; + +// Basic imports +#[cfg(feature = "egui")] +use blue_engine::{Engine, ObjectSettings, primitive_shapes::triangle}; + +fn main() { + #[cfg(feature = "egui")] + { + // Initialize the engine with default settings + let mut engine = Engine::new().expect("win"); + + // Add a triangle to the screen + triangle( + "triangle", + ObjectSettings::default(), + &mut engine.renderer, + &mut engine.objects, + ) + .unwrap(); + + // Start the egui context + let gui_context = egui_plugin::EGUIPlugin::new(); + + // We add the gui as plugin, which runs once before everything else to fetch events, + // and once during render times for rendering and other stuff + engine.signals.add_signal("egui", Box::new(gui_context)); + + let mut color = [1f32, 1f32, 1f32, 1f32]; + + // Update loop + engine + .update_loop(move |engine| { + // obtain the plugin + let egui_plugin = engine + .signals + .get_signal::("egui") + .expect("Plugin not found") + .expect("Plugin type mismatch"); + + // ui function will provide the context + egui_plugin.ui( + |ctx| { + gui::Window::new("title").show(ctx, |ui| { + ui.horizontal(|ui| { + ui.label("Pick a color"); + ui.color_edit_button_rgba_unmultiplied(&mut color); + }); + }); + + engine + .objects + .get_mut("triangle") + .unwrap() + .set_color(color[0], color[1], color[2], color[3]); + }, + &engine.window, + ); + }) + .expect("Error during update loop"); + } +} diff --git a/crates/blue_engine_utilities/examples/hello_egui.rs b/crates/blue_engine_utilities/examples/hello_egui.rs index fc47fe5..18e8e30 100644 --- a/crates/blue_engine_utilities/examples/hello_egui.rs +++ b/crates/blue_engine_utilities/examples/hello_egui.rs @@ -8,9 +8,9 @@ // Gui is a trait that you'll be using to add your UI #[cfg(feature = "egui")] -use blue_engine_utilities::egui; +use blue_engine_utilities::egui_plugin; #[cfg(feature = "egui")] -use blue_engine_utilities::egui::egui as gui; +use blue_engine_utilities::egui_plugin::egui as gui; // Basic imports #[cfg(feature = "egui")] @@ -32,7 +32,7 @@ fn main() { .unwrap(); // Start the egui context - let gui_context = egui::EGUI::new(); + let gui_context = egui_plugin::EGUIPlugin::new(); // We add the gui as plugin, which runs once before everything else to fetch events, and once during render times for rendering and other stuff engine.signals.add_signal("egui", Box::new(gui_context)); @@ -45,7 +45,7 @@ fn main() { // obtain the plugin let egui_plugin = engine .signals - .get_signal::("egui") + .get_signal::("egui") .expect("Plugin not found") .expect("Plugin type mismatch"); diff --git a/crates/blue_engine_utilities/src/definitions.rs b/crates/blue_engine_utilities/src/definitions.rs index 79274a8..248efd4 100644 --- a/crates/blue_engine_utilities/src/definitions.rs +++ b/crates/blue_engine_utilities/src/definitions.rs @@ -1,5 +1,5 @@ pub mod animation; -pub mod egui; +pub mod egui_plugin; pub mod flycamera; pub use flycamera::*; pub mod light; diff --git a/crates/blue_engine_utilities/src/definitions/egui.rs b/crates/blue_engine_utilities/src/definitions/egui_plugin.rs similarity index 56% rename from crates/blue_engine_utilities/src/definitions/egui.rs rename to crates/blue_engine_utilities/src/definitions/egui_plugin.rs index adbe585..49676ee 100644 --- a/crates/blue_engine_utilities/src/definitions/egui.rs +++ b/crates/blue_engine_utilities/src/definitions/egui_plugin.rs @@ -1,11 +1,13 @@ #![cfg(feature = "egui")] -use blue_engine::{CommandEncoder, DEPTH_FORMAT, TextureView, Window as Win, wgpu}; +use blue_engine::{ + CommandEncoder, DEPTH_FORMAT, Matrix4, TextureView, Vector4, Window as Win, wgpu, +}; pub use egui; use egui::ViewportId; /// The egui plugin -pub struct EGUI { +pub struct EGUIPlugin { pub context: Option, pub platform: Option, pub renderer: Option, @@ -13,7 +15,7 @@ pub struct EGUI { pub raw_input: Option, } -impl EGUI { +impl EGUIPlugin { /// Creates the egui context and platform details pub fn new() -> Self { Self { @@ -43,13 +45,13 @@ impl EGUI { } } -impl Default for EGUI { +impl Default for EGUIPlugin { fn default() -> Self { Self::new() } } -impl blue_engine::Signal for EGUI { +impl blue_engine::Signal for EGUIPlugin { fn init(&mut self, engine: &mut blue_engine::Engine) { if let Some(window) = engine.window.window.as_ref() { let context = egui::Context::default(); @@ -199,155 +201,141 @@ impl blue_engine::Signal for EGUI { // =============================================================================================== -// struct Callback {} -// impl egui_wgpu::CallbackTrait for Callback { -// fn paint<'a>( -// &'a self, -// info: egui::PaintCallbackInfo, -// render_pass: &mut wgpu::RenderPass<'a>, -// callback_resources: &'a egui_wgpu::CallbackResources, -// ) { -// let resources: &TriangleRenderResources = callback_resources.get().unwrap(); -// resources.paint(info, render_pass, callback_resources); -// } -// } - -// struct TriangleRenderResources { -// pub shader: wgpu::RenderPipeline, -// pub vertex_buffer: blue_engine::VertexBuffers, -// pub texture: wgpu::BindGroup, -// pub uniform: blue_engine::UniformBuffers, -// pub default_data: ( -// blue_engine::Textures, -// blue_engine::Shaders, -// blue_engine::UniformBuffers, -// ), -// pub camera_data: wgpu::BindGroup, -// } - -// impl TriangleRenderResources { -// fn paint<'a>( -// &'a self, -// _info: egui::PaintCallbackInfo, -// render_pass: &mut wgpu::RenderPass<'a>, -// _callback_resources: &'a egui_wgpu::CallbackResources, -// ) { -// render_pass.set_bind_group(0, &self.default_data.0, &[]); -// render_pass.set_pipeline(&self.default_data.1); -// render_pass.set_bind_group(1, &self.camera_data, &[]); - -// // Draw our triangle! -// let i = self; -// println!("{:?}", i.vertex_buffer.length); -// render_pass.set_pipeline(&i.shader); -// render_pass.set_bind_group(0, &i.texture, &[]); - -// render_pass.set_bind_group(2, &i.uniform, &[]); - -// render_pass.set_vertex_buffer(0, i.vertex_buffer.vertex_buffer.slice(..)); -// render_pass.set_index_buffer( -// i.vertex_buffer.index_buffer.slice(..), -// wgpu::IndexFormat::Uint16, -// ); -// render_pass.draw_indexed(0..i.vertex_buffer.length, 0, 0..1); -// } -// } - -// pub struct EmbeddedRender {} -// impl EmbeddedRender { -// pub fn new( -// object: &mut blue_engine::Object, -// cc: &mut Renderer, -// renderer: &mut egui_wgpu::Renderer, -// ) -> Option { -// let buffers = object.update_and_return(cc); - -// let camera_data = cc.build_uniform_buffer(&[cc.build_uniform_buffer_part( -// "Camera Uniform", -// blue_engine::utils::default_resources::DEFAULT_MATRIX_4, -// )]); - -// let default_texture = cc -// .build_texture( -// "Default Texture", -// blue_engine::TextureData::Bytes( -// blue_engine::utils::default_resources::DEFAULT_TEXTURE.to_vec(), -// ), -// blue_engine::header::TextureMode::Clamp, -// //crate::header::TextureFormat::PNG -// ) -// .unwrap(); - -// let default_texture_2 = cc -// .build_texture( -// "Default Texture", -// blue_engine::TextureData::Bytes( -// blue_engine::utils::default_resources::DEFAULT_TEXTURE.to_vec(), -// ), -// blue_engine::header::TextureMode::Clamp, -// ) -// .unwrap(); - -// let default_uniform = cc.build_uniform_buffer(&vec![ -// cc.build_uniform_buffer_part( -// "Transformation Matrix", -// blue_engine::utils::default_resources::DEFAULT_MATRIX_4, -// ), -// cc.build_uniform_buffer_part( -// "Color", -// blue_engine::uniform_type::Array4 { -// data: blue_engine::utils::default_resources::DEFAULT_COLOR, -// }, -// ), -// ]); - -// let default_shader = cc.build_shader( -// "Default Shader", -// blue_engine::utils::default_resources::DEFAULT_SHADER.to_string(), -// Some(&default_uniform.1), -// blue_engine::ShaderSettings::default(), -// ); - -// renderer.callback_resources.insert(TriangleRenderResources { -// shader: buffers.2, -// texture: default_texture, -// vertex_buffer: buffers.0, -// uniform: buffers.1, -// default_data: (default_texture_2, default_shader, default_uniform.0), -// camera_data: camera_data.0, -// }); - -// Some(Self {}) -// } - -// pub fn prepare( -// &self, -// object: &mut blue_engine::Object, -// brenderer: &mut blue_engine::Renderer, -// erenderer: &mut egui_wgpu::Renderer, -// camera_data: blue_engine::UniformBuffers, -// ) { -// let object_pipeline = object.update_and_return(brenderer); - -// let resources: &mut TriangleRenderResources = -// erenderer.callback_resources.get_mut().unwrap(); - -// resources.vertex_buffer = object_pipeline.0; -// resources.uniform = object_pipeline.1; -// resources.shader = object_pipeline.2; -// resources.camera_data = camera_data; -// } - -// pub fn paint(&mut self, ui: &mut egui::Ui) { -// let space = ui.available_size(); - -// let (rect, _response) = ui.allocate_exact_size( -// egui::vec2(space.x - 5f32, space.y - 5f32), -// egui::Sense::drag(), -// ); - -// let callback = egui_wgpu::Callback::new_paint_callback(rect, Callback {}); - -// ui.painter().add(callback); -// } -// } +struct Callback; +impl egui_wgpu::CallbackTrait for Callback { + fn paint( + &self, + _info: egui::PaintCallbackInfo, + render_pass: &mut wgpu::RenderPass<'static>, + resources: &egui_wgpu::CallbackResources, + ) { + let resources: &TriangleRenderResources = resources.get().unwrap(); + resources.paint(render_pass); + } +} + +struct TriangleRenderResources { + pub shader: wgpu::RenderPipeline, + pub vertex_buffer: blue_engine::VertexBuffers, + pub texture: wgpu::BindGroup, + pub uniform: blue_engine::UniformBuffers, + pub default_data: ( + blue_engine::Textures, + blue_engine::Shaders, + blue_engine::UniformBuffers, + ), + pub camera_data: wgpu::BindGroup, +} + +impl TriangleRenderResources { + fn paint(&self, render_pass: &mut wgpu::RenderPass<'_>) { + render_pass.set_bind_group(0, &self.default_data.0, &[]); + render_pass.set_pipeline(&self.default_data.1); + render_pass.set_bind_group(1, &self.camera_data, &[]); + + // Draw our triangle! + let i = self; + println!("{:?}", i.vertex_buffer.length); + render_pass.set_pipeline(&i.shader); + render_pass.set_bind_group(0, &i.texture, &[]); + + render_pass.set_bind_group(2, &i.uniform, &[]); + + render_pass.set_vertex_buffer(0, i.vertex_buffer.vertex_buffer.slice(..)); + render_pass.set_index_buffer( + i.vertex_buffer.index_buffer.slice(..), + wgpu::IndexFormat::Uint16, + ); + render_pass.draw_indexed(0..i.vertex_buffer.length, 0, 0..1); + } +} + +pub struct EmbeddedRender; +impl EmbeddedRender { + pub fn new( + object: &mut blue_engine::Object, + cc: &mut blue_engine::Renderer, + renderer: &mut egui_wgpu::Renderer, + ) -> Option { + let buffers = object.update_and_return(cc); + + let camera_data = cc.build_uniform_buffer(&[ + cc.build_uniform_buffer_part("Camera Uniform", Matrix4::IDENTITY) + ]); + + let default_texture = cc + .build_texture( + "Default Texture", + blue_engine::TextureData::Bytes( + blue_engine::utils::default_resources::DEFAULT_TEXTURE.to_vec(), + ), + blue_engine::TextureMode::Clamp, + //crate::header::TextureFormat::PNG + ) + .unwrap(); + + let default_texture_2 = cc + .build_texture( + "Default Texture", + blue_engine::TextureData::Bytes( + blue_engine::utils::default_resources::DEFAULT_TEXTURE.to_vec(), + ), + blue_engine::TextureMode::Clamp, + ) + .unwrap(); + + let default_uniform = cc.build_uniform_buffer(&[ + cc.build_uniform_buffer_part("Transformation Matrix", Matrix4::IDENTITY), + cc.build_uniform_buffer_part("Color", Vector4::ONE), + ]); + + let default_shader = cc.build_shader( + "Default Shader", + blue_engine::utils::default_resources::DEFAULT_SHADER.to_string(), + Some(&default_uniform.1), + blue_engine::ShaderSettings::default(), + ); + + renderer.callback_resources.insert(TriangleRenderResources { + shader: buffers.2, + texture: default_texture, + vertex_buffer: buffers.0, + uniform: buffers.1, + default_data: (default_texture_2, default_shader, default_uniform.0), + camera_data: camera_data.0, + }); + + Some(Self {}) + } + + pub fn prepare( + &self, + object: &mut blue_engine::Object, + brenderer: &mut blue_engine::Renderer, + erenderer: &mut egui_wgpu::Renderer, + camera_data: blue_engine::UniformBuffers, + ) { + let object_pipeline = object.update_and_return(brenderer); + + let resources: &mut TriangleRenderResources = + erenderer.callback_resources.get_mut().unwrap(); + + resources.vertex_buffer = object_pipeline.0; + resources.uniform = object_pipeline.1; + resources.shader = object_pipeline.2; + resources.camera_data = camera_data; + } + + pub fn paint(&mut self, ui: &mut egui::Ui) { + let space = ui.available_size(); + + let (rect, _response) = ui.allocate_exact_size( + egui::vec2(space.x - 5f32, space.y - 5f32), + egui::Sense::drag(), + ); + + let callback = egui_wgpu::Callback::new_paint_callback(rect, Callback {}); + + ui.painter().add(callback); + } +} From 687d50ee12af4267025a89130e04706bc71b482e Mon Sep 17 00:00:00 2001 From: Elham Aryanpur Date: Sun, 4 May 2025 23:18:27 +0300 Subject: [PATCH 07/12] chore: some updates done to the embedded renderer --- crates/blue_engine_utilities/Cargo.toml | 4 - .../examples/egui_embedded_renderer.rs | 74 ------------------- .../src/definitions/egui_plugin.rs | 56 +++++++------- 3 files changed, 25 insertions(+), 109 deletions(-) delete mode 100644 crates/blue_engine_utilities/examples/egui_embedded_renderer.rs diff --git a/crates/blue_engine_utilities/Cargo.toml b/crates/blue_engine_utilities/Cargo.toml index 94e2e8c..a3176a6 100644 --- a/crates/blue_engine_utilities/Cargo.toml +++ b/crates/blue_engine_utilities/Cargo.toml @@ -80,7 +80,3 @@ path = "examples/physics.rs" [[example]] name = "hello_egui" path = "examples/hello_egui.rs" - -[[example]] -name = "egui_embedded_renderer" -path = "examples/egui_embedded_renderer.rs" diff --git a/crates/blue_engine_utilities/examples/egui_embedded_renderer.rs b/crates/blue_engine_utilities/examples/egui_embedded_renderer.rs deleted file mode 100644 index 2a0cc5b..0000000 --- a/crates/blue_engine_utilities/examples/egui_embedded_renderer.rs +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Blue Engine by Elham Aryanpur - * - * Basic GUI example - * - * Licensed under Apache-2.0 -*/ - -// Gui is a trait that you'll be using to add your UI -#[cfg(feature = "egui")] -use blue_engine_utilities::egui_plugin; -#[cfg(feature = "egui")] -use blue_engine_utilities::egui_plugin::egui as gui; - -// Basic imports -#[cfg(feature = "egui")] -use blue_engine::{Engine, ObjectSettings, primitive_shapes::triangle}; - -fn main() { - #[cfg(feature = "egui")] - { - // Initialize the engine with default settings - let mut engine = Engine::new().expect("win"); - - // Add a triangle to the screen - triangle( - "triangle", - ObjectSettings::default(), - &mut engine.renderer, - &mut engine.objects, - ) - .unwrap(); - - // Start the egui context - let gui_context = egui_plugin::EGUIPlugin::new(); - - // We add the gui as plugin, which runs once before everything else to fetch events, - // and once during render times for rendering and other stuff - engine.signals.add_signal("egui", Box::new(gui_context)); - - let mut color = [1f32, 1f32, 1f32, 1f32]; - - // Update loop - engine - .update_loop(move |engine| { - // obtain the plugin - let egui_plugin = engine - .signals - .get_signal::("egui") - .expect("Plugin not found") - .expect("Plugin type mismatch"); - - // ui function will provide the context - egui_plugin.ui( - |ctx| { - gui::Window::new("title").show(ctx, |ui| { - ui.horizontal(|ui| { - ui.label("Pick a color"); - ui.color_edit_button_rgba_unmultiplied(&mut color); - }); - }); - - engine - .objects - .get_mut("triangle") - .unwrap() - .set_color(color[0], color[1], color[2], color[3]); - }, - &engine.window, - ); - }) - .expect("Error during update loop"); - } -} diff --git a/crates/blue_engine_utilities/src/definitions/egui_plugin.rs b/crates/blue_engine_utilities/src/definitions/egui_plugin.rs index 49676ee..e1e5a2b 100644 --- a/crates/blue_engine_utilities/src/definitions/egui_plugin.rs +++ b/crates/blue_engine_utilities/src/definitions/egui_plugin.rs @@ -200,7 +200,7 @@ impl blue_engine::Signal for EGUIPlugin { } // =============================================================================================== - +// It's usage needs to be checked more struct Callback; impl egui_wgpu::CallbackTrait for Callback { fn paint( @@ -210,7 +210,22 @@ impl egui_wgpu::CallbackTrait for Callback { resources: &egui_wgpu::CallbackResources, ) { let resources: &TriangleRenderResources = resources.get().unwrap(); - resources.paint(render_pass); + render_pass.set_bind_group(0, &resources.default_data.0, &[]); + render_pass.set_pipeline(&resources.default_data.1); + render_pass.set_bind_group(1, &resources.camera_data, &[]); + + // Draw our triangle! + render_pass.set_pipeline(&resources.shader); + render_pass.set_bind_group(0, &resources.texture, &[]); + + render_pass.set_bind_group(2, &resources.uniform, &[]); + + render_pass.set_vertex_buffer(0, resources.vertex_buffer.vertex_buffer.slice(..)); + render_pass.set_index_buffer( + resources.vertex_buffer.index_buffer.slice(..), + wgpu::IndexFormat::Uint16, + ); + render_pass.draw_indexed(0..resources.vertex_buffer.length, 0, 0..1); } } @@ -227,36 +242,16 @@ struct TriangleRenderResources { pub camera_data: wgpu::BindGroup, } -impl TriangleRenderResources { - fn paint(&self, render_pass: &mut wgpu::RenderPass<'_>) { - render_pass.set_bind_group(0, &self.default_data.0, &[]); - render_pass.set_pipeline(&self.default_data.1); - render_pass.set_bind_group(1, &self.camera_data, &[]); - - // Draw our triangle! - let i = self; - println!("{:?}", i.vertex_buffer.length); - render_pass.set_pipeline(&i.shader); - render_pass.set_bind_group(0, &i.texture, &[]); - - render_pass.set_bind_group(2, &i.uniform, &[]); - - render_pass.set_vertex_buffer(0, i.vertex_buffer.vertex_buffer.slice(..)); - render_pass.set_index_buffer( - i.vertex_buffer.index_buffer.slice(..), - wgpu::IndexFormat::Uint16, - ); - render_pass.draw_indexed(0..i.vertex_buffer.length, 0, 0..1); - } +pub struct EmbeddedRender { + object: blue_engine::Object, } - -pub struct EmbeddedRender; impl EmbeddedRender { pub fn new( - object: &mut blue_engine::Object, + object: blue_engine::Object, cc: &mut blue_engine::Renderer, renderer: &mut egui_wgpu::Renderer, - ) -> Option { + ) -> Self { + let mut object = object; let buffers = object.update_and_return(cc); let camera_data = cc.build_uniform_buffer(&[ @@ -305,17 +300,16 @@ impl EmbeddedRender { camera_data: camera_data.0, }); - Some(Self {}) + Self { object } } pub fn prepare( - &self, - object: &mut blue_engine::Object, + &mut self, brenderer: &mut blue_engine::Renderer, erenderer: &mut egui_wgpu::Renderer, camera_data: blue_engine::UniformBuffers, ) { - let object_pipeline = object.update_and_return(brenderer); + let object_pipeline = self.object.update_and_return(brenderer); let resources: &mut TriangleRenderResources = erenderer.callback_resources.get_mut().unwrap(); From 0e571b8131728f859c9134f7c36544f7659742c6 Mon Sep 17 00:00:00 2001 From: Elham Aryanpur Date: Mon, 5 May 2025 10:22:27 +0300 Subject: [PATCH 08/12] fix: #110 - Features for a backend is now empty by default for maximum compatibility --- crates/blue_engine_core/src/engine.rs | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/crates/blue_engine_core/src/engine.rs b/crates/blue_engine_core/src/engine.rs index f0ff87c..40bc361 100644 --- a/crates/blue_engine_core/src/engine.rs +++ b/crates/blue_engine_core/src/engine.rs @@ -57,7 +57,6 @@ pub struct EngineSettings { impl std::default::Default for EngineSettings { /// Will quickly create a window with default settings fn default() -> Self { - let backends = crate::Backends::all(); Self { width: 800, height: 600, @@ -71,16 +70,8 @@ impl std::default::Default for EngineSettings { control_flow: crate::winit::event_loop::ControlFlow::Poll, // wgpu power_preference: crate::PowerPreference::LowPower, - backends, - features: if backends == wgpu::Backends::VULKAN { - wgpu::Features::POLYGON_MODE_LINE | wgpu::Features::POLYGON_MODE_POINT - } else if backends - .contains(wgpu::Backends::VULKAN | wgpu::Backends::METAL | wgpu::Backends::DX12) - { - wgpu::Features::POLYGON_MODE_LINE - } else { - wgpu::Features::empty() - }, + backends: crate::Backends::all(), + features: wgpu::Features::empty(), present_mode: crate::wgpu::PresentMode::AutoNoVsync, limits: crate::wgpu::Limits::default(), alpha_mode: crate::wgpu::CompositeAlphaMode::Auto, From 6600e471515c36ba4062d5f43555227b41bc6c77 Mon Sep 17 00:00:00 2001 From: Elham Aryanpur Date: Mon, 5 May 2025 10:26:50 +0300 Subject: [PATCH 09/12] updated changelog --- CHANGELOG.md | 22 ++++++++++++++++++++++ Cargo.toml | 6 +++--- crates/blue_engine_utilities/Cargo.toml | 14 +++++++------- 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b0a0a3d..12d51e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,28 @@ All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines. --- + +## [0.9.1](https://github.com/AryanpurTech/BlueEngine/compare/v0.9.0..0.9.1) - 2025-05-05 + +### Bug Fixes + +- [**breaking**] #108 - exchanged StringBuffer with AsRef and String with Arc - ([a148472](https://github.com/AryanpurTech/BlueEngine/commit/a148472d83f8902f700bb938dd5f89df2f532b97)) +- #110 - Features for a backend is now empty by default for maximum compatibility - ([0e571b8](https://github.com/AryanpurTech/BlueEngine/commit/0e571b8131728f859c9134f7c36544f7659742c6)) + +### Features + +- readded the embedded renderer and renamed `egui` plugin to `egui_plugin` for reduction of confusion - ([0d15919](https://github.com/AryanpurTech/BlueEngine/commit/0d15919c8de94e113c866718b9b9d8cbf3ec821b)) + +### Miscellaneous Chores + +- updated dependencies - ([aa6076f](https://github.com/AryanpurTech/BlueEngine/commit/aa6076fe2ef605a06868a1dc93a1002b582e0cdb)) +- updated dependencies - ([59338e8](https://github.com/AryanpurTech/BlueEngine/commit/59338e8427f3957fdc17d15b6d6647827e03aa4c)) +- reverted wgpu update - ([73995d2](https://github.com/AryanpurTech/BlueEngine/commit/73995d2c57cfc7cbac1f3e617b61db518ca2e5d1)) +- updated utilities to the latest version - ([547c402](https://github.com/AryanpurTech/BlueEngine/commit/547c402a9694312b68ebf9085f32f18a4fb68af4)) +- some updates done to the embedded renderer - ([687d50e](https://github.com/AryanpurTech/BlueEngine/commit/687d50ee12af4267025a89130e04706bc71b482e)) + +--- + ## [0.9.0](https://github.com/AryanpurTech/BlueEngine/compare/v0.8.0..0.9.0) - 2025-04-13 ### Bug Fixes diff --git a/Cargo.toml b/Cargo.toml index 67826ad..ca6584f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -44,11 +44,11 @@ glam_fast_math = [ ] [dependencies] -# blue_engine_core = { version = "0.9.1", optional = true } -blue_engine_core = { path = "crates/blue_engine_core", optional = true } +blue_engine_core = { version = "0.9.1", optional = true } +# blue_engine_core = { path = "crates/blue_engine_core", optional = true } # Wasm does not support dynamic linking. -blue_engine_dynamic = { version = "0.9.0", optional = true } +blue_engine_dynamic = { version = "0.9.1", optional = true } # blue_engine_dynamic = { path = "crates/blue_engine_dynamic", optional = true } # ========== EXAMPLES ========== # diff --git a/crates/blue_engine_utilities/Cargo.toml b/crates/blue_engine_utilities/Cargo.toml index a3176a6..7b32a03 100644 --- a/crates/blue_engine_utilities/Cargo.toml +++ b/crates/blue_engine_utilities/Cargo.toml @@ -10,7 +10,7 @@ categories = ["game-development", "graphics", "rendering"] license = "Apache-2.0" [features] -default = ["all"] +default = [] all = ["animation", "gltf", "obj", "physics", "egui"] animation = ["dep:keyframe_derive", "dep:keyframe"] gltf = ["dep:gltf"] @@ -21,12 +21,12 @@ egui = ["dep:egui", "dep:egui-winit", "dep:egui-wgpu"] headless = ["blue_engine/headless"] [dependencies] -blue_engine = { path = "../../", default-features = false, features = [ - "debug", - "window", - "static_link", -] } -# blue_engine = { version = "0.9.1" } +# blue_engine = { path = "../../", default-features = false, features = [ +# "debug", +# "window", +# "static_link", +# ] } +blue_engine = { version = "0.9.1" } eyre = "0.6.12" # Animation From 486e6bd967b9c43875bc7a71faf307bda9cdac00 Mon Sep 17 00:00:00 2001 From: Elham Aryanpur Date: Mon, 5 May 2025 10:31:18 +0300 Subject: [PATCH 10/12] updated workflows --- .github/workflows/build.yml | 2 -- .github/workflows/rust-clippy.yml | 3 --- 2 files changed, 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1c8de84..df079b3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,8 +3,6 @@ name: Build on: push: branches: [master] - pull_request: - branches: [master] env: CARGO_TERM_COLOR: always diff --git a/.github/workflows/rust-clippy.yml b/.github/workflows/rust-clippy.yml index 60cbfee..8340ec5 100644 --- a/.github/workflows/rust-clippy.yml +++ b/.github/workflows/rust-clippy.yml @@ -12,9 +12,6 @@ name: rust-clippy analyze on: push: branches: [ "master" ] - pull_request: - # The branches below must be a subset of the branches above - branches: [ "master" ] schedule: - cron: '21 6 * * 6' From e9c980becc99268394b70155c63e2f585cf76081 Mon Sep 17 00:00:00 2001 From: Elham Aryanpur Date: Mon, 5 May 2025 10:32:14 +0300 Subject: [PATCH 11/12] updated changelog and cliff --- CHANGELOG.md | 4 ---- cliff.toml | 3 +-- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 12d51e5..66372a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,6 @@ All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines. ---- - ## [0.9.1](https://github.com/AryanpurTech/BlueEngine/compare/v0.9.0..0.9.1) - 2025-05-05 ### Bug Fixes @@ -23,8 +21,6 @@ All notable changes to this project will be documented in this file. See [conven - updated utilities to the latest version - ([547c402](https://github.com/AryanpurTech/BlueEngine/commit/547c402a9694312b68ebf9085f32f18a4fb68af4)) - some updates done to the embedded renderer - ([687d50e](https://github.com/AryanpurTech/BlueEngine/commit/687d50ee12af4267025a89130e04706bc71b482e)) ---- - ## [0.9.0](https://github.com/AryanpurTech/BlueEngine/compare/v0.8.0..0.9.0) - 2025-04-13 ### Bug Fixes diff --git a/cliff.toml b/cliff.toml index 1744b54..4f98f07 100644 --- a/cliff.toml +++ b/cliff.toml @@ -10,8 +10,7 @@ All notable changes to this project will be documented in this file. See [conven """ # A Tera template to be rendered for each release in the changelog. # See https://keats.github.io/tera/docs/#introduction -body = """ ---- +body = """\ {% if version %}\ {% if previous.version %}\ ## [{{ version | trim_start_matches(pat="v") }}]($REPO/compare/{{ previous.version }}..{{ version }}) - {{ timestamp | date(format="%Y-%m-%d") }} From f44bf3cd86139edf6527a9296d81d4cfe6cce3fe Mon Sep 17 00:00:00 2001 From: Elham Aryanpur Date: Mon, 5 May 2025 10:32:43 +0300 Subject: [PATCH 12/12] updated justfile --- justfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/justfile b/justfile index 6e349dd..9de5e10 100644 --- a/justfile +++ b/justfile @@ -3,8 +3,7 @@ update-changelog release_tag: git cliff --unreleased --tag {{release_tag}} --prepend CHANGELOG.md -publish release_tag: +publish: @cd crates/blue_engine_core && cargo publish --allow-dirty @cd crates/blue_engine_dynamic && cargo publish --allow-dirty @cargo publish --allow-dirty - @just update-changelog {{release_tag}}