Commit Graph
100 Commits
Author SHA1 Message Date
Dennis KobertandTimon 540a4ff273 Integrate document-format storage into the editor (#4265)
* Integrate document-format storage into the editor

* Address review feedback: drop redundant clones and dedupe metadata traversal

* Extract DocumentHistory and move storage-metadata tests to their own file

* Extract storage diffing/IO, gate validation and .gdd save behind preferences, restructure tests

* Address PR review: save-format/path consistency, autosave persistence, and view-settings/diff fixes

* Skip storage remount on .gdd open and split value/timestamp drift in attribute diff

* Rename storage tests module and surface .gdd open failures with per-resource diff detail

* Add debug-menu toggle to hide the storage preferences section

* Hopefully fix async tests

* Shorten comments

* Fix tests

* Review

* Review

* Review

* Block on future mesages in tests

* Review

* Shorten comments

---------

Co-authored-by: Timon <me@timon.zip>
2026-07-04 19:27:00 +00:00
Dennis Kobert a979ccd5bd Add document-format RFC draft (#4264)
* Add document-format RFC draft

* Align document-format RFC with graph-storage implementation

* Update writing style

* Recharacterize resource source chain as LWW-element-set, not add-wins OR-set

* Add Rev identity rationale framed against Git, plus patch-id future item

* Correct RFC inaccuracies found in implementation audit

* Mark unimplemented retirement coarsening and leader election as future; fix resurrection mechanism

* Add hot-log to the on-disk payload list in the architecture diagram
2026-06-28 19:05:30 +00:00
Dennis Kobert 03c33dc784 Fix error from running cargo check with a system global Cargo config.toml rustflags override (#4277)
Fix error caused by running cargo check in the workspace
2026-06-23 09:09:19 +00:00
Dennis Kobert b45cc312dd Add support for opening GDD documents from the CLI (#4262)
* Wire document-format into graphene-cli

* Support loading both legacy and new graphite files in the cli

* Address PR review: propagate CLI errors and use dyn resolver

* Fix CLI network wrap + preprocessor ordering

* Cleanup preprocessor

* Remove unused import
2026-06-21 18:17:01 +02:00
Dennis Kobert de11d29d8e Add document-format crate (#4234)
* Add document-format crate

* Adapt document-format to merged graph-storage and consolidate errors

* Fix resource write ordering, codec error masking, and export docs

* Remove document-format RFC; tracked in a dedicated PR

* Restructure document-format into gdd/persist/export/resource modules

Split the 963-line lib.rs by responsibility: persist path into persist.rs, resource I/O into resource.rs, export engine into export.rs. Rename the GddV1 layout struct to GddV1Layout and add a GddV1 = Gdd<GddV1Layout> alias.

* Feature-split document-format and graph-storage for minimal builds

* Address PR review: O(1) history-delta lookup and no-default-features test build

* Address PR review: propagate apply_hot_op persist error and assert resource hash

* Make decompression from archive streaming

* Share archive export body between export and export_to_bytes

* Review cleanup

* Export documents with un-retired hot ops losslessly

* Persist last_broadcast_rev in session.json, drop unused last_retired_at

* Move peer_id from manifest to session.json

* Rename gesture to interaction in document-format storage layer
2026-06-21 12:35:47 +00:00
Dennis Kobert b1d8ac0e64 Add History type and merge-commit model to graph-storage (#4238)
* Add History type and merge-commit model to graph-storage

* Add History::merge with canonical-sort convergence to graph-storage

* Append merge delta without re-sorting the whole history

* Resurrect across merges by searching all ancestors, not the primary chain
2026-06-16 15:02:48 +02:00
Dennis KobertandTimon b56af15e5e Add graph-storage crate (#4198)
* Add graph-storage crate

* Split graph-storage lib.rs into smaller modules

* Make graph_craft/core_types dependency optional

* Fix CRDT correctness issues flagged in graph-storage PR review

* Treat trailing empty export slots as value-equal in Network::value_equal

* Address graph-storage review: parameterize CrdtError, reject hot-log corruption, drop LamportClock Default

* Address graph-storage review: fix root-delta history walk, validate cross-network refs, make compute_deltas deterministic, harden Priority, index nodes by network

* Address graph-storage review: sort sources on deserialize, treat inputs_attributes length as structural, dedupe demo-artwork loader

* Add opt-in Delta rev validation, dedup resource sources on deserialize, fix doc grammar

* Persist scope injections through storage; harden gesture-end and embedded-source checks

* Review

* Review

* Review

* Use new types for NodeId and NetworkId

* Adress minor review comments

---------

Co-authored-by: Timon <me@timon.zip>
2026-06-13 16:47:04 +00:00
Dennis Kobert d5c67eeb55 Drop MemoHash's std Hash impl and route cache-identity hashing through CacheHash (#4209) 2026-06-07 17:49:56 +00:00
Dennis KobertandTimon 6fe1af3afe Add document-container crate (#4191)
* Add document-container crate: container backends and archive codecs

* Address PR review: path/prefix split, safe size casts, OPFS stream aborts

* Address PR review round 2: mmap read check, UTF8 entry names, prefix normalization

* Make MmappedBytes::new fallible so mmap reads can't silently degrade

* Address PR review round 3: backend contract uniformity (symlinks, remove, list)

* Apply symlink-component check to FolderBackend listing paths

* Address PR review: idempotent OPFS delete logging, tar default-features, shared entry-size cap

* Fix validate_path doc: dotfiles pass, CurDir/ParentDir rejected

* Omit symlink entries from FolderBackend listings for consistency with resolve

* Preserve zip I/O errors and reject non-canonical paths in validate_path

* Extend archive apis to return the archive writer

* Rename document/document-container directory to document/container

* Add archive format sniffing and deserialize_auto

* Drop temporal hedge from checked_entry_size comment

* Tighten verbose doc comments in document-container

* Coalesce consecutive same-path OPFS appends to avoid O(n^2) file copies

* Review

* Update document-container for the deserialize/store_non_blocking renames

---------

Co-authored-by: Timon <me@timon.zip>
2026-06-05 13:28:02 -04:00
Dennis Kobert 7b9c480a8d Make ResourceStorage trait &self-based and remove 'static requirement (#4188)
* Make ResourceStorage trait &self-based with elided-lifetime ResourceFuture

* Adress review comments
2026-06-01 10:37:05 +00:00
Dennis KobertandTimon 78679a5ba2 Implement editor level future message handler (#4182)
* Implement proper editor level async message handler

* Take application_io and wake callback as Editor::new arguments

* Rename AsyncMessage -> FutureMessage

* add DesktopWrapperMessage::Wake

---------

Co-authored-by: Timon <me@timon.zip>
2026-05-31 21:26:29 +00:00
Dennis Kobert e0368435b9 Add the "memoize" attribute to the node macro (#4065)
* Add memoization attribute to node macro

* Fix memoization insertion for networks without conversion nodes
2026-04-28 11:55:38 +00:00
Dennis KobertandKeavon Chambers 3d84e63ef9 Migrate usage of the Hash trait for cache invalidation to the dedicated CacheHash trait (#4051)
* WIP start migrating usages of hash for cache invalidadion to dedicated trait

* Finish migrating usages

* Code review

* Add comments clearifying the reasoning for using random ids in the VectorModification cach hash impl

* Fix some remaining hash violations

* Finish migration and fix compilation

* Fix import ordering

* Cleanup

* Fix code review stuff

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2026-04-27 05:18:47 +00:00
Dennis Kobert 19aaeb374b Remove sample based image hashing to avoid false equalities (#3980)
* Remove sample based image hashing to avoid false equalities

This was originally introduced to improve the performance of working with
image data, but since the memo hash wrapper got introduced this should no
longer be really necessary.

* Fix todo comment
2026-04-04 11:46:08 +00:00
Dennis KobertandKeavon Chambers b0cc8a9243 Update Vite to version 8 (#3900)
* Update vite to version 8

* Fix breakage from the upgrade

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2026-03-22 02:12:28 +00:00
Dennis Kobert eb30ee78bc Fix Grapene CLI compilation (#3892)
* Fix grapene-cli compilation

* Improve cargo features to reduce recompiles
2026-03-13 11:28:34 +01:00
Dennis Kobert 116a4106c4 Add texture pool to render cache node (#3804)
* Add texture pool to render cache node

* Use direct texture copy instead of bitter and fix graphene_cli

* Remove warnings

* Fix wgpu import path

* Code review fixes
2026-03-11 09:44:21 +00:00
Dennis Kobert 90533e656f Remove the path-bool library (#3882) 2026-03-11 08:55:03 +01:00
Dennis KobertandTimon f06983d072 Fix texture cache region size and broken rendering when tilting the viewport (#3867)
* Fix rotation for render cache

* Simplify code and fix zoom not invalidating cache

* Add constant for quantization amount

* fix region size

* print error when splitting oversized region fails

---------

Co-authored-by: Timon <me@timon.zip>
2026-03-09 23:42:38 +00:00
Dennis Kobert 3d1491ce92 Add animated GIF file export to Graphene CLI (#3846)
* Add gif file export via graphene cli

* Add check for negative fps numbers
2026-03-08 10:33:40 +00:00
Dennis Kobert 50ef6e15cb Use glob syntax for Cargo.toml (#3489)
* Use glob syntax for Cargo.toml

* Readd nested crates to workspace members and reduce the list of default members
2026-03-05 10:20:41 +00:00
Dennis KobertandTimon 7250b091d5 Fix the UI scaling factor invalidating the render cache (#3818)
* Fix ui scaling messing up render cache

* Review

---------

Co-authored-by: Timon <me@timon.zip>
2026-02-24 12:41:42 +00:00
Dennis KobertandKeavon Chambers 65ca8610eb Split CI job to run on dedicated runners for web and native build (#3812)
* Split ci job to run on dedicated runners for web and native build

* Trigger CI

* Update labels

* Update comment text

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2026-02-24 09:37:00 +00:00
Dennis Kobert a1c1039ea1 Fix path tool overlays (#3810)
* Add vector data to merge function

Use destructuring to avoid issues like this in the future

* Remove unnecessary explict copying
2026-02-23 09:17:00 +00:00
Dennis KobertandKeavon Chambers 0531769c41 Cache Vello render output as stitchable textures (#3722)
* WIP render caching

* Hook up render cache to render pipeline

* Fixed offsets

* Initial cleanup

* Integrate cache with context invalidation

* Cleanup

* Improve rounding and reduce tile size to fix vello not rendering

* Include pointer position in cache key

* Avoid unwraps and zero sized textures

* Destroy textures after blitting to surface

* Fix context dependencies

* Exclude footprint from render params

* Batch animation frame messages

* Add vello max render size to preference dialogue

* Remove unused import

* Reorder vello preference

* Clean up preferences dialog

* Apply review suggestions

* Cap max render region size

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2026-02-22 10:12:50 +00:00
Dennis KobertandKeavon Chambers ba177c4c5d Generalize the 'Map Vector' node as 'Map' with support for all graphical types (#3793)
* Rename Map Vector to Map

* Fix compilation errors

* Move to the Graphic module and add Read {Graphic, Raster, Color} nodes

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2026-02-20 21:33:02 +00:00
Dennis Kobert e1357c5c34 Improve CI times and make merge queue only trigger one CI run (#3755)
* Split ci job into multiple jobs running on github runners

* Add permission to build steps

* Try running rust build on selfhosted runner

* Disable nix setup for self hosted runner

* Revert build and only run lint + web build + rust fmt on gh runners

* Only build rust tests and ignore branding for frontend lint

* Provide stub ts types for running linter without building wasm bundle

* Manually install wasm-opt + use cargo-binstall

* Only build with shaders for master builds

* Revert splitting of lint job

* Attempt to build with shaders

* Explicitly install linux target

* Move frontend build back to self hosted runner

* Remove whitespace changes

* Remove explicit build step
2026-02-18 22:22:47 +00:00
Dennis Kobert 5efa81df85 Store click targets in Arc (#3726) 2026-02-06 12:35:32 +00:00
Dennis Kobert 1a9f0a543c Fix pointer position node (#3725)
Fix PointerPosition traits
2026-02-05 23:43:58 +01:00
Dennis KobertandKeavon Chambers 46989438c1 Add merge_group trigger to CI to enable merge queues (#3716)
* Add merge_group trigger to ci to enable merge queues

* Update .github/workflows/build-dev-and-ci.yml

Co-authored-by: Keavon Chambers <keavon@keavon.com>

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2026-02-04 06:07:16 +00:00
Dennis Kobert 3f97ae4c57 Add JSON get node (#3708)
* Add JSON get node

* Return "" on error and print to console
2026-02-03 22:07:46 +00:00
Dennis KobertandTimon f36d455d03 Desktop: Only rerender the UI if it has changed (#3688)
* Only rerender ui if it has changed

* Don't immedeatly request new frame at the end of the event loop

* Request redraw after ui update

* Always request redraw after timeout

* Fix setting control flow in all cases

* Remove comment

---------

Co-authored-by: Timon <me@timon.zip>
2026-02-03 13:04:44 +00:00
Dennis Kobert 8e8428a572 Add headers input to http nodes (#3709) 2026-02-03 11:47:53 +00:00
Dennis Kobert e88db022af Exclude node registry functions from desktop frontend builds (#3584)
* Exclude node registry functions from desktop frontend builds

This reduces compile times and file sizes

* Use early return

* Fix branch name in build-linux pipeline
2026-01-06 12:34:15 +00:00
Dennis KobertandKeavon Chambers fafc687d84 Migrate memo nodes to node macro and make implementing other persistent nodes easier (#3552)
* Add #[data] and #[serialize] attributes to node macro

- Add #[data] attribute for struct fields that aren't node parameters
  - Data fields are initialized with Default::default()
  - Passed as references to the underlying function
  - Excluded from registry metadata (internal state)
  - Generic types in data fields allowed without #[implementations]

- Add #[serialize] attribute for custom Node::serialize() implementation
  - Receives references to all data fields
  - Generates serialize() method in Node trait impl

- Conditional derives based on data field presence
  - With data fields: Debug, Clone only
  - Without data fields: Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash

* Refactor Memo and Monitor Node to use node macro

* Move Complex type into type alias

* Fix format

* Update node-graph/nodes/gcore/src/memo.rs

Co-authored-by: Keavon Chambers <keavon@keavon.com>

* Update node-graph/nodes/gcore/src/memo.rs

Co-authored-by: Keavon Chambers <keavon@keavon.com>

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2026-01-05 22:28:02 +01:00
Dennis Kobert 532dc30028 Fix checkboxes by using deterministic widget IDs instead of random ones to make the diffing easier (#3457)
* Move diffing to trait

* Add deterministic widget ids

* Cleanup
2025-12-08 12:30:29 +00:00
Dennis Kobert a6f83291b4 We now use normal blending instead of using Mix::Clip / the clip_layer (#3454)
* We now use normal blending instead of using Mix::Clip / the clip_layer

* Revert the revert for the clip using SrcOver
2025-12-07 10:26:24 +00:00
Dennis Kobert 406f3d93f3 Add tool for visualizing crate hierarchy (#3315)
* Add tool for visualizing crate hierarchy

* Update crate structure

* Restructure crate viz and integrate crate into workspace

* Remove transitive dependency edges

* Move png / svg creation into the rust binary
2025-11-28 15:34:45 +00:00
Dennis Kobert a932eaedcf Render artwork at correct resolution when using vello on wasm (#3416)
* Work on fixing rendering for wasm+vello

* Render vello canvas in wasm at the correct resolution

* Cleanup unused surface rendering code

* Remove vector to raster conversion

* Remove desktop changes

* Revert window.rs changes

* Don't round logical coordinates

* Fix desktop compilation + don't round logical coordinates for svg rendering

* Further cleanup

* Compute logical size from acutal physical sizes
2025-11-24 14:23:27 +00:00
Dennis Kobert 788e82a7d0 Add export command to Graphene CLI (#3400)
* Add export command to cli

* Fix format
2025-11-19 17:39:48 +01:00
Dennis Kobert f61aebb777 Add a command to Graphene CLI for listing protonode identifiers (#3399)
* Add proto node name printing

* Add subcommand for printing proto node identifiers

* Address review comments

* Cargo fmt
2025-11-19 11:59:27 +01:00
Dennis KobertandKeavon Chambers 57b0b9c7ed Restructure node crates (#3384)
* Restructure node-graph folder

* Fix wasm compilation

* Move node definitions out of *-types crates

* Cleanup

* Fix warnings

* Fix warnings

* Start adding migrations

* Add migrations and move memo nodes to gcore

* Move nodes/gsvg-render -> rendering

* Replace some hard coded identifiers and fix automatic conversion

* Fix Vec2Value node migration

* Fix formatting

* Add more migrations

* Cleanup features

* Fix core_types::raster import

* Update demo artwork (to make profile ci work)

* Move *-types to node-graph/libraries folder

* Add missing node migrations

* Migrate more nodes

* Remove impure memo node

* More fixes and remove warning

* Migrate context and add a few missing migrations

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-11-18 10:21:54 +00:00
Dennis Kobert 181c30bc0a Fix assorted Clippy lints (#3390) 2025-11-17 07:58:31 +00:00
Dennis Kobert 72a291d808 Improve web frontend performance during zooming and panning (#3337)
* WIP debounce frontend ui updates

* Reduce the number of frontend updates performed

* Improve menu bar diffing

* Cleanup in dispatcher

* Fix comment
2025-11-08 14:01:11 +01:00
Dennis Kobert 7254c470ef Exclude procedural-string-lights from cached execution CI benchmarks (#3351)
Exclude procedural-string-lights from cached execution benchmarks

This benchmark seem to have been really flaky in our CI so we remove it
2025-11-08 10:44:22 +01:00
Dennis Kobert 68e67055d8 Update Linebender-related dependencies (#3349)
* Updates crates from linebender ecosystem

* Remove usages of decprecated Clip mix mode
2025-11-08 08:59:00 +01:00
Dennis KobertandKeavon Chambers e5f40a3316 Add 'Instance Map' and 'Instance Vector' nodes (#3229)
* Add map instance and extract vector nodes

* Cleanup

* Inject index in map node

* Code review

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-10-27 15:56:08 +01:00
Dennis Kobert f102801059 Fix incorrect implementations of the Hash and PartialEq traits on Table<T> (#3306)
Fix incorrect implementations of the Hash and PartialEq traits on Table
2025-10-27 15:55:36 +01:00
Dennis Kobert 557df6917d Reduce variability noise of the profiling comment CI action (#3303)
* Only consider changes significant if they exceed an absolute ir diff

* Node graph folder change to trigger ci

* Use extra step for detecting significant perf degradations

* Reenable expanding of sections with significant changes

* Remove temp file
2025-10-23 11:39:27 +02:00
Dennis Kobert 37bf2ade11 Improve profiling CI (#3296)
* Imporve profiling CI

* Disable optimizations for graphene core in dev builds
2025-10-21 13:01:41 +00:00
Dennis Kobert e8f18b0ac0 Cache calculation of bounding boxes with transforms (#3287)
* Cache calculation of bounding boxes with transforms

* Reuse bounding boxes across for the same rotation

* Cleanup code and add documentation

* Add tests
2025-10-17 10:20:55 +00:00
Dennis Kobert c697b61a7e Clean up execution context for skipped node graph submissions (#3233) 2025-10-01 10:13:59 +00:00
Dennis Kobert bc66148d2b Reset the overlay context for each draw request and use global font cache (#3231) 2025-09-28 15:36:08 +00:00
Dennis Kobert 84e44810d2 Run preprocessing on benchmarks and fix deadlock (#3230) 2025-09-27 12:36:29 +02:00
Dennis KobertandTimon Schelling ffc74273cc Implement Convert trait to convert between CPU and GPU images (#3194)
* Add upload texture trait

* Make convert trait use explicit converter

* Add gpu texture download implementation

* Add footprint to convert trait

* Cleanup texture upload / download

* Download wgpu textures aligned

* abstract texture download into converter helper

* rename module

not only doing uploads anymore
conversion looks like a ok name

* Remove into_iter call and intermediate vector allocation

---------

Co-authored-by: Timon Schelling <me@timon.zip>
2025-09-26 14:30:01 +02:00
Dennis Kobert 4e47b5db93 Restructure gcore/text module and fix memory leak (#3221)
* Restructure gcore/text module and fix memory leak

* Remove unused import

* Fix default font fallback causing wrong caching and rename to TextContext

* Upgrade demo art
2025-09-25 15:29:07 +02:00
Dennis KobertandKeavon Chambers e4d2805115 Add workaround for cache context nullification breaking nested loop indexes (#3178)
* Disable caching for the instance repeat etc. nodes

* Add usize implementation for caching and monitor nodes

* Change return type of instance index node back to f64

* Cleanup while loop

* Remove stray usize changes

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-09-16 21:59:43 +00:00
Dennis Kobert 390ce023ea Fix regression when rotating a group, resulting in an incorrect transform cage bounding box (#3184)
Revert "Reuse click target bounding boxes for document bounds"

This reverts commit d9e8a71cd0.
2025-09-16 13:41:44 -07:00
Dennis Kobert 5836416632 Optimize editor performance for node selection, click target bounds, and batched messages (#3162)
* Don't clone messages during batch processing

* Improve selected nodes perf and memoize network hash computation

* Reuse click target bounding boxes for document bounds

* Early terminate computing the connected count

* Cleanup
2025-09-11 10:08:26 +00:00
Dennis Kobert ad5d8fcd37 Optimize rendering by caching intermediate render results when panning/zooming (#3147)
* Add svg render node

WIP

Fix error in context nullificaton node insertion

Correctly translate metadata

Fix warning

* Cleanup

* Remove color / gradient check and fix svg defs

* Implement viewport filling transform modification for vello

* Cleanup and comments

* Code review
2025-09-11 11:35:33 +02:00
Dennis Kobert 1808bea2cf Fix editor build script always being rerun (#3156) 2025-09-09 10:21:58 +00:00
Dennis Kobert ee586be381 Fix exporting an image failing because it is ignored while playing an animation (#3151)
Fix export not working while playing an animation
2025-09-08 09:32:07 +00:00
Dennis Kobert a1e05754e5 Revert real time playback being enabled by default (#3150) 2025-09-08 02:15:59 -07:00
Dennis KobertandKeavon Chambers acd7ba38cc Graphene: Fine-grained context caching (#2500)
* RFC: Fine Grained Context Caching

* Fix typos

* Fix label

* Add description of inject traits

* Explicitly support context modification

* Start implementation of context invalidation

* Add inject trait variants
* Route Extract / Inject traits to the proto nodes

* Implement context dependency analysis

* Implement context modification node insertion

* Fix erronous force graph run message

* Fix Extract* Inject* annotations in the nodes

* Require Hash implementation for VarArgs

* Fix nullification node insertion

* Cross of done items unresolved questions section

* Update Cargo.lock

* Fix context features propagation

* Update demo artwork

* Remove BondlessFootprint and FreezeRealTime nodes

* Fix migration

* Add migrations for adding context features to old networks

* Always update real time regardless of animation state

* Cargo fmt

* Fix tests

* Readd sed command to hopefully fix profile result parsing

* Add debug output to profiling pr

* Use new totals instead of summaries for for iai results

* Even more debugging

* Use correct debug metrics (hopefully)

* Add more MemoNode implementations

* Add context features annotation to shader node macro

* Cleanup

* Time -> RealTime

* Code review

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-09-05 11:44:26 +00:00
Dennis Kobert 7dc86b36ca Fix profiling CI action by avoiding command line length limits (#3136)
Fix profiling ci by avoiding comand line length limits
2025-09-04 12:22:17 +02:00
Dennis Kobert d9cbf975ff Deprecate automatic composition (#3088)
* Make manual_compositon non optional and rename to call_argument

* Fix clippy warnings

* Remove automatic composition compiler infrastructure

* Implement document migration

* Fix tests

* Fix compilation on web

* Fix doble number test

* Remove extra parens

* Cleanup

* Update demo artwork

* Remove last compose node mention

* Remove last mention of manual composition
2025-08-24 08:34:59 +00:00
Dennis Kobert bb364c92ad Fix automatic Into node insertion (#3087)
Fix automatic into node insertion
2025-08-23 18:21:54 +02:00
Dennis Kobert 354bf93364 Store document node inputs in Arc to reduce memory consumption (#3086)
Store values in memo hash contanier in arc
2025-08-23 17:24:41 +02:00
Dennis Kobert 469f0a6c30 Remove lambda node inputs since they are no longer used (#3084)
* Remove lambda node inputs as they are now unused

* Fix warnings

* Fix tests

* Fix clippy warning
2025-08-23 12:16:49 +02:00
Dennis Kobert 7377871106 Fix clippy warnings (#3085)
* Run clippy fix

* Clippy v2

* Make const item static

* Cargo fmt
2025-08-23 11:45:47 +02:00
Dennis KobertandKeavon Chambers a4ec50d8ba Improve robustness and performance of the boolean operation algorithm (#2191)
* Improve perf of path bool lib

* Use swap remove

* Use outer/inner bounding box for inclusion testing

* Reuse allocations for hit testing

* Use direct root finding for inclusion testing

* Reuse bounding box

* Use faster hash and specify capacities

* Use hashmap based approach for find vertices

* Unroll find_vertecies loop and use 32 bit positions

* Tune initial vec capacities

* Remove unused bounding boxes

* Use smallvec for storing outgoing edges

* Improve allocations for compute_minor

* Use approximate bounding box for edge finding

* Transition aabb to use glam vecs

* Make find vertecies use 64 bit again this is slower but less likely to cause issues

* Improve intersection candidate finding

* Remove loop check in bit vec iter

* Special case cubic line intersections

* Optimize grid rounding and add debug output

* Remove file write

* Remove faulty line intersection

* Fix grid rounding

* Improve robustness and cleanaup code

* Make elided lifetime explicit

* Fix tests

* Fix a boolean ops crash

* Add comment

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-08-21 23:15:36 +00:00
Dennis KobertandTimon Schelling e4dd3ce806 Desktop: Use multithreaded CEF event loop on Windows and Linux (#3076)
* Prototype multi threaded event loop

* Fix input event dispatch

* Remove dead code

* Reenable do_message_loop_work for macos targets

* Cleanup

* Review cleanup

* Remove outdated comment

* Attempt to fix texture import errors

---------

Co-authored-by: Timon Schelling <me@timon.zip>
2025-08-21 19:46:13 +00:00
Dennis KobertandTimon Schelling e56f858ced Desktop: Implement GPU accelerated offscreen rendering and improve rendering efficency (#3056)
* WIP accelerade offscreen canvas implementation

* Implement vulkan dmabuf import

* Add fps printing

* Add feature gates

* Forgot to add file

* Experimental windows support

* Cast ptr to isize

* Remove testing chrome://flags url

* Experimental macos support for texture import

* Cleanup code and improve latency / frame pacing

* Add path for importing textures on windows through dx12

* Update doc comment

* Import textures through metal on macos

* Review cleanup

---------

Co-authored-by: Timon Schelling <me@timon.zip>
2025-08-21 10:09:38 -07:00
Dennis Kobert 97978c2491 Desktop: Change feature guard to Linux instead of Unix for Wayland 2025-08-21 10:08:29 -07:00
Dennis Kobert a70c48f69a Use lyon_geom for intersection calculation of bezier segments (#3071)
* Add lyon_geom for cubic cubic intersections in he path bool crate

* Remove cubic line intersection for now
2025-08-20 13:59:11 +02:00
Dennis KobertandKeavon Chambers 7c30f6168b Improve snapping performance (#3067)
* Use lyon_geom for intersection calculation of bezier segments

* Implement approximate nearest point calculation and loosen bounding boxes

* Add algorithm explanation

* Update editor/src/messages/tool/common_functionality/snapping/layer_snapper.rs

Co-authored-by: Keavon Chambers <keavon@keavon.com>

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-08-20 10:47:58 +02:00
Dennis Kobert 437fc70500 Desktop: Fix Node Graph Overlay (#3042)
Replace usize::MAX with u32::MAX as a marker value which can be used on both native and wasm
2025-08-11 13:23:12 +00:00
Dennis Kobert 1164359c59 Actively submit graph evaluations while we are still waiting for results (#3024)
* Actively submit graph evaluations while we are still waiting for results

* Cleanup
2025-08-07 17:28:56 +02:00
Dennis Kobert d2ddf94bd0 Include graph runtime benchmarks in CI perf regression runs (#2780)
* Include graph runtime benchmarks in ci regression run

* Update benchmarking workflow

* Add render slowdown

* Fix baseline cache

* Remove benchmark compilation validation run

* Include render node in runtime benchmarks

* Collapse sections without changes

* Readd rulers between the sections

* Add review suggestions

* Rulers rule

* Fix whitespace
2025-08-07 14:32:19 +02:00
Dennis Kobert 9b8935d201 Add iai versions of the runtime benchmarks (#3016)
* Include graph runtime benchmarks in ci regression run

* Update benchmarking workflow

* Remove ci script changes
2025-08-07 00:48:25 +02:00
Dennis Kobert e003389526 Desktop: Implement missing vello overlays (#3004)
* Implement fill overlay

* Implement text rendering for overlays

* Adjust y positioning
2025-08-06 19:39:35 +00:00
Dennis Kobert ef2fab32a2 Track which document the deferred executions belong to (#3010)
* Track which document the deferred executions belong to

* Cleanup

* Fix tests

* Fix freehand tool

* Notify defer handler of graph execution updates asap
2025-08-06 21:16:02 +02:00
Dennis Kobert 309a64340b Queue messages in the frontend when they can't be processed (#3005) 2025-08-05 22:52:54 +02:00
Dennis Kobert 8b4adf4330 Desktop: Fix Vello rendering colors with doubly-applied gamma by converting to linear in the shader (#2998)
* Fix gamma issue by applying tone mapping in the shader

Vello renders it's values to an RgbaUnorm texture
but if we try to use this in the main rendering
pipeline which renders to an Srgb surface gamma
mapping is applied twice.

* Add comment explaining why we do this to the shader

* Rename variables
2025-08-05 10:08:14 +00:00
Dennis Kobert 836a110c72 Fix broken animations by removing deadlock (#2993)
* Fix animations not working by removing deadlock

* Remove log
2025-08-04 22:51:39 +00:00
Dennis Kobert 7fcdad1f88 Remove message deferral for text creation (#2978)
* Remove message deferral for text creation

* Restructure Trigger Navigation ready to not hijack the PTZ Update
2025-08-03 16:06:30 +02:00
Dennis Kobert 97bd0ebac4 Fix Vello rendering on wasm 2025-08-01 13:13:25 +02:00
Dennis KobertandKeavon Chambers f15023ef58 Fix regression with double-click in the Path tool not working (#2963)
* Fix double click in path tool not working

* Remove debug line

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-07-31 21:53:28 +00:00
Dennis KobertandTimon Schelling 08ec1d08f6 Desktop: Execute editor and node graph natively (#2955)
* Desktop: Execute editor and node graph natively

* Remove decouple execution feature

* Disable feature gate for native communication functions

* Avoid ininite message loop on an infinite canvas

* Add any lint exception

* Build evaluation loop

* Fix texture passing message

* Cleanup

* More cleanup

---------

Co-authored-by: Timon Schelling <me@timon.zip>
2025-07-31 10:26:36 +00:00
Dennis Kobert 00cfa073b8 Stub vello based overlay implementation (#2956)
* Stub vello based overlay implementation

* Fix warnings

* Don't panic on non implemented functions to allow the tests to pass

* Don't draw overlays for tests
2025-07-29 22:06:45 +02:00
Dennis Kobert 35ab266bbb Add handler for deferred execution of messages (#2951)
* Add Handler for defered execution of messages

* Cleanup

* Track graph execution id to associate messages with their corresponding execution id

* Rename ViewportReady -> NavigationReady

* Defer layer deselection
2025-07-29 01:57:11 +02:00
Dennis Kobert 2247dd9818 Desktop: Ready runtime and render node for desktop (#2952)
* Desktop: Ready runtime and render node for desktop

* Address review comments
2025-07-28 23:23:35 +00:00
Dennis KobertandTimon Schelling a52ee70e4c Desktop: Directly upload frame buffer (#2930)
* Upload frame buffer directly to gpu texture

* Disable cef GPU acceleration to prevent crashes

* Cleanup code

* Address review comments

---------

Co-authored-by: Timon Schelling <me@timon.zip>
2025-07-25 14:04:46 +02:00
Dennis Kobert f184e4aab2 Desktop: Refactor window state to not require locking (#2928)
* Replace window state with channels and improve resize performance

* Move Cef Handler into the cef module

* Reuse textures

* Test cef scheduling

* Schedule self render if texture is outdated

* Address review comments
2025-07-24 17:51:55 +00:00
Dennis Kobert 0c376d1f9b Disable preprocessor insertion of IntoNodes in the graph to avoid intermittent math node type errors (#2802)
Disable insertion of into nodes into the graph
2025-06-30 03:07:09 -07:00
Dennis KobertandKeavon Chambers 357e77077d Only compute bounding box for layers being rendered by Vello when actually used (#2771)
Only compute bounding box for vello when it is actually used

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-06-27 19:06:52 -07:00
Dennis KobertandKeavon Chambers a40a760f27 Add automatic type conversion and the node graph preprocessor (#2478)
* Prototype document network level into node insertion

* Implement Convert trait / node for places we can't use Into

* Add isize/usize and i128/u128 implementations for Convert trait

* Factor out substitutions into preprocessor crate

* Simplify layer node further

* Code review

* Mark preprocessed networks as generated

* Revert changes to layer node definition

* Skip generated flag for serialization

* Don't expand for tests

* Code review

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-06-26 16:10:14 -07:00
Dennis Kobert 76ecdc8f1b Fix the 'Upload Texture' node (#2680)
* Fix upload texture node

* Feature gate gpu node implemenations
2025-05-29 04:35:35 -07:00
Dennis KobertandKeavon Chambers 7a2144e31e Fix and reenable profiling CI action (#2632)
* Reenable profiling ci action

* Remove deprecated iai feature flag

* Remove unused import

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-05-18 20:31:15 +00:00
Dennis Kobert 9a62c1c089 Fix Poisson-disk sampling with negative space from nested subpaths (#2569)
* Fix poisson disk sampling with nested subpaths

Previously all subpaths were considered independently for the poisson disk sampling evaluation. We now check agains all subpaths which might contain the point to fix shapes with holes such as fonts with letters with holes in them

* Fix wasm demo

* Fix counting overlapping areas twice

* Rename shape variables to subpath variants
2025-04-15 13:37:20 +00:00