• v1.3.2 de9127329c

    v1.3.2 Stable

    github-actions[bot] released this 2026-09-23 05:32:56 +02:00 | 14 commits to main since this release

    🐛 3D Controller Overlay + v1.3.2

    A focused bugfix release — one hard crash on Windows, fully root-caused and fixed, plus the bundled example models finally show their textures correctly right out of the box.

    💥 Fixed: hard crash on Windows when closing a controller window

    This one took some real digging, so here's the full story for anyone curious (or hitting something similar in their own ImGui+GLAD project).

    Symptom: closing a controller window on Windows reliably crashed the whole app to desktop. Linux was unaffected. Every crash dump showed the identical signature — exception 0xc0000005, instruction pointer at exactly 0x0. The process was jumping through a null function pointer.

    Root cause: Dear ImGui's OpenGL backend bundles its own, separate GL function loader by default (imgl3w) — completely independent of the GLAD loader the rest of the app uses. That loader only ever initializes once, globally, for the whole process, and resets itself every time any window's ImGui backend shuts down — exactly what happens on close. The next window to render anywhere afterward silently rebound every pointer to its own context instead, leaving every other already-open window calling through pointers that were no longer valid for it.

    Fix: ImGui's backend is now told to skip its own bundled loader entirely and use GLAD instead, so there's only ever one, correctly-synced set of pointers.

    Two other real, legitimate bugs were found and fixed along the way — a missing GL-context restore after a mid-frame window close, and GLAD's own pointer table not staying synced across this app's several separate GL contexts. Neither was the actual root cause (the crash persisted through both), but both are fixed regardless.

    🖼️ Fixed: bundled example models not showing textures on a fresh install

    The DAT Keyboard and 60% Keyboard example models shipped with texture paths baked in from the original dev machine — meaningless the moment they're extracted anywhere else. There was already a fallback for exactly this case (added in 1.3.1), but it had a real bug of its own that quietly broke it: the healing code treated info.json's own filename as if it were a folder, building a path that could never exist no matter where the real texture actually was. That's fixed, and the two bundled models now ship with portable paths from the start too — nothing to fall back from at all.

    🎨 Texture names in Settings now show just the filename

    The Textures list under a part's Materials section was showing each entry's full stored path — 1: C:\Users\...\textures\diffuse.jpg — instead of just 1: diffuse.jpg. Cleaned up.

    🔧 For maintainers: Windows builds now carry debug symbols

    The Windows Docker build compiles with debug info now and splits it back out of the shipped .exe via objcopy, so the distributed binary stays the same small size as before, while a separate .debug file (published as its own release asset) preserves full symbols for that exact build — a real stack trace out of WinDbg is possible for any future crash, without needing to reproduce it against a special debug build first.


    Related: #3 first asked for a fast way to toggle click-through without digging through the main menu every launch — already addressed in 1.3.1 via the tray icon's per-window Click-Through toggle and the drag-to-move/click-through shortcut fix. Mentioning it here since this release's own investigation touched a lot of the same window-interaction code.

    Downloads