diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f57a2dd..967f4c58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,10 @@ - Fix inconsistency between JIT and VM evaluator when performing interval evaluation of `not([NAN, NAN])`. - Propagate `NAN` values through `and` and `or` operations on intervals. +- Add a new `Image

` generic image type (wrapping a `Vec

`, `width`, and + `height`). + - Define `DepthImage`, `NormalImage`, and `ColorImage` specializations + - Use these types in 2D and 3D rendering - Remove `Grad::to_rgb` in favor of handling it at the image level # 0.3.4 diff --git a/demos/web-editor/crate/Cargo.lock b/demos/web-editor/crate/Cargo.lock index 14a620cf..b85e0858 100644 --- a/demos/web-editor/crate/Cargo.lock +++ b/demos/web-editor/crate/Cargo.lock @@ -317,7 +317,6 @@ dependencies = [ "document-features", "dynasmrt", "getrandom", - "ieee754", "libc", "nalgebra", "num-traits", @@ -369,12 +368,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "ieee754" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9007da9cacbd3e6343da136e98b0d2df013f553d35bdec8b518f07bea768e19c" - [[package]] name = "instant" version = "0.1.12" diff --git a/demos/web-editor/crate/src/lib.rs b/demos/web-editor/crate/src/lib.rs index e2c70d0c..85c994e0 100644 --- a/demos/web-editor/crate/src/lib.rs +++ b/demos/web-editor/crate/src/lib.rs @@ -1,9 +1,9 @@ use fidget::{ context::{Context, Tree}, render::{ - BitRenderMode, CancelToken, ImageRenderConfig, ImageSize, RotateHandle, - ThreadPool, TileSizes, TranslateHandle, View2, View3, - VoxelRenderConfig, VoxelSize, + BitRenderMode, CancelToken, DepthImage, ImageRenderConfig, ImageSize, + NormalImage, RotateHandle, ThreadPool, TileSizes, TranslateHandle, + View2, View3, VoxelRenderConfig, VoxelSize, }, var::Var, vm::{VmData, VmShape}, @@ -120,6 +120,7 @@ pub fn render_normals( // Convert into an image Ok(norm + .to_color() .into_iter() .flat_map(|[r, g, b]| [r, g, b, 255]) .collect()) @@ -130,7 +131,7 @@ fn render_3d_inner( image_size: usize, view: View3, cancel: CancelToken, -) -> Option<(Vec, Vec<[u8; 3]>)> { +) -> Option<(DepthImage, NormalImage)> { let cfg = VoxelRenderConfig { image_size: VoxelSize::from(image_size as u32), threads: Some(ThreadPool::Global), diff --git a/fidget/src/render/mod.rs b/fidget/src/render/mod.rs index 08ad08ac..57ab397d 100644 --- a/fidget/src/render/mod.rs +++ b/fidget/src/render/mod.rs @@ -388,6 +388,18 @@ pub(crate) trait RenderWorker<'a, F: Function> { } /// Generic image type +/// +/// The image is laid out in row-major order, and can be indexed either by a +/// `usize` index or a `(row, column)` tuple. +/// +/// ```text +/// 0 ------------> width (columns) +/// | | +/// | | +/// | | +/// V-------------- +/// height (rows) +/// ``` pub struct Image

{ data: Vec

, width: usize, // XXX use ImageSize instead? diff --git a/models/sponge.rhai b/models/sponge.rhai index 3f071dd3..a5a44822 100644 --- a/models/sponge.rhai +++ b/models/sponge.rhai @@ -21,4 +21,4 @@ let rescale = manhattan / radius; let blend = 1.0; // adjust the sphere-ness of the sponge let r = (rescale * blend) + (1.0 - blend); -draw(intersection(sponge, x + y + z - 2)) +draw(sponge.remap_xyz(x / r, y / r, z / r));