exacoustics
exacoustics.bsky.social
exacoustics
@exacoustics.bsky.social
Building cool plugins
Brisneyland 🇦🇺
exacoustics.com
Guitar hero inspired me to pick up the guitar as a kid. My dad had tried and failed for years
October 20, 2025 at 10:05 AM
lmao I just checked all the new features. I'm psyched for a working pause
June 9, 2025 at 11:09 AM
arc witch. might try ranger or templar next. have you been playing long?
May 28, 2025 at 11:56 PM
Defs replace as much of the standard libraries as you can. Plenty of great stuff on GitHub.

All I use is:
Malloc/calloc/realloc/free
Memset/move/cpy/cmp
snprintf
math.h

All other string and i/o functions are awful.
March 22, 2025 at 9:43 AM
Have you considered switching to plain old C, or something even newer and riskier like Zig, Odin or Jai?
March 22, 2025 at 12:59 AM
Good design makes gotchas like this hard to make, and I certainly haven’t found the right one yet. If you have ideas or tips to share, I’d love to hear it!

Also if you hit me up on discord or something I’m happy to share code
March 19, 2025 at 9:04 AM
Extra logic is required on mouse exit events to stop this trip up happening. I suspect I’ll run into similar problems with keyboard focus gained lost events, and maybe drop + drag end events.
March 19, 2025 at 9:04 AM
A gotcha I ran into with this no callback approach is responding to mouse exit/enter in the correct order. For example, two widgets A & B set/restore a cursor on enter/exit events. If A is drawn before B and the user moves the cursor from B to A, then B’s exit event will be resolved last.
March 19, 2025 at 9:04 AM
Yep, you basically described the code I have so far (ids and bounds checking).

Currently z indexing is an unsolved issue. I’m hoping clever use of a “generational ID” will help. That’s a trick game developers use.
March 19, 2025 at 9:04 AM
Definitely. The latency thing is a year old issue on GitHub, and probably very easy to solve, I just haven’t gotten around it lol
March 19, 2025 at 8:44 AM
I’m struggling to understand your reply. Are you saying certain widgets require callbacks?

If so, I believe key/mouse events can be stored in a queue or similar, then consumed at the site of the widget without any requirement to register a callback.
March 19, 2025 at 7:43 AM
Good luck! Are you using another lib, or writing your own?
March 19, 2025 at 7:33 AM
You’re not missing out
March 19, 2025 at 5:32 AM
Removing a retained mode widget is just as bad. First you remove it from the header, then remove all references to it, possibly across several files and definitely in several functions/methods.

What a nightmare!

This developer friction certainly stops many great ideas from being tested!
March 18, 2025 at 11:49 PM
The equivalent of this is extremely cumbersome in a retained mode GUI (eg. JUCE, VSTGUI, Qt). To add a widget you will probably add a new member to a class in a header file, then it needs to be initialised correctly in a constructor within a .cpp file, then it needs to drawn in some third place...
March 18, 2025 at 11:49 PM
If you want to test a GUI idea using immediate mode widgets, it's as simple as writing all necessary code in one place. If you need to temporarily make space for something, then removing widgets is as easy as commenting out a block of code, or a function call.
March 18, 2025 at 11:49 PM
In C/C++, you can literally plot any chart to see and hear results in real-time. You can add/remove temporary "static" parameters for testing (see above pic) and commit them to proper plugin params later

There is also no algorithm rewrite from mathematical notation to C/C++
March 18, 2025 at 11:49 PM