Git Product home page Git Product logo

blackjack's People

Contributors

bromeon avatar damenh avatar henrywconklin avatar inact1v1ty avatar setzer22 avatar trayshar avatar virtualritz avatar yjh0502 avatar zireael07 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

blackjack's Issues

Error on build: "could not find system library 'fontconfig' required by the 'servo-fontconfig-sys' crate"

I get an error running following the instructions in the readme, installing the missing dependency with sudo apt install libfontconfig-dev fixes the error. I'll put in a PR to add that to the readme, but adding here to document it and maybe you know of a way to avoid the extra step. Full error is below:

error: failed to run custom build command for `servo-fontconfig-sys v5.1.0`

Caused by:
  process didn't exit successfully: `/home/henry/workspace/blackjack/target/debug/build/servo-fontconfig-sys-2618e6ca9957a126/build-script-build` (exit status: 101)
  --- stdout
  cargo:rerun-if-env-changed=FONTCONFIG_NO_PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG_x86_64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_x86_64_unknown_linux_gnu
  cargo:rerun-if-env-changed=HOST_PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG
  cargo:rerun-if-env-changed=FONTCONFIG_STATIC
  cargo:rerun-if-env-changed=FONTCONFIG_DYNAMIC
  cargo:rerun-if-env-changed=PKG_CONFIG_ALL_STATIC
  cargo:rerun-if-env-changed=PKG_CONFIG_ALL_DYNAMIC
  cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64_unknown_linux_gnu
  cargo:rerun-if-env-changed=HOST_PKG_CONFIG_PATH
  cargo:rerun-if-env-changed=PKG_CONFIG_PATH
  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64_unknown_linux_gnu
  cargo:rerun-if-env-changed=HOST_PKG_CONFIG_LIBDIR
  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64_unknown_linux_gnu
  cargo:rerun-if-env-changed=HOST_PKG_CONFIG_SYSROOT_DIR
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR

  --- stderr
  thread 'main' panicked at '`"pkg-config" "--libs" "--cflags" "fontconfig" "fontconfig >= 2.11.1"` did not exit successfully: exit status: 1
  error: could not find system library 'fontconfig' required by the 'servo-fontconfig-sys' crate

  --- stderr
  Package fontconfig was not found in the pkg-config search path.
  Perhaps you should add the directory containing `fontconfig.pc'
  to the PKG_CONFIG_PATH environment variable
  No package 'fontconfig' found
  Package fontconfig was not found in the pkg-config search path.
  Perhaps you should add the directory containing `fontconfig.pc'
  to the PKG_CONFIG_PATH environment variable
  No package 'fontconfig' found
  ', /home/henry/.cargo/registry/src/github.com-1ecc6299db9ec823/servo-fontconfig-sys-5.1.0/build.rs:34:17

Just a question: why lua ?

I have been playing with blackjack and trying to understand its code base and I have to say that each part of it (node editor, half edge operations, polyasm compiler) is mind blowing brilliant and inspirational for lots of other use cases beside of 3d modeling. So I noticed your latest commit is a lua scripting engine. I played myself with with rhai and thought that would be the natural first choice when there are no special requirements. So why are you experimenting with lua ? Is it faster or otherwise better than your polyasm compiler ? Or do you consider to expose the lua source script AND the node graph in editable form to the user ?

mlua 0.8.3 fails to build

mlua 0.8.3 (up to 0.8.6), as specified in Cargo.lock, fails to build with gcc 13.1.1 due to a missing include in the luau version it uses.

I got to build and run blackjack by running cargo update -p mlua --precise 0.8.7 or cargo update -p mlua (0.8.9).

gcc errors index.crates.io-6f17d22bba15001f/luau0-src-0.3.8+luau545/luau/Ast/src/StringUtils.cpp: In function ‘bool Luau::equalsLower(std::string_view, std::string_view)’: index.crates.io-6f17d22bba15001f/luau0-src-0.3.8+luau545/luau/Ast/src/StringUtils.cpp:208:21: error: ‘uint8_t’ was not declared in this scope 208 | if (tolower(uint8_t(lhs[i])) != tolower(uint8_t(rhs[i]))) | ^~~~~~~ index.crates.io-6f17d22bba15001f/luau0-src-0.3.8+luau545/luau/Ast/src/StringUtils.cpp:10:1: note: ‘uint8_t’ is defined in header ‘’; did you forget to ‘#include ’? 9 | #include +++ |+#include 10 | index.crates.io-6f17d22bba15001f/luau0-src-0.3.8+luau545/luau/Ast/src/StringUtils.cpp: In function ‘size_t Luau::hashRange(const char*, size_t)’: index.crates.io-6f17d22bba15001f/luau0-src-0.3.8+luau545/luau/Ast/src/StringUtils.cpp:217:5: error: ‘uint32_t’ was not declared in this scope 217 | uint32_t hash = 2166136261; | ^~~~~~~~ index.crates.io-6f17d22bba15001f/luau0-src-0.3.8+luau545/luau/Ast/src/StringUtils.cpp:217:5: note: ‘uint32_t’ is defined in header ‘’; did you forget to ‘#include ’? index.crates.io-6f17d22bba15001f/luau0-src-0.3.8+luau545/luau/Ast/src/StringUtils.cpp:221:9: error: ‘hash’ was not declared in this scope; did you mean ‘std::hash’? 221 | hash ^= uint8_t(data[i]); | ^~~~ | std::hash In file included from /usr/include/c++/13.1.1/bits/stl_bvector.h:61, from /usr/include/c++/13.1.1/vector:67, from index.crates.io-6f17d22bba15001f/luau0-src-0.3.8+luau545/luau/Ast/include/Luau/StringUtils.h:4, from index.crates.io-6f17d22bba15001f/luau0-src-0.3.8+luau545/luau/Ast/src/StringUtils.cpp:2: /usr/include/c++/13.1.1/bits/functional_hash.h:59:12: note: ‘std::hash’ declared here 59 | struct hash; | ^~~~ index.crates.io-6f17d22bba15001f/luau0-src-0.3.8+luau545/luau/Ast/src/StringUtils.cpp:221:17: error: ‘uint8_t’ was not declared in this scope 221 | hash ^= uint8_t(data[i]); | ^~~~~~~ index.crates.io-6f17d22bba15001f/luau0-src-0.3.8+luau545/luau/Ast/src/StringUtils.cpp:221:17: note: ‘uint8_t’ is defined in header ‘’; did you forget to ‘#include ’? index.crates.io-6f17d22bba15001f/luau0-src-0.3.8+luau545/luau/Ast/src/StringUtils.cpp:225:12: error: ‘hash’ was not declared in this scope; did you mean ‘std::hash’? 225 | return hash; | ^~~~ | std::hash /usr/include/c++/13.1.1/bits/functional_hash.h:59:12: note: ‘std::hash’ declared here 59 | struct hash; | ^~~~ index.crates.io-6f17d22bba15001f/luau0-src-0.3.8+luau545/luau/Ast/src/StringUtils.cpp: In function ‘std::string Luau::escape(std::string_view, bool)’: index.crates.io-6f17d22bba15001f/luau0-src-0.3.8+luau545/luau/Ast/src/StringUtils.cpp:238:10: error: ‘uint8_t’ was not declared in this scope 238 | for (uint8_t c : s) | ^~~~~~~ index.crates.io-6f17d22bba15001f/luau0-src-0.3.8+luau545/luau/Ast/src/StringUtils.cpp:238:10: note: ‘uint8_t’ is defined in header ‘’; did you forget to ‘#include ’? index.crates.io-6f17d22bba15001f/luau0-src-0.3.8+luau545/luau/Ast/src/StringUtils.cpp:290:5: error: expected primary-expression before ‘return’ 290 | return r; | ^~~~~~ index.crates.io-6f17d22bba15001f/luau0-src-0.3.8+luau545/luau/Ast/src/StringUtils.cpp:288:6: error: expected ‘;’ before ‘return’ 288 | } | ^ | ; 289 | 290 | return r; | ~~~~~~ index.crates.io-6f17d22bba15001f/luau0-src-0.3.8+luau545/luau/Ast/src/StringUtils.cpp:290:5: error: expected primary-expression before ‘return’ 290 | return r; | ^~~~~~ index.crates.io-6f17d22bba15001f/luau0-src-0.3.8+luau545/luau/Ast/src/StringUtils.cpp:288:6: error: expected ‘)’ before ‘return’ 288 | } | ^ | ) 289 | 290 | return r; | ~~~~~~ index.crates.io-6f17d22bba15001f/luau0-src-0.3.8+luau545/luau/Ast/src/StringUtils.cpp:238:9: note: to match this ‘(’ 238 | for (uint8_t c : s) | ^ index.crates.io-6f17d22bba15001f/luau0-src-0.3.8+luau545/luau/Ast/src/StringUtils.cpp:291:1: warning: control reaches end of non-void function [-Wreturn-type] 291 | } | ^ exit status: 1

