fosstodon.org is one of the many independent Mastodon servers you can use to participate in the fediverse.
Fosstodon is an invite only Mastodon instance that is open to those who are interested in technology; particularly free & open source software. If you wish to join, contact us for an invite.

Administered by:

Server stats:

10K
active users

#knixel

0 posts0 participants0 posts today

I've been down a deep rabbit hole inventing the universe to make my apple pie, but it's actually getting somewhere.

I'm back in C++ because it's what I'm comfortable with. Got a base for a UI system with a pretty generic core running a hybrid IM thing where the scene is more or less recreated each update, but there is a node structure that allows for iterative layouts etc.

Rendering and layout can be done with custom callbacks.

Had some time to tinker a bit with Knixel this evening, and after infinite amounts of flip-flopping I'm _back_ in Godot. One thing I did during my Rust adventures was adding multi-selection for layers, so now I'm retro-fitting that into the original version.

Not fully functional yet as it touches pretty much everything, but it's moving forward and feels like a must-have now that it's mostly there.

Since I'm totally unable to decide on anything ever, I'm back in Rust for Knixel for a while.

Some main reasons:
* I want to learn more Rust
* Debugging works better in Rust than gdscript.
* WGPU runs on web, while the RenderingDevice parts I needed in Godot currently do not.

Some downsides:
* I'm slower with Rust.
* I had a bunch of stuff done in Godot already that I need to redo.
* Not loving egui/immediate mode UI. It's acceptable though.

(Rust/ferris logo by @maggie)

The rust+Knixel saga continues. After more hassle than I'd like to admit I managed to composite an offscreen image and present it in egui.

Rendering to float textures seems to not work on web so -

Ok as I wrote this I thought "wait maybe it's only f32 that doesn't work, let's try f16", and that actually _does_ work.

So I guess maybe that's all the pieces I need then and I can try putting something together, that as a bonus maybe works on the web too. Let's go!

So I'm entertaining the idea of rewriting Knixel in Rust (currently Godot).

Looking into egui and it _seems_ to cover what I need one way or another, and wgpu seems very similar to the RenderingDevice in Godot that I use for the image compositing. (After all they're both APIs built on top of the same underlying interfaces.)

A reason for me to try out Rust I guess, and also mess around more with immediate mode UIs (which I have have an on/off relationship with).

Although I've made quite some progress on Knixel already I'm honestly considering rewriting it in something that's not Godot. Not because Godot is bad but it's also not a 100% great fit for it.

Especially all the processing would probably be better off using something like Skia (which is fantastic IMO). I could maybe keep the UI in Godot and do the processing with SkiaSharp via C#.

What I _do_ like with Godot is that it's easy to deploy for many platforms out of the box.

Tiling is something I want in Knixel so I thought I'd make sure to get it in early so it's there for all functionality going forward.

Haven't quite decided how to handle moving layers across a border though (end of the video) from a UX point of view. I can make it wrap, but in non-tiled mode a layer is allowed to be outside of and even bigger than the image canvas. This makes things weird when enabling/disabling tiling.

Looking into text drawing for Knixel and it's going to be a bit of a hurdle. There doesn't seem to be any low level access to text drawing the same way other rendering can be done directly with RenderingDevice. As far as I can tell it has to go through TextServer/RenderingServer and thereby be bound to the main frame update cycle rather than done immediately.

Might leave that bridge to cross for later.

Knixel is moving a bit slow right now because other things in life has priority, but I just switched all internal storage to use linear RGBAF instead of sRGB RGBA8.

The file format still uses 8 bit PNG so it's just a runtime thing. Not sure what the best format for float data is. KTX maybe? Godot can't save that out of the box though.

I will eventually switch it or make it optional, but I'll leave it at this for now and focus on getting the thing usable.