setzer22 / blackjack Goto Github PK
View Code? Open in Web Editor NEWA procedural, node-based modelling tool, made in rust 🦀
License: Mozilla Public License 2.0
A procedural, node-based modelling tool, made in rust 🦀
License: Mozilla Public License 2.0
it crashes with thread 'main' panicked at 'loading texture E8DEE1_B5A6AA_CCBCC1_C4BBBC: Unsupported(UnsupportedError { format: Unknown, kind: Format(Unknown) })', blackjack_ui/src/rendergraph/face_routine.rs:154:9
See subject. I'm on Windows 11 but I would guess this issue is platform agnostic.
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
Is there any windows building test?
This makes it difficult to use the HalfEdgeMesh
in a Bevy component, for example.
Adding the sync
feature flag to blackjack should fix this.
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 (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).
== 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
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:
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.
I am on a MacBook Pro 13.3' which has a high resolution i.e. 2560×1600. I read in the documentation of winit that you should decorrelate window size and resolution.
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.
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 channel
s. 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).
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.
git lfs fetch --all
fetch: 27 object(s) found, done.
fetch: Fetching all references...
batch response: This repository is over its data quota. Account responsible for LFS bandwidth should purchase more data packs to restore access.
error: failed to fetch some objects from 'https://github.com/setzer22/blackjack.git/info/lfs'
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
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 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.
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:
eframe::set_value(storage, eframe::APP_KEY, self);
File🠮Quit
just being calling eframe::Frame::close()
etc.
The program panics with an "index out of bounds" in src/mesh/halfedge.rs:714:73
.
Chain the following nodes:
In the image below, as soon as 7 is changed into 8 in the "Extrude faces" node the panic occurs.
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
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)
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).
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?
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?
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...
Things like
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)
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 😊
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.
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>
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) 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?
ash
(indirectly) causing the crash: https://docs.rs/ash/0.37.0+1.3.209/src/ash/device.rs.html#1963Just 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)
First off, thank you for this project!
I wrote a custom "Helix" node in Lua, that looks like this:
When I attempt to extrude a quad along the helix curve using "Extrude Along Curve", I get this:
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",
},
})
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.
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
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
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.
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:
This could also become a standalone helper crate for other egui apps
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
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...
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
Needed to run brew install git-lfs
before git lfs install
.
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.
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.
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
This is but a proof of concept made during the weekend in Godot 3.5.
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 )
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.