wgpu Validation Error on Startup

== Description ==

I freshly cloned the repo, and tried to run it using cargo run. However, the binary promptly panics with the following backtrace:

[ERROR wgpu::backend::direct] Handling wgpu errors as fatal by default
thread 'main' panicked at 'wgpu error: Validation Error

Caused by:
    In Device::create_render_pipeline
      note: label = `Shadow Opaque 1x`
    parent device is lost

', C:\Users\Aligorith\.cargo\registry\src\github.com-1ecc6299db9ec823\wgpu-0.12.0\src\backend\direct.rs:2273:5
stack backtrace:
   0: std::panicking::begin_panic_handler
             at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panicking.rs:517
   1: std::panicking::begin_panic_fmt
             at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panicking.rs:460
   2: wgpu::backend::direct::default_error_handler
             at C:\Users\Aligorith\.cargo\registry\src\github.com-1ecc6299db9ec823\wgpu-0.12.0\src\backend\direct.rs:2273
   3: core::ops::function::Fn::call<void (*)(enum$<wgpu::Error>),tuple$<enum$<wgpu::Error> > >
             at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\library\core\src\ops\function.rs:70
   4: alloc::boxed::impl$46::call<tuple$<enum$<wgpu::Error> >,dyn$<wgpu::UncapturedErrorHandler,assoc$<Output,tuple$<> > > >,alloc::alloc::Global>
             at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\library\alloc\src\boxed.rs:1705
   5: wgpu::backend::direct::ErrorSinkRaw::handle_error
             at C:\Users\Aligorith\.cargo\registry\src\github.com-1ecc6299db9ec823\wgpu-0.12.0\src\backend\direct.rs:2259
   6: wgpu::backend::direct::Context::handle_error<enum$<wgpu_core::pipeline::CreateRenderPipelineError> >
             at C:\Users\Aligorith\.cargo\registry\src\github.com-1ecc6299db9ec823\wgpu-0.12.0\src\backend\direct.rs:194
   7: wgpu::backend::direct::impl$3::device_create_render_pipeline
             at C:\Users\Aligorith\.cargo\registry\src\github.com-1ecc6299db9ec823\wgpu-0.12.0\src\backend\direct.rs:1314
   8: wgpu::Device::create_render_pipeline
             at C:\Users\Aligorith\.cargo\registry\src\github.com-1ecc6299db9ec823\wgpu-0.12.0\src\lib.rs:1810
   9: rend3_routine::depth::create_depth_inner
             at C:\Users\Aligorith\.cargo\git\checkouts\rend3-e03f89403de3386a\6bf09d0\rend3-routine\src\depth.rs:460
  10: rend3_routine::depth::impl$3::new::closure$0
             at C:\Users\Aligorith\.cargo\git\checkouts\rend3-e03f89403de3386a\6bf09d0\rend3-routine\src\depth.rs:384
  11: rend3_routine::depth::DepthPipelines::new
             at C:\Users\Aligorith\.cargo\git\checkouts\rend3-e03f89403de3386a\6bf09d0\rend3-routine\src\depth.rs:397
  12: rend3_routine::depth::DepthRoutine<rend3_routine::pbr::material::PbrMaterial>::new<rend3_routine::pbr::material::PbrMaterial>
             at C:\Users\Aligorith\.cargo\git\checkouts\rend3-e03f89403de3386a\6bf09d0\rend3-routine\src\depth.rs:152
  13: rend3_routine::pbr::routine::PbrRoutine::new
             at C:\Users\Aligorith\.cargo\git\checkouts\rend3-e03f89403de3386a\6bf09d0\rend3-routine\src\pbr\routine.rs:33
  14: blackjack_nodes::render_context::RenderContext::new
             at .\src\render_context.rs:54
  15: blackjack_nodes::app_window::AppWindow::new
             at .\src\app_window.rs:33
  16: blackjack_nodes::main
             at .\src\main.rs:35
  17: core::ops::function::FnOnce::call_once<void (*)(),tuple$<> >
             at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\library\core\src\ops\function.rs:227
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
error: process didn't exit successfully: `target\debug\blackjack_nodes.exe` (exit code: 101)

Any ideas on how to go about fixing this?

== System Details ==

Rust 1.57.0
Windows 10
Nvidia 1080 Ti

Crash if creating circle with zero vertices

Heya, just checking out this neat project of yours! I toyed around with circle vertice counts, hooked a bunch of 'em to a Scalar node to adjust all simultaneously. But then I slid below 3...

Steps to reproduce:

  • Create a new Scalar node with value 0
  • Create a Circle node
  • Connect the Scalar to the "num_vertices" input of the Circle node
  • Set Circle node to "active"
  • thread 'main' panicked at 'Circle construction should not fail: Cannot build meshes where polygons have less than three vertices.', blackjack_engine/src/mesh/halfedge/primitives.rs:91:14

Looks like a missing safety check somewhere, for when trying to set the value directly it won't go below 3. Also works with "Scalar Math" nodes (or anything else that outputs scalars I suppose)

Might make a PR for that since it seems fairly simple when I get around to it.

