From 1d1a44324e65a4d9cca7be1f43884f073fb3b017 Mon Sep 17 00:00:00 2001 From: Max Richter Date: Fri, 23 Jan 2026 02:28:17 +0100 Subject: [PATCH] feat: some shit --- app/src/lib/runtime/runtime-executor.ts | 24 +++++++++--- app/src/routes/dev/+page.svelte | 24 ++++++++++-- app/src/routes/dev/dev-graph.json | 49 ++++++++++++++++++------- nodes/max/plantarium/float/src/lib.rs | 5 +-- nodes/max/plantarium/output/src/lib.rs | 21 +++++++++-- nodes/max/plantarium/vec3/src/lib.rs | 12 +++--- packages/utils/src/lib.rs | 16 ++++---- 7 files changed, 107 insertions(+), 44 deletions(-) diff --git a/app/src/lib/runtime/runtime-executor.ts b/app/src/lib/runtime/runtime-executor.ts index f15b806..e99e5a0 100644 --- a/app/src/lib/runtime/runtime-executor.ts +++ b/app/src/lib/runtime/runtime-executor.ts @@ -217,11 +217,22 @@ export type Pointer = { (a, b) => (b.state?.depth || 0) - (a.state?.depth || 0) ); + console.log({ settings }); + + this.printMemory(); + const seedPtr = this.writeToMemory(this.seed, 'seed'); + + const settingPtrs = new Map( + Object.entries(settings).map(( + [key, value] + ) => [key as string, this.writeToMemory(value as number, `setting.${key}`)]) + ); + for (const node of sortedNodes) { const node_type = this.nodes.get(node.type)!; console.log('---------------'); - console.log('STARTING NODE EXECUTION', node_type.definition.id); + console.log('STARTING NODE EXECUTION', node_type.definition.id + '/' + node.id); this.printMemory(); // console.log(node_type.definition.inputs); @@ -229,23 +240,24 @@ export type Pointer = { ([key, input]) => { // We should probably initially write this to memory if (input.type === 'seed') { - return this.writeToMemory(this.seed); + return seedPtr; } const title = `${node.id}.${key}`; // We should probably initially write this to memory // If the input is linked to a setting, we use that value - // if (input.setting) { - // return getValue(input, settings[input.setting]); - // } + // TODO: handle nodes which reference undefined settings + if (input.setting) { + return settingPtrs.get(input.setting)!; + } // check if the input is connected to another node const inputNode = node.state.inputNodes[key]; if (inputNode) { if (this.results[inputNode.id] === undefined) { throw new Error( - `Node ${node.type} is missing input from node ${inputNode.type}` + `Node ${node.type}/${node.id} is missing input from node ${inputNode.type}/${inputNode.id}` ); } return this.results[inputNode.id]; diff --git a/app/src/routes/dev/+page.svelte b/app/src/routes/dev/+page.svelte index fc68354..18b95da 100644 --- a/app/src/routes/dev/+page.svelte +++ b/app/src/routes/dev/+page.svelte @@ -71,7 +71,11 @@ {#if visibleRows?.length} { + const scrollTop = e.currentTarget.scrollTop; + start.value = Math.floor(scrollTop / rowHeight); + }} > @@ -84,9 +88,14 @@ - + { + const scrollTop = e.currentTarget.scrollTop; + start.value = Math.floor(scrollTop / rowHeight); + }} + > {#each visibleRows as r, i} - {@const index = i + start} + {@const index = i + start.value} {@const ptr = ptrs[i]} @@ -119,7 +128,7 @@
Float
{index}
+ + + Vec { - let a_val = read_f32(a.0); - vec![encode_float(a_val)] + vec![read_i32(a.0)] } diff --git a/nodes/max/plantarium/output/src/lib.rs b/nodes/max/plantarium/output/src/lib.rs index 9b2f4b3..a0cef75 100644 --- a/nodes/max/plantarium/output/src/lib.rs +++ b/nodes/max/plantarium/output/src/lib.rs @@ -1,5 +1,8 @@ use nodarium_macros::nodarium_definition_file; use nodarium_macros::nodarium_execute; +use nodarium_utils::encode_float; +use nodarium_utils::evaluate_float; +use nodarium_utils::evaluate_vec3; use nodarium_utils::log; use nodarium_utils::read_i32_slice; @@ -7,8 +10,18 @@ nodarium_definition_file!("src/input.json"); #[nodarium_execute] pub fn execute(input: (i32, i32), _res: (i32, i32)) -> Vec { - log!("HERE"); - let mut vecs = read_i32_slice(input); - vecs.push(42); - vecs + let inp = read_i32_slice(input); + let length = inp.len(); + if length == 1 { + let f = evaluate_float(inp.as_slice()); + log!("out.float f={:?}", f); + return vec![encode_float(f)]; + } + if length == 3 { + let f = evaluate_vec3(inp.as_slice()); + log!("out.vec3 x={:?} y={:?} z={:?}", f[0], f[1], f[2]); + return vec![encode_float(f[0]), encode_float(f[1]), encode_float(f[2])]; + } + + return inp; } diff --git a/nodes/max/plantarium/vec3/src/lib.rs b/nodes/max/plantarium/vec3/src/lib.rs index e8bea17..9b0fc44 100644 --- a/nodes/max/plantarium/vec3/src/lib.rs +++ b/nodes/max/plantarium/vec3/src/lib.rs @@ -1,15 +1,17 @@ use nodarium_macros::nodarium_definition_file; use nodarium_macros::nodarium_execute; -use nodarium_utils::concat_arg_vecs; +use nodarium_utils::concat_args; +use nodarium_utils::log; use nodarium_utils::read_i32_slice; nodarium_definition_file!("src/input.json"); #[nodarium_execute] pub fn execute(x: (i32, i32), y: (i32, i32), z: (i32, i32)) -> Vec { - concat_arg_vecs(vec![ - read_i32_slice(x), - read_i32_slice(y), - read_i32_slice(z), + log!("vec3 x: {:?}", x); + concat_args(vec![ + read_i32_slice(x).as_slice(), + read_i32_slice(y).as_slice(), + read_i32_slice(z).as_slice(), ]) } diff --git a/packages/utils/src/lib.rs b/packages/utils/src/lib.rs index 3fb32f7..912ff2c 100644 --- a/packages/utils/src/lib.rs +++ b/packages/utils/src/lib.rs @@ -11,7 +11,7 @@ extern "C" { pub fn __nodarium_log(ptr: *const u8, len: usize); } -// #[cfg(debug_assertions)] +#[cfg(debug_assertions)] #[macro_export] macro_rules! log { ($($t:tt)*) => {{ @@ -25,13 +25,13 @@ macro_rules! log { }} } -// #[cfg(not(debug_assertions))] -// #[macro_export] -// macro_rules! log { -// ($($arg:tt)*) => {{ -// // This will expand to nothing in release builds -// }}; -// } +#[cfg(not(debug_assertions))] +#[macro_export] +macro_rules! log { + ($($arg:tt)*) => {{ + // This will expand to nothing in release builds + }}; +} #[allow(dead_code)] #[rustfmt::skip]