Geolm

@geolm.bsky.social

Team lead in the video game industry, in my spare time : saxophonist/composer, chess patzer, pixelart lover. All expressed opinions are my own.

Forgot to mention: my GPU-driven 2D WebGPU renderer is now public: github.com/Geolm/onedra... Not an official release yet, but it's usable. One .c file to integrate, tested on Win32 and macOS. More features coming once the heat wave stops melting me.

GitHub - Geolm/onedraw-webgpu: WebGPU tile-based 2d renderer with compute-driven binning and indirect draws

WebGPU tile-based 2d renderer with compute-driven binning and indirect draws - Geolm/onedraw-webgpu

github.com

Some news about my WebGPU gpu-driven 2d port: The GPU binning phase is working, but there are still issues with culling, likely related to AABB tests. Debugging WebGPU in Xcode is a nightmare: a lot of passes unneeded, no way to inspect shader source or code easily, no stepping in shaders...

Bild

I’m porting my 2D SDF GPU-driven renderer (onedraw) from Metal to the WebGPU API. A few observations so far: - Pure C API, no more Objective-C or metal-cpp 👍 - WGSL :( - A lot more boilerplate for bind group and pipeline setup - ~30 MB executable just to clear the backbuffer

I didn't had the luxury to work on my personal projects during the holidays season but here's a video of my attempt to animate my creature using position based dynamics (distance/angle/elbow constraint + ik).

People kept asking me to compare bc_crunch with zlib, so I finally ran the tests. Overall, bc_crunch comes out ahead. More details are available on the GitHub page. bc_crunch BC1: 1.580368 vs zlib: 1.436144 bc_crunch BC4: 1.327702 vs zlib: 1.104125 I used miniz with the highest compression setting

Hey, I thought I was done with bc_crunch, but I tried one last idea: Inter-channel differential coding. It works pretty well. The average compression ratio for BC1 went from 1.494:1 to 1.580:1, finally breaking the 1.5× barrier. It's already available here: github.com/Geolm/bc_cru...

GitHub - Geolm/bc_crunch: tiny dependency-free lossless compressor for BC/DXT texture streams (C99, ~800 LoC)

tiny dependency-free lossless compressor for BC/DXT texture streams (C99, ~800 LoC) - Geolm/bc_crunch

github.com

Experimenting with a new control: a knob :) It should land in the public leanUI library soon. And yes, I’m working on a synth… stay tuned (pun intended).

Working on a uniform sampler with dynamic exclusion zones for procedural gen. Solid results so far, code release is possible once it’s cleaner.

Just released a single-file C99 library to create MJPEG AVI videos from an RGBA framebuffer. github.com/Geolm/mjpegw Like jo_mpeg, but MJPEG gives higher quality (larger files). • 3-function API • No dependencies • No audio • Plays in ffmpeg & VLC Huge thanks to Tiny-JPEG for the JPEG part.

GitHub - Geolm/mjpegw: Tiny C99 library for creating MJPEG AVI files. No external dependencies

Tiny C99 library for creating MJPEG AVI files. No external dependencies - Geolm/mjpegw

github.com

Some optimizations news: NEON + decoder table in bc_crunch → decrunch ~1.5× faster, crunch ~1.3× faster. No plans for more performance tweaks right now, but I left some ideas in the README. Ping me if you want to chat about them!

Bild

Hi everyone! Thanks for the interest in my library bc_crunch. Quick update: I’m currently working on optimizations. Two major bottlenecks have been identified, and fixes are on the way. I’ll share some performance numbers soon and add a profiling test to the repo.

Just released bc_crunch: a tiny (~700 LOC), C99 library for lossless BC1/BC4/BC3/BC5 compression. One .c/.h pair, no deps, no malloc GPU-ready output Zigzag + delta + popcount/dictionary tricks Tested Perfect for games, procedural assets, streaming textures. github.com/Geolm/bc_cru...

GitHub - Geolm/bc_crunch: tiny dependency-free lossless compressor for BC/DXT texture streams (C99, ~700 LoC)

tiny dependency-free lossless compressor for BC/DXT texture streams (C99, ~700 LoC) - Geolm/bc_crunch

github.com

Hey everyone! I’m working on bc_crunch, a lossless BC1 (DXT) texture compressor/decompressor in C99 (~500 LOC, no dependencies). It compresses and decompresses textures bit-for-bit. Thinking of sharing it publicly, along with a doc on techniques tried—anyone interested?

Big thanks to @flohofwoe.bsky.social for sokol_app — made it easy to keep github.com/Geolm/onedraw examples small and clean, no extra dependencies. Super smooth setup. Only thing I couldn’t find was a way to create sRGB backbuffer on macOS (did I miss that in the docs?).

GitHub - Geolm/onedraw: GPU driven 2d sdf renderer drop-in library

GPU driven 2d sdf renderer drop-in library. Contribute to Geolm/onedraw development by creating an account on GitHub.

github.com

Excuse the coder art — this GIF shows the tile culling debug mode. Blue tiles are the ones that make it to the rasterizer. Notice how the interior of hollow shapes is efficiently skipped. You can have look at the code and documentation here: github.com/Geolm/onedraw

Testing an approach to break a quadratic bezier into small SDFs: Blue: straight lines (oriented box SDF) Green: “pie” caps connecting lines Red: arcs Faster than a full bezier SDF, though tricky with large stroke widths. All done with my open-source GPU renderer github.com/Geolm/onedraw

Bild

Another test for my upcoming 2D GPU-driven renderer: 5000 oriented, rounded boxes with transparency. All alpha blending is computed in-shader. Everything on screen (UI, text, shapes, etc.) is drawn in a single pass, writing only opaque pixels. 1440p @ 5.43 ms on an M1 Pro #Metal #Rendering #SDF

Bild