Ability to have an existing file as an input

I've been experimenting with this software for a few days and so far I've been loving it.

I ventured into how nodes are made in Lua and been wondering if there is a way to use an existing file as an input. So far I found out that "file" type is for now only meant for saving files since it opens "save" system dialog via rfd::FileDialog::new().save_file().

An ability to change a "mode" of file inputs to "save" or "open" would help me a lot because I would like to make a custom node which reads a pre-generated list of 2D positions from a file.

Investigate `lox` as an alternative to `HalfEdgeMesh`

The recently released lox crate looks like a fast and usable library for geometry processing that could potentially replace the custom HalfEdgeMesh in blackjack 👀

One particular similarity between the two data structure is the fact lox contains a concept of "mapping" that is very close in spirit to blackjack's channels. Something important to explore there would be to see how an existing library fits into the more flexible borrowing patterns provided by blackjack (i.e. channels have interior mutability and, optionally, shared ownership).

No polygon node

I wanted to extrude a polygon, but so far it's not possible (workaround: merge several boxes)

A polygon could be represented with a vector of 2D positions pretty easily.

[ui] Capitalization

Menu capitalization doesn't adhere to platform guidelines for Windows/macOS/Linux.

View graph source should be View Graph Source.

Node name capitalization is all over the place. Some nodes names use headline capitalization, others use sentence capitalization.

Labels on nodes seem to consistenly use lowercase but toggles/buttons (Active/Set active) then again use sentence capitalization.

I would open a PR with fixes but first it needs to be clarified what the rules to be enforced are. :)

I can make a suggestion if you didn't think about this yet -- HCI/UI/UX is pet peeve. :P

The name 'Blackjack' is very ungoogleable

It's not really an issue with the software itself, but if this project wants to improve it's visibility and discoverability I think it is a relevant issue to consider.

Searching by the name 'Blackjack', it is very difficult to find this project in Google and other search engines.
Searching just 'blackjack' gets results about the card game blackjack. Searching 'blackjack modelling software' finds software to model and simulate the card game blackjack. Searching 'rust blackjack' finds a number of rust crates named or related to blackjack the card game but (right now) suprisingly not this project, at least not on the first page on Google.

Godot plugin no longer works with Godot 3.5

Godot 3.5 was released today and it seems the way how the plugin exported properties to Godot inspector no longer works or something else changed. Jack Property, Show Gui and Material Slot no longer show up. With the version 3.4.5 it works fine and all properties are shown. I tried it with the plugin and libblackjack_godot.so compiled from the latest main on Arch Linux.

Use `eframe`?

I saw the app is currently not using egui's eframe.

Is there a reason for this? eframe would possibly enable web assembly/running in browser trivially and also make a bunch of platform specific integrations available effortlessly.

E.g:

  • Saving/restoring app state on close/open of app with a single:
    eframe::set_value(storage, eframe::APP_KEY, self);
  • File🠮Quit just being calling eframe::Frame::close()

etc.

Index out of bounds panic with "Extrude faces" node

Problem

The program panics with an "index out of bounds" in src/mesh/halfedge.rs:714:73.

How to reproduce

Chain the following nodes:

  • Box
  • Bevel edges 1, 4
  • Extrude face 8

In the image below, as soon as 7 is changed into 8 in the "Extrude faces" node the panic occurs.

bug

Backtrace

thread 'main' panicked at 'index out of bounds: the len is 2 but the index is 2', src/mesh/halfedge.rs:714:73
stack backtrace:
   0: rust_begin_unwind
             at /rustc/e012a191d768adeda1ee36a99ef8b92d51920154/library/std/src/panicking.rs:498:5
   1: core::panicking::panic_fmt
             at /rustc/e012a191d768adeda1ee36a99ef8b92d51920154/library/core/src/panicking.rs:107:14
   2: core::panicking::panic_bounds_check
             at /rustc/e012a191d768adeda1ee36a99ef8b92d51920154/library/core/src/panicking.rs:75:5
   3: <usize as core::slice::index::SliceIndex<[T]>>::index
             at /rustc/e012a191d768adeda1ee36a99ef8b92d51920154/library/core/src/slice/index.rs:189:10
   4: core::slice::index::<impl core::ops::index::Index<I> for [T]>::index
             at /rustc/e012a191d768adeda1ee36a99ef8b92d51920154/library/core/src/slice/index.rs:15:9
   5: <smallvec::SmallVec<A> as core::ops::index::Index<I>>::index
             at /home/.../.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.8.0/src/lib.rs:1703:10
   6: blackjack_nodes::mesh::halfedge::HalfEdgeMesh::face_normal
             at ./src/mesh/halfedge.rs:714:73
   7: blackjack_nodes::mesh::halfedge::edit_ops::extrude_faces
             at ./src/mesh/halfedge/edit_ops.rs:871:24
   8: blackjack_nodes::graph::poly_asm::PolyAsmProgram::execute_instruction
             at ./src/graph/poly_asm.rs:285:17
   9: blackjack_nodes::graph::poly_asm::PolyAsmProgram::execute
             at ./src/graph/poly_asm.rs:332:13
  10: blackjack_nodes::app_window::AppWindow::compile_and_execute_program
             at ./src/app_window.rs:154:20
  11: blackjack_nodes::app_window::AppWindow::on_main_events_cleared
             at ./src/app_window.rs:199:32
  12: blackjack_nodes::app_window::AppWindow::run_app::{{closure}}
             at ./src/app_window.rs:255:45
  13: winit::platform_impl::platform::sticky_exit_callback
             at /home/.../.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.26.1/src/platform_impl/linux/mod.rs:753:5
  14: winit::platform_impl::platform::x11::EventLoop<T>::run_return
             at /home/.../.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.26.1/src/platform_impl/linux/x11/mod.rs:293:17
  15: winit::platform_impl::platform::x11::EventLoop<T>::run
             at /home/.../.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.26.1/src/platform_impl/linux/x11/mod.rs:392:9
  16: winit::platform_impl::platform::EventLoop<T>::run
             at /home/.../.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.26.1/src/platform_impl/linux/mod.rs:669:56
  17: winit::event_loop::EventLoop<T>::run
             at /home/.../.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.26.1/src/event_loop.rs:154:9
  18: blackjack_nodes::app_window::AppWindow::run_app
             at ./src/app_window.rs:229:9
  19: blackjack_nodes::main
             at ./src/main.rs:33:5
  20: core::ops::function::FnOnce::call_once
             at /rustc/e012a191d768adeda1ee36a99ef8b92d51920154/library/core/src/ops/function.rs:227:5

Error: `free(): double free detected in tcache 2`

Hi There, when i try to run the app as described in the readme, it throws:

$ RUST_BACKTRACE=1 cargo run --bin blackjack_ui
    Finished dev [unoptimized + debuginfo] target(s) in 0.13s
     Running `target/debug/blackjack_ui`
free(): double free detected in tcache 2
Aborted (core dumped)

Do you have any tip how should i fix this? This project looks amazing, and i'd love to try it out!

Ubuntu 22.04
rustc 1.64.0 (a55dd71d5 2022-09-19)

Clicking things doesn't work.

First, awesome project. Congrats.

When I click any UI elements, I get the mouse down style (e.g. on buttons) but it has no effect. Pressing Enter works, if the element is selected (iterating over them with Tab works).

I'm on Sway (wlroots-based Wayland compositor).

Availability of Graph Node Editor

Hi!

Wow, this project looks really cool! Great work

I've been on the lookout for a graph node editor, similar to the one implemented in this project. It is intended for a server routing network traffic for stage lighting protocols.

Is there any way of re-using the graph editor from this project? Is there any chance that the graph editor might be separated into its own crate in the future?

Errors when running `cargo run` on MacOS

Hallo! After I run everything with git (including LFS), and run cargo run, I get this error:

   Compiling blackjack_nodes v0.1.0 (/Users/will/blackjack/blackjack)
error[E0053]: method `source` has an incompatible type for trait
 --> src/lua_engine/lua_stdlib/lua_node_libraries.rs:8:25
  |
8 |     fn source(&self) -> &[u8] {
  |                         ^^^^^
  |                         |
  |                         expected enum `std::result::Result`, found `&[u8]`
  |                         help: change the output type to match the trait: `std::result::Result<Cow<'_, [u8]>, std::io::Error>`
  |
  = note: expected fn pointer `fn(&LuaSourceFile) -> std::result::Result<Cow<'_, [u8]>, std::io::Error>`
             found fn pointer `fn(&LuaSourceFile) -> &[u8]`

error[E0053]: method `name` has an incompatible type for trait
  --> src/lua_engine/lua_stdlib/lua_node_libraries.rs:12:23
   |
12 |     fn name(&self) -> Option<std::ffi::CString> {
   |                       ^^^^^^^^^^^^^^^^^^^^^^^^^
   |                       |
   |                       expected struct `std::string::String`, found struct `CString`
   |                       help: change the output type to match the trait: `std::option::Option<std::string::String>`
   |
   = note: expected fn pointer `fn(&LuaSourceFile) -> std::option::Option<std::string::String>`
              found fn pointer `fn(&LuaSourceFile) -> std::option::Option<CString>`

error[E0277]: the trait bound `&str: mlua::AsChunk<'_>` is not satisfied
    --> src/lua_engine.rs:27:14
     |
27   |     lua.load(&lua_program).exec()?;
     |         ---- -^^^^^^^^^^^
     |         |    |
     |         |    the trait `mlua::AsChunk<'_>` is not implemented for `&str`
     |         |    help: consider removing the leading `&`-reference
     |         required by a bound introduced by this call
     |
     = help: the following implementations were found:
               <str as mlua::AsChunk<'lua>>
               <std::string::String as mlua::AsChunk<'lua>>
note: required by a bound in `mlua::Lua::load`
    --> /Users/will/.cargo/registry/src/github.com-1ecc6299db9ec823/mlua-0.8.0-beta.4/src/lua.rs:1360:12
     |
1360 |         S: AsChunk<'lua> + ?Sized,
     |            ^^^^^^^^^^^^^ required by this bound in `mlua::Lua::load`

Some errors have detailed explanations: E0053, E0277.
For more information about an error, try `rustc --explain E0053`.
error: could not compile `blackjack_nodes` due to 3 previous errors

What is the problem, how can I fix it?

"Engines of choice"?

Which engines are going to be supported? I must admit I'm intrigued, as the README makes it sound like we'll be able to change parameters in-game, instead of exporting static assets...

Array inputs

Some nodes like "Merge meshes" would really benefit from having just one input array (in this case an array of meshes). Blender geometry nodes have this feature and indicate it with a "pill" slot.
image

Flow control nodes (mostly for game engine integration)

Things like

  • do the following nodes X times
  • execute the next node(s) only if boolean input is true/if scalar input is more than Y etc.

especially the second one would allow using the same blackjack file for e.g. buildings with optional parts like overhangs, roofs, vents (probably in conjunction with importing from other file #53 or subgraphs)

Resuse of halfedge implementation

First of all: Thanks for the amazing work with this tool I very much enjoyed reading through the code of this repo & learned a lot!

I am currently working on a small procedural mesh generation library in rust, mainly for use in my own game (using bevy) but with plans of making it general purpose.

I would love to use a simplified version of your halfedge mesh implementation (Basically stripped of the Lua stuff and probably without channels for now) as a starting point since it is the best implementation of a halfedge structure and essential mesh operations that I could find.

Do you see any issues with that?
I think in terms of license it should be fine as long as I keep the same license for the files that contain your modified code.

Anyways keep up the great work 😊

Undo/redo system

I think it is the time for blackjack to have an undo/redo system. I really believe that an undo/redo system should be in the core architecture part of a program/engine.

The reason behind such belief is the I have an example of thinking about such system from the start vs adding it "somehow" later: Unity and Ventuz Designer. You probably know Unity - a robust and popular game engine. Ventuz is a software mainly for interactive installations and some related artsy stuff.

Both tools have user code in C# (so they are able to diff structs at runtime and etc). There are some differences - Ventuz is written completely in C#, without C++ core, and mainly uses graphs and not code (just like blackjack with Lua being behind the scenes most of the time except "code" nodes).

Unity has the undo/redo system integrated in the inner core of the language - it is closely coupled with the serialization system. Even when you create new editor windows you just need to tell it "I will do some undoable things in this func, track it as 'Undo My Super Cool Action'" - which is really nice. See example here.

Ventuz on the other hand seems to have neglected the importance of such a system. As a result the system doesn't track some actions and you never know whether it will for the next thing you do. So, you can't rely on it when you work - maybe you will do an important mistake exactly when it fails to help you. Most of the time when we worked with Ventuz we dropped to the pattern of "save the project at a state you like", "do some things without pressing Ctrl-S", "save the project only when you like its state again". I personally think this is a very important usability concern.

That said, I think that it is time to integrate undo/redo into blackjack, tying it to core stuff like parameters and node state (position, connections) while we can do it easily.

I am willing to volunteer and work on this task, but because it involves messing architecture I need your collaboration and advice @setzer22 to keep it in your vision. I plan to split it in several PRs as we will come up with the way to implement it. Sadly I have good experience only with Unity's system, but I think that it will be enough to create blackjack one with your vision.

Crash when opening box.bjk after stylised_sword.bjk

Opening box.bjk when stylised_sword.bjk or tp_cutter.bjk is open reproducibly results in a crash. Also when opening tp_cutter.bjk while stylised_sword.bjk is open. This is not the case with other combinations or when done the other way around.

This is with an updated mlua #90

$ RUST_BACKTRACE=full cargo run --bin blackjack_ui
    Finished dev [unoptimized + debuginfo] target(s) in 0.25s
     Running `target/debug/blackjack_ui`
MESA-INTEL: warning: Ivy Bridge Vulkan support is incomplete
[Engine] Loading new node definition for MakeIcosahedron
[Engine] Loading new node definition for MakeCatenary
[Engine] Loading new node definition for MakeGrid
[Engine] Loading new node definition for MakeLine
[Engine] Loading new node definition for MakeCylinder
[Engine] Loading new node definition for MakeComment
[Engine] Loading new node definition for MakeLineFromPoints
[Engine] Loading new node definition for MakeCode
[Engine] Loading new node definition for MakeCone
[Engine] Loading new node definition for MakeCircle
[Engine] Loading new node definition for MakeBox
[Engine] Loading new node definition for MakeUVSphere
[Engine] Loading new node definition for MakeTerrain
[Engine] Loading new node definition for MakePolygon
[Engine] Loading new node definition for MakeQuad
[Engine] Loading new node definition for CollapseEdge
[Engine] Loading new node definition for Transform
[Engine] Loading new node definition for BridgeLoops
[Engine] Loading new node definition for MakeQuadFace
[Engine] Loading new node definition for SetMaterial
[Engine] Loading new node definition for SubdivideEdge
[Engine] Loading new node definition for Subdivide
[Engine] Loading new node definition for PointCloud
[Engine] Loading new node definition for ExtrudeFaces
[Engine] Loading new node definition for ChamferVertices
[Engine] Loading new node definition for ExtrudeAlongCurve
[Engine] Loading new node definition for MergeMeshes
[Engine] Loading new node definition for EditGeometry
[Engine] Loading new node definition for RandomizeSize
[Engine] Loading new node definition for ResampleCurve
[Engine] Loading new node definition for CopyToPoints
[Engine] Loading new node definition for EditChannels
[Engine] Loading new node definition for MakeGroup
[Engine] Loading new node definition for SetNormals
[Engine] Loading new node definition for VertexAttribTransfer
[Engine] Loading new node definition for SetFullRangeUVs
[Engine] Loading new node definition for BevelEdges
[Engine] Loading new node definition for CutFace
[Engine] Loading new node definition for ScalarMath
[Engine] Loading new node definition for MakeScalar
[Engine] Loading new node definition for MakeVector
[Engine] Loading new node definition for VectorMath
[Engine] Loading new node definition for ImportObj
[Engine] Loading new node definition for ExportObj
[Engine] Loading new node definition for Point
[Engine] Loading new node definition for Turntable
Error validating WebGPU: Validation Error

Caused by:
    In a RenderPass
      note: encoder = `<CommandBuffer-(7, 221, Vulkan)>`
    In a set_scissor_rect command
    Scissor Rect { x: 1904, y: 215, w: 1, h: 16 } is not contained in the render target Extent3d { width: 1904, height: 556, depth_or_array_layers: 1 }
.
thread 'main' panicked at 'invalid SecondaryMap key used', blackjack_ui/src/application/gizmo_ui.rs:153:27
stack backtrace:
   0:     0x55810fdbfcba - std::backtrace_rs::backtrace::libunwind::trace::hb8898e3505dc8f1f
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:     0x55810fdbfcba - std::backtrace_rs::backtrace::trace_unsynchronized::h243457aa160ba9bf
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x55810fdbfcba - std::sys_common::backtrace::_print_fmt::hc6dface9538a1157
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/sys_common/backtrace.rs:65:5
   3:     0x55810fdbfcba - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hc206efb5e9809583
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x55810fde999f - core::fmt::write::hd8947e10fafbf06f
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/core/src/fmt/mod.rs:1254:17
   5:     0x55810fdbbaf5 - std::io::Write::write_fmt::ha5672c0ddfe75ddf
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/io/mod.rs:1698:15
   6:     0x55810fdbfa85 - std::sys_common::backtrace::_print::h4aec0eb0d7c5e839
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/sys_common/backtrace.rs:47:5
   7:     0x55810fdbfa85 - std::sys_common::backtrace::print::h7f32d4a37c5abf06
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/sys_common/backtrace.rs:34:9
   8:     0x55810fdc112e - std::panicking::default_hook::{{closure}}::h5086172d4324aebb
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/panicking.rs:269:22
   9:     0x55810fdc0ed5 - std::panicking::default_hook::h3a4e4a92cb67fdca
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/panicking.rs:288:9
  10:     0x55810fdc168e - std::panicking::rust_panic_with_hook::h3624791a230b2318
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/panicking.rs:691:13
  11:     0x55810f19633a - std::panicking::begin_panic::{{closure}}::ha2b2ef5f781a7436
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/panicking.rs:611:9
  12:     0x55810f49b9dd - std::sys_common::backtrace::__rust_end_short_backtrace::h057ce7c27d75fe01
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/sys_common/backtrace.rs:150:18
  13:     0x55810f196277 - std::panicking::begin_panic::h3c74f35bca3282dc
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/panicking.rs:610:12
  14:     0x55810ec24772 - <slotmap::secondary::SecondaryMap<K,V> as core::ops::index::Index<K>>::index::hd8dcf51deb40aecd
                               at /home/jo/.cargo/registry/src/index.crates.io-6f17d22bba15001f/slotmap-1.0.6/src/secondary.rs:865:21
  15:     0x55810edc7746 - <blackjack_ui::graph::graph_interop::NodeMapping as core::ops::index::Index<egui_node_graph::id_type::NodeId>>::index::h634e5be7798c62e8
                               at /home/jo/repos/blackjack/blackjack_ui/src/graph/graph_interop.rs:41:10
  16:     0x55810eb8d8d7 - blackjack_ui::application::gizmo_ui::UiNodeGizmoStates::to_bjk_data::hd48e6c4fc6d56407
                               at /home/jo/repos/blackjack/blackjack_ui/src/application/gizmo_ui.rs:153:27
  17:     0x55810ebe64d9 - blackjack_ui::application::application_context::ApplicationContext::run_active_node::hf26687f952acb53d
                               at /home/jo/repos/blackjack/blackjack_ui/src/application/application_context.rs:252:26
  18:     0x55810ebe4412 - blackjack_ui::application::application_context::ApplicationContext::update::hca728508ff83f903
                               at /home/jo/repos/blackjack/blackjack_ui/src/application/application_context.rs:86:27
  19:     0x55810ecd07a7 - blackjack_ui::application::RootViewport::update::hb92cf6112bf729b1
                               at /home/jo/repos/blackjack/blackjack_ui/src/application.rs:266:24
  20:     0x55810ec0ffc7 - blackjack_ui::app_window::AppWindow::on_main_events_cleared::hc2348ff7230887af
                               at /home/jo/repos/blackjack/blackjack_ui/src/app_window.rs:66:9
  21:     0x55810ec19170 - blackjack_ui::app_window::AppWindow::run_app::{{closure}}::hbe81fef579e57cbc
                               at /home/jo/repos/blackjack/blackjack_ui/src/app_window.rs:102:45
  22:     0x55810ebf6bf1 - winit::platform_impl::platform::sticky_exit_callback::h65c6bbe20f9a38c1
                               at /home/jo/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.27.3/src/platform_impl/linux/mod.rs:849:9
  23:     0x55810ed33b3e - winit::platform_impl::platform::x11::EventLoop<T>::run_return::single_iteration::h06b681d886d3d67c
                               at /home/jo/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.27.3/src/platform_impl/linux/x11/mod.rs:363:17
  24:     0x55810ed3479a - winit::platform_impl::platform::x11::EventLoop<T>::run_return::hacce8c1ffc37977e
                               at /home/jo/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.27.3/src/platform_impl/linux/x11/mod.rs:488:27
  25:     0x55810ed36eed - winit::platform_impl::platform::x11::EventLoop<T>::run::hf08a2b31b2770721
                               at /home/jo/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.27.3/src/platform_impl/linux/x11/mod.rs:503:25
  26:     0x55810ebf6a4c - winit::platform_impl::platform::EventLoop<T>::run::he3103f7932894a0b
                               at /home/jo/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.27.3/src/platform_impl/linux/mod.rs:755:56
  27:     0x55810ec0f9d7 - winit::event_loop::EventLoop<T>::run::h73287fe3b075faef
                               at /home/jo/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.27.3/src/event_loop.rs:278:9
  28:     0x55810ec101a4 - blackjack_ui::app_window::AppWindow::run_app::h31e139ac08511839
                               at /home/jo/repos/blackjack/blackjack_ui/src/app_window.rs:83:9
  29:     0x55810ec81024 - blackjack_ui::main::h6bf83a8a2cd2b8e3
                               at /home/jo/repos/blackjack/blackjack_ui/src/main.rs:53:5
  30:     0x55810eb1323b - core::ops::function::FnOnce::call_once::he3c7dbe827abbf3b
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/core/src/ops/function.rs:250:5
  31:     0x55810ebfe0be - std::sys_common::backtrace::__rust_begin_short_backtrace::hb785f6a3afb66116
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/sys_common/backtrace.rs:134:18
  32:     0x55810ec0ef71 - std::rt::lang_start::{{closure}}::heb21c2615d4ee59d
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/rt.rs:166:18
  33:     0x55810fdb617e - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::h6ea70aac89bcbfc2
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/core/src/ops/function.rs:287:13
  34:     0x55810fdb617e - std::panicking::try::do_call::h6b8e1cc0665d44a1
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/panicking.rs:485:40
  35:     0x55810fdb617e - std::panicking::try::he26d924cdd279f41
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/panicking.rs:449:19
  36:     0x55810fdb617e - std::panic::catch_unwind::he843f41d28b96510
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/panic.rs:140:14
  37:     0x55810fdb617e - std::rt::lang_start_internal::{{closure}}::hca84819b21d2f715
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/rt.rs:148:48
  38:     0x55810fdb617e - std::panicking::try::do_call::h8969cfbf8175ea1b
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/panicking.rs:485:40
  39:     0x55810fdb617e - std::panicking::try::h39a32be9f6785bb6
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/panicking.rs:449:19
  40:     0x55810fdb617e - std::panic::catch_unwind::h4490a7101c4a8db6
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/panic.rs:140:14
  41:     0x55810fdb617e - std::rt::lang_start_internal::ha1b36c6d32c2fec0
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/rt.rs:148:20
  42:     0x55810ec0ef4a - std::rt::lang_start::h844716d34156200b
                               at /rustc/16ec1c0a8092cf54bc59d0ea9b10d8b50aed42be/library/std/src/rt.rs:165:17
  43:     0x55810ec810ce - main
  44:     0x7f53b92fd850 - <unknown>
  45:     0x7f53b92fd90a - __libc_start_main
  46:     0x55810eae1945 - _start
  47:                0x0 - <unknown>

Use default GPU / Segfault when starting

Hello,

I have a Linux Mint 20.3 laptop (from 2014) with the following integrated & discrete GPUs:

Graphics:  Device-1: Intel 4th Gen Core Processor Integrated Graphics vendor: Micro-Star MSI 
           driver: i915 v: kernel bus ID: 00:02.0 chip ID: 8086:0416 
           Device-2: NVIDIA GK106M [GeForce GTX 765M] vendor: Micro-Star MSI driver: nvidia 
           v: 390.157 bus ID: 01:00.0 chip ID: 10de:11e2 
           Display: x11 server: X.Org 1.20.13 driver: modesetting,nvidia 
           unloaded: fbdev,nouveau,vesa resolution: 1920x1080~60Hz 
           OpenGL: renderer: GeForce GTX 765M/PCIe/SSE2 v: 4.6.0 NVIDIA 390.157 direct render: Yes 

The nvidia discrete GPU is clearly the default one as confirmed by the nvidia prime control panel and all games starting with it. I also just checked on the Linux Mint forums and it looks like nothing wrong with my OS setup or GPU config.

However, when starting blackjack, it segfaults immediately with the following error: MESA-INTEL: warning: Haswell Vulkan support is incomplete. Haswell is an Intel thing, so I'm guessing blackjack starts using my CPU's integrated graphics.

But the weirdest about that is that the backtrace (from gdb) mentions an nvidia shared object in the last stack frames before crash:

gdb log
(gdb) run
Starting program: ./target/debug/blackjack_ui 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
MESA-INTEL: warning: Haswell Vulkan support is incomplete
[New Thread 0x7fffea928700 (LWP 5108)]

Thread 1 "blackjack_ui" received signal SIGSEGV, Segmentation fault.
0x00007ffff3cfadf9 in ?? () from /lib/x86_64-linux-gnu/libnvidia-glcore.so.390.157
(gdb) bt
#0  0x00007ffff3cfadf9 in ?? () from /lib/x86_64-linux-gnu/libnvidia-glcore.so.390.157
#1  0x00007ffff3cfbc45 in ?? () from /lib/x86_64-linux-gnu/libnvidia-glcore.so.390.157
#2  0x00007ffff3d004df in ?? () from /lib/x86_64-linux-gnu/libnvidia-glcore.so.390.157
#3  0x00007ffff3da4cd9 in ?? () from /lib/x86_64-linux-gnu/libnvidia-glcore.so.390.157
#4  0x00007ffff3daee1d in ?? () from /lib/x86_64-linux-gnu/libnvidia-glcore.so.390.157
#5  0x00007ffff3daefef in ?? () from /lib/x86_64-linux-gnu/libnvidia-glcore.so.390.157
#6  0x00007ffff3daf1b2 in ?? () from /lib/x86_64-linux-gnu/libnvidia-glcore.so.390.157
#7  0x00007ffff3daf34a in ?? () from /lib/x86_64-linux-gnu/libnvidia-glcore.so.390.157
#8  0x00007ffff3cafaf7 in ?? () from /lib/x86_64-linux-gnu/libnvidia-glcore.so.390.157
#9  0x00007ffff3cb03c7 in ?? () from /lib/x86_64-linux-gnu/libnvidia-glcore.so.390.157
#10 0x00007ffff47e12a6 in ?? () from /lib/x86_64-linux-gnu/libnvidia-glcore.so.390.157
#11 0x00007ffff47f3b61 in ?? () from /lib/x86_64-linux-gnu/libnvidia-glcore.so.390.157
#12 0x00007ffff47f62fa in ?? () from /lib/x86_64-linux-gnu/libnvidia-glcore.so.390.157
#13 0x00007ffff4d82627 in ?? () from /lib/x86_64-linux-gnu/libnvidia-glcore.so.390.157
#14 0x00007ffff4d82a08 in ?? () from /lib/x86_64-linux-gnu/libnvidia-glcore.so.390.157
#15 0x00007ffff4d83bdd in ?? () from /lib/x86_64-linux-gnu/libnvidia-glcore.so.390.157
#16 0x00007ffff4d83c91 in ?? () from /lib/x86_64-linux-gnu/libnvidia-glcore.so.390.157
#17 0x00007ffff4d87431 in ?? () from /lib/x86_64-linux-gnu/libnvidia-glcore.so.390.157
#18 0x0000555556978038 in ash::device::Device::create_graphics_pipelines (self=0x555557823ff0, pipeline_cache=..., create_infos=..., allocation_callbacks=...) at src/device.rs:1963
#19 0x0000555556920a9a in wgpu_hal::vulkan::device::<impl wgpu_hal::Device<wgpu_hal::vulkan::Api> for wgpu_hal::vulkan::Device>::create_render_pipeline (self=0x555557cfd750, desc=0x7fffffff3ca8) at src/vulkan/device.rs:1660
#20 0x000055555680d05d in wgpu_core::device::Device<A>::create_render_pipeline (self=0x555557cfd750, self_id=..., adapter=<optimised out>, desc=0x7fffffff4e30, implicit_context=..., hub=<optimised out>, token=<optimised out>) at /home/edgar/.cargo/registry/src/github.com-1ecc6299db9ec823/wgpu-core-0.13.2/src/device/mod.rs:2839
#21 0x00005555568993f3 in wgpu_core::device::<impl wgpu_core::hub::Global<G>>::device_create_render_pipeline (self=0x55555780ac60, device_id=..., desc=0x0, id_in=..., implicit_pipeline_ids=...) at /home/edgar/.cargo/registry/src/github.com-1ecc6299db9ec823/wgpu-core-0.13.2/src/device/mod.rs:4704
#22 0x000055555682e701 in <wgpu::backend::direct::Context as wgpu::Context>::device_create_render_pipeline (self=0x55555780ac60, device=0x555557827fe8, desc=<optimised out>) at src/backend/direct.rs:1389
#23 0x0000555556796d3a in wgpu::Device::create_render_pipeline (self=<optimised out>, desc=0x7fffffff1500) at src/lib.rs:2110
#24 0x0000555556644a4b in rend3_routine::depth::create_depth_inner (renderer=0x555557ebc500, samples=rend3_types::SampleCount::One, ty=rend3_routine::depth::DepthPassType::Shadow, pll=0x7fffffff5408, vert=0x7fffffff5380, frag=0x7fffffff53e8, name=..., unclipped_depth_supported=<optimised out>) at src/depth.rs:474
#25 rend3_routine::depth::DepthPipelines<M>::new::{{closure}} (name=..., ty=rend3_routine::depth::DepthPassType::Shadow, pll=0x7fffffff5408, frag=0x7fffffff53e8, samples=rend3_types::SampleCount::One) at src/depth.rs:389
#26 rend3_routine::depth::DepthPipelines<M>::new (renderer=0x555557ebc500, data_core=<optimised out>, interfaces=<optimised out>, per_material_bgl=0x7fffffff5540, abi_bgl=<optimised out>, unclipped_depth_supported=false) at src/depth.rs:410
#27 rend3_routine::depth::DepthRoutine<M>::new (renderer=0x555557ebc500, data_core=<optimised out>, interfaces=<optimised out>, per_material=0x7fffffff5540, unclipped_depth_supported=false) at src/depth.rs:151
#28 0x000055555666c8b7 in rend3_routine::pbr::routine::PbrRoutine::new (renderer=0x555557ebc500, data_core=0x555557ebc510, interfaces=0x7fffffff5cd8) at src/pbr/routine.rs:33
#29 0x000055555590c1ac in blackjack_ui::render_context::RenderContext::new (window=0x7fffffff66f8) at blackjack_ui/src/render_context.rs:82
#30 0x0000555555843b21 in blackjack_ui::app_window::AppWindow::new () at blackjack_ui/src/app_window.rs:42
#31 0x00005555557d25eb in blackjack_ui::main () at blackjack_ui/src/main.rs:52

I'm sorry if this is an XY problem. I have no idea if the issue has to do with Haswell or nvidia due to both being mentioned before crash. In the first case, is it normal that my integrated GPU is used when it isn't the default. In the second case, how can I help you diagnose the crash?

Quick personal research

Zoom speed on MacOS

Just a small improvement would be to reduce the speed of the zoom speed, it is very difficult to be precise as it is very fast to zoom and unzoom.

Originally posted by @Kerollmops in #7 (comment)

Extrude Along Curve issues

First off, thank you for this project!

I wrote a custom "Helix" node in Lua, that looks like this:
helix-2023-10-08_22-12-27

When I attempt to extrude a quad along the helix curve using "Extrude Along Curve", I get this:
extrude-along-curve-2023-10-08_22-12-47

I'm a Rust newbie so I haven't dug into the code yet, but just wanted to report it here to keep track of the issue.

Here is the custom helix.lua code (placed in the blackjack_lua/run directory) I wrote in case you want to try it out:

local P = require("params")
local NodeLibrary = require("node_library")

NodeLibrary:addNodes({
    Helix = {
        label = "Helix",
        op = function(inputs)
	    local points = {}
	    -- Generate the points
	    local max_angle = inputs.turns * 2.0 * math.pi
	    local num_steps = math.ceil(inputs.turns * inputs.segments)

	    if num_steps < 1 then
                return { out_mesh = Primitives.line_from_points(points) }
	    end

	    local angle_delta = max_angle / num_steps
	    local delta_y = inputs.size.y * inputs.turns / num_steps
	    local direction = inputs.direction == "Clockwise" and -1 or 1
	    local start_angle = math.pi * inputs.start_angle / 180
	    for i = 0, num_steps do
	    	local angle = direction * (start_angle + i * angle_delta)
	        local x = inputs.pos.x + inputs.size.x * math.cos(angle)
	        local z = inputs.pos.z + inputs.size.z * math.sin(angle)
	        local y = inputs.pos.y + i * delta_y
		table.insert(points, vector(x, y, z))
	    end
            return { out_mesh = Primitives.line_from_points(points) }
        end,
        inputs = {
            P.v3("pos", vector(0, 0, 0)),
            P.v3("size", vector(1, 1, 1)),
            P.scalar("start_angle", { default = 0, min = 0, soft_max = 360 }),
            P.scalar("turns", { default = 1, min = 0, soft_max = 10 }),
            P.scalar_int("segments", { default = 36, min = 1, soft_max = 360 }),
	    P.enum("direction", { "Clockwise", "Counter-Clockwise"}, 0),
        },
        outputs = {
            P.mesh("out_mesh"),
        },
        returns = "out_mesh",
    },
})

More geometry primitives

A few common shapes are bit tricky to create with the existing nodes, it would be nice to have more built-in geometry primitives. Matching the primitives in Blender would be a good starting point.

  • Cylinder
  • Cone/truncated cone
  • Filled in circle/regular N-gon (possibly as an option on the Circle node)
  • Catenary curves (for hanging ropes/wires)
  • Icosphere
  • Capsule

Panic on start when loading texture

I cloned the respository, compiled blackjack using cargo build --release and attempted to run it. I got this error:

MESA-INTEL: warning: Performance support disabled, consider sysctl dev.i915.perf_stream_paranoid=0

thread 'main' panicked at 'loading texture E8DEE1_B5A6AA_CCBCC1_C4BBBC: Unsupported(UnsupportedError { format: Unknown, kind: Format(Unknown) })', src/rendergraph/face_routine.rs:133:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

This may be an issue with wgpu, but I highly doubt it as I've used & written a lot of other wgpu applications which don't suffer from any issues.

System information:

OS: Linux
GPU: Intel UHD Graphics 620

Add web version

Since wgpu/rend3 both have a webgl2 mode, it would be cool to have a web build of this to use. I don't really like downloading things because of space issues, so this would make this tool more accessible to me

Impossible to zoom and hard to trigger click

I tried blackjack on my MacBook Pro 13' M1 and found out that it was impossible to zoom by using the "roulette wheel" i.e. on my trackpad and pretty hard to trigger the right-click menu I found this related issue #1 but it doesn't seem to be entirely fixed.

Notification system

Sometimes it is necessary to give a message to the user when something goes wrong (or succeeds). A good example is the "Export OBJ" node, which currently doesn't do any indication of either success or failure.

In most apps this is done by a notification system that reports messages in bubbles. The bubbles stay alive for a certain time and show the message. The user should be able to click and dismiss the bubble.

A good example of what is needed can be seen here:
image

This could also become a standalone helper crate for other egui apps

Some usability issues

  1. Can't figure out how to use bridge loops even on a simple cube, every edge I try ends up with a traceback saying it's not in a boundary
  2. Can't subdivide/split a face or an edge, just the whole mesh (EDIT: I see we have cut_edge and divide_face implemented but they're not exposed to the UI) EDIT: The latter is now done in a PR I sent

3) Mesh view can't be zoomed or at least I haven't figured out to do so EDIT: seems that it's because I don't have a mouse, just a touchpad, so no mousewheel events here :P EDIT: solved, dummy me forgot how to do scrolling on a touchpad

  1. Can't click on an edge to get its number/click on spreadsheet number to highlight edge - the only way I can figure out which is which for something more complex is the debug pane
  2. Related, would be nice to be able to drag from spreadsheet to node to fill in the input box
  3. Can't copy graph nodes

unknown feature `proc_macro_span_shrink`

win10
msvc2019
rust nightly 1.73

error[E0635]: unknown feature proc_macro_span_shrink
--> C:\Users\Administrator.cargo\registry\src\mirrors.ustc.edu.cn-12df342d903acd47\proc-macro2-1.0.46\src\lib.rs:92:30
|
92 | feature(proc_macro_span, proc_macro_span_shrink)
| ^^^^^^^^^^^^^^^^^^^^^^

For more information about this error, try rustc --explain E0635.
error: could not compile proc-macro2 (lib) due to previous error
warning: build failed, waiting for other jobs to finish...

Minimizing window results in crash on Windows 10/11

Abridged error message:

thread 'main' panicked at 'Error in Surface::configure: Both `Surface` width and height must be non-zero. Wait to recreate the `Surface` until the window has non-zero area.'
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Remove inactive branches

There is a lot of feature/fix branches in this project and it's a bit confusing to tell which of them are active and which have already been merged. It would be nice if those were removed after they are merged to main.

"Import Jack" node

I really love the latest work that has been done on Blackjack. I think it's currently missing an ability to import one blackjack project as a node to a different blackjack project. I think the most straightforward approach would be to use Jack files and expose their promoted parameters as inputs.

Since it introduces dependencies it would be cool if it was then possible to export Jack files which would bundle in all other Jack files which were imported. Or maybe include relative paths to those Jack files.

Improvements for 'Edge divide'

Originally a comment as a potential improvement to #66

We could extend this to match Houdini's "Edge divide" node and make it usable for more use cases: https://www.sidefx.com/docs/houdini/nodes/sop/edgedivide.html

In that case we'd need:

  • Allowing to select multiple edges
    Instead of calling .next() and using only the first edge, we could loop over all the edges and then run the operation for each of them.

  • Allowing a configurable number of divisions
    This one is a bit trickier, but can be implemented without delving into the HalfEdgeMesh internals. We would need to run the divide edge operation successively in a loop N times. The first halfedge would be obtained by the selection, and the next ones can be obtained by the VertexId that divide_edge returns using conn.at_vertex(v).halfedge().try_end()?. That halfedge is guaranteed to be the second half of the split. Here, there is also an open question of what to do with the interp parameter in such cases thinking. I would expect that if we make more than one division, the interp parameter is ignored and instead divisions become uniform. thinking

Proof of concept of using Godot for UI

This is but a proof of concept made during the weekend in Godot 3.5.

  • uses GDScript instead of GDNative
  • uses a different data structure
  • the layout/format of the GUI is slightly different (e.g. the spreadsheet is a popup panel instead of a constant panel at the top, the displayed data is not the IDs but the positions, the model is only shown after clicking a button - this is to gain more space for the graph itself)
  • basically a MRP, only two nodes are really implemented (a quad and a transform)
  • only one input and one output work for now

When making the PRs, I found that even for a little PR that amounted to adding a wrapper function in Rust and editing the Lua file, compilation was significantly slow on my Dell Vostro 5581 (enough that I'd tab away to do something else while waiting for it to be done - something around 10, maybe 15 seconds)
I strongly suspect this is due to the amount of dependencies, when I first ran the project the part of getting and compiling all the crates was really long, I think the number quoted was around 150-ish
Using Godot for the GUI would significantly cut down on them (wgpu, egui, rend3, fontconfig package).

WASM is also an option for Godot so this would not block #14

Even if this is not accepted (at least not accepted in the immediate future) I plan to use this little project to brainstorm things like #70 and #55 and also subgraphing (combining two or more nodes to e.g. save space or to use them in combination with a loop - see #70 )

GraphTest.zip

Using OpenMFX

Hi, Blackjack seems like a cool and interesting alternative to the preexisting solutions for procedural mesh generation,

I intend on writing a Host that could integrate Blackjack and I wanted to share a resource that could enable an easier standardization to export the functionalities of blackjack.

The project in question is OpenMFX.

It would enable you to make a blackjack OMFX plugin and integrators would write a Host. For you the maintenance would only be on the plugin side from what I understand.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.