Sign in

Karl Zylinski

@zylinski.se
1.2K followers 194 following 401 posts

Wrote the eBook "Understanding the Odin Programming Language". Made the game "CAT & ONION". Check out what I'm up to these days: zylinski.se

PostsRepliesMedia
Karl Zylinski @zylinski.se · 39m
Render backends now take an explicit state pointer: github.com/karl-zylinsk... Next up: Platform interfaces. At that point I will also add monitor queries. The monitor queries will not need any state pointer, so they can be used before window creation.
github.com
Render backend explicit state passing (#300) · karl-zylinski/karl2d@6941bd1
Just like the audio backends, the render backends now take explicit state parameters. There was some things that had to be changed to make this look OK. For example, the ch proc in d3d11 backend wa...
000
Karl Zylinski @zylinski.se · 02/10/2026
When you buy the HTML version, you get the whole book as a single HTML file. All fonts, images etc are embedded in it. It's self-contained like a PDF, but reads nicer on a computer.
000
Karl Zylinski @zylinski.se · 02/10/2026
The HTML version of my Odin book has gotten a surprising amount of praise. The design is based on how I want to read books while on a computer: As one giant document, without any annoying PDF page breaks. Have a look yourself: odinbook.com/sample.html
odinbook.com
Understanding the Odin Programming Language Sample
Learn the Odin Programming Language and demystify low-level programming
1111
Karl Zylinski @zylinski.se · 01/10/2026
I'm thinking of doing videos on how to do technical writing. If there is any topic or question anyone wonders about, then do let me know! It can be about anything related to writing technical books or technical blog posts.
040
Karl Zylinski @zylinski.se · 29/09/2026
A lot of the interfaces-tweaking I've been done comes from what this PR enabled: github.com/odin-lang/Od... The interesting thing you can do is have an interface where the procs have `self` parameters that match type through a `using`. This removes lots of boilerplate casting.
github.com
Allow pointers to types which have subtype fields at offset 0 to be assignable in proc parameters. by harold-b · Pull Request #6470 · odin-lang/Odin
Allows the following case to be valid: // Virtual interface IFoo :: struct { foo: proc( self: ^IFoo ), } // Implements IFoo interface Foo :: struct { using vt: IFoo, name: string, // .....
020
Karl Zylinski @zylinski.se · 28/09/2026
More Karl2D audio backend interface tweaking... I learned that `using` works even when implicitly casting proc parameter types. This simplified creating interfaces that take a "self" parameter. Handy in my case, because I switch impl on failure: github.com/karl-zylinsk...
github.com
Pass state explicitly to audio backends by karl-zylinski · Pull Request #296 · karl-zylinski/karl2d
Pass state explicitly to audio backends instead of using global. The usage of globals for state inside the audio backends leads to more trouble that in helps. I have to use #+private file etc to no...
020
Karl Zylinski @zylinski.se · 28/09/2026
WIP: making the Karl2D audio backends take explicit state pointers instead of using globals: github.com/karl-zylinsk... The usage of a globals is OK in the main Karl2D public API, but it spread to the backends. I'll change all audio, rendering and platform code to work like this.
github.com
Pass state explicitly to audio backends by karl-zylinski · Pull Request #296 · karl-zylinski/karl2d
Pass state explicitly to audio backends instead of using global. The usage of globals for state inside the audio backends leads to more trouble that in helps. I have to use #+private file etc to no...
030
Reposted by Karl Zylinski
Johanz @johanz.bsky.social · 17/09/2026
Too fun to just press Randomize in our new customization system in PIT OF GOBLIN! :D Most of the time you get pretty cool goblins too! #gamedev #gameart
4659
Karl Zylinski @zylinski.se · 16/09/2026
Doing a little redesign of Karl2D font cache stuff. My previous design could cause too many draw calls. The new idea uses up to 4096x4096 texture and then compacts the atlas by trowing out the 50% least recently used glyphs. How does that sound? github.com/karl-zylinsk...
github.com
Dynamic fonts share one growing atlas that compacts when full by karl-zylinski · Pull Request #284 · karl-zylinski/karl2d
Dynamic fonts now share one atlas for all fonts. It will grow up to 4096x4096. It won't grow past that, instead it will then start compacting the data. The compaction will remove 50% of the gly...
140
Karl Zylinski @zylinski.se · 16/09/2026
This reply sent me down a rabbit hole the last few days. I realized that my design was lacking in this aspect. So I have redone how it works: github.com/karl-zylinsk... Now there is one atlas. It can grow to 4096x4096. After that compaction kicks in: Rebuild the atlas, remove 50% LRU
github.com
Dynamic fonts share one growing atlas that compacts when full by karl-zylinski · Pull Request #284 · karl-zylinski/karl2d
Dynamic fonts now share one atlas for all fonts. It will grow up to 4096x4096. It won't grow past that, instead it will then start compacting the data. The compaction will remove 50% of the gly...
110
Reposted by Karl Zylinski
Matt Mower @sandbags.bsky.social · 13/09/2026
I haven't written much #odin code yet but I have been devouring @zylinski.se book and find much I like. Whatever my next project that isn't a good fit for the BEAM is, I think I will be using Odin. I was hoping to get into the Jai beta but Odin+Raylib(+Clay I hope) feels like a powerful combination.
121
Karl Zylinski @zylinski.se · 11/09/2026
New dynamic font cache for Karl2D that fixes old font rendering issues, reduces font memory usage and runs faster. github.com/karl-zylinsk...
github.com
Replace fontstash with own font cache by karl-zylinski · Pull Request #281 · karl-zylinski/karl2d
Custom font cache instead of using fontstash. It supports multiple textures per font. Each font can have up to 8 1024x1024 textures. If it runs out of textures, then it clear the one that has least...
170
Karl Zylinski @zylinski.se · 09/09/2026
wodin has a WASM backend that lets it emit WASM directly, without LLVM. The Playground runs wodin, which compiles the game and emits new WASM, which is then executed. Note that wodin's WASM backend is AI generated. Nevertheless, I am flabbergasted that this is even possible.
130
Karl Zylinski @zylinski.se · 09/09/2026
Technical details: The Odin compiler runs in your browser. Even on your phone! This is enabled by an experimental Odin compiler fork called wodin: github.com/karl-zylinsk...
github.com
GitHub - karl-zylinski/wodin: Odin Programming Language
Odin Programming Language. Contribute to karl-zylinski/wodin development by creating an account on GitHub.
130
Karl Zylinski @zylinski.se · 09/09/2026
Try Karl2D in the new Karl2D Playground: karl2d.com/playground You can edit and recompile the examples, directly in your browser!
karl2d.com
Karl2D Playground
Edit, compile and run the Karl2D examples in the browser. The Odin compiler itself is WebAssembly, so nothing is compiled on a server.
2100
Karl Zylinski @zylinski.se · 07/09/2026
Karl2D now has a mixer thread. Its a thread run on each audio backend that calls into my custom software audio mixer. github.com/karl-zylinsk...
github.com
Run the audio mixer on a thread owned by each backend by karl-zylinski · Pull Request #259 · karl-zylinski/karl2d
The audio backends now have a thread that runs the mixer. This lowers latency and lowers the time spent on the main thread, freeing up time for your gameplay code. This happens for all platforms ex...
161
Karl Zylinski @zylinski.se · 04/09/2026
Doing some live programming, perhaps something UI related? www.youtube.com/watch?v=F3dd...
youtube.com
Odin Recreational Programming
YouTube video by Karl Zylinski
040
Reposted by Karl Zylinski
Gerry Mander @mandelbaumski.bsky.social · 02/09/2026
Blog cover art time is always fun time. Especially when it's Karl's blogposts.
021
Karl Zylinski @zylinski.se · 02/09/2026
A short Odin blog post about one way to work around annoyances related to named return values zylinski.se/posts/named-...
zylinski.se
Named Return Values Without Oopsies
I have devised a new way of working with named return values in Odin. In some situations, named return values tend to make me a bit uneasy. This new way removes that. This is a subtle problem with a s...
070
Karl Zylinski @zylinski.se · 25/08/2026
Just merged touch support for Karl2D web games: karl2d.com/examples/tou... - Try the two finger pinch zoom on your phone! :)
karl2d.com
Karl2D Web Build
180
Karl Zylinski @zylinski.se · 18/08/2026
Merged a redesign of the Audio API in Karl2D: github.com/karl-zylinsk... This removes a layer of abstraction within the audio system. Playing audio clips or audio streams now directly hands you the handle of the Sound playing in the mixer. This is a breaking change.
github.com
Audio API redesign by karl-zylinski · Pull Request #228 · karl-zylinski/karl2d
Closes #226. Audio_Clip are fully loaded sounds, like a wav. Audio_Stream is audio streaming from disk, such as music or ambience. Both play_audio_clip and play_audio_stream return a Sound. A Sound...
070
Karl Zylinski @zylinski.se · 12/08/2026
New Karl2D feature: Configurable Y up / Y down coordinate system! Use `-define:KARL2D_Y_UP=true` to turn it on. `examples/box2d` (in video) now uses this coordinate system, making that code a lot nicer, since Box2D is Y up. Code here: github.com/karl-zylinsk...
080
Karl Zylinski @zylinski.se · 06/08/2026
Working on a big update for my Odin book. Just finished a first draft of a chapter on multi-threading. It covers thread basics, mutexes, semaphores, atomics and how to implement a lock-free queue.
0170
Reposted by Karl Zylinski
ME @goddy01.bsky.social · 16/06/2026
Spitter is out now on PC! A physics billiards roguelite where your tongue is your engine, your gut is your ammo, and every shot sends you flying. Built with Raylib + Karl2D + Odin. Huge thanks to @raysan5.bsky.social , @gingerbill.org , and @zylinski.se #madewithraylib #raylib #OdinLang
151
Reposted by Karl Zylinski
Sos "Buy Lazy Kickers" Sosowski @sosowski.bsky.social · 13/06/2026
AI CEO in 2019: Our model is too dangerous to release! (releases anyways) AI CEO in 2022: Our model is too dangerous to release! (releases anyways) AI CEO in 2026: Our model is too dangerous to release! (releases anyways) US govt: IT'S TOO DANGEROUS TO RELEASE, SHUT IT DOWN! AI CEO:
static.klipy.com
Pikachu's Shocked Reaction
ALT: Pikachu's Shocked Reaction
1566
Karl Zylinski @zylinski.se · 11/06/2026
Yes but if you go hardcore in either direction it becomes a strange book. It almost always needs a bit of both. For my odin book I tried to have lots of know-how in there while tying to also provide a fairly complete intro to the language
010
Karl Zylinski @zylinski.se · 11/06/2026
A big divider when writing technical books is how much "opinions" the author should put into it. Some readers want straight information (reference book). Some want as much opinions as possible, so it becomes a work of "the author's best programming ideas". There's probably a balance.
191
Reposted by Karl Zylinski
grapefrukt @grapefrukt.com · 04/06/2026
here's a pic of me talkin' business (haha no) with @sosowski.bsky.social and @zylinski.se at @amazefest.bsky.social www.flickr.com/photos/12601...
flickr.com
DSC05943
1132
Karl Zylinski @zylinski.se · 04/06/2026
www.flickr.com/photos/amaze... Pixtute of my workshop at A MAZE 🙃
flickr.com
Amaze-Berlin 2026 (123 von 328)
041
Karl Zylinski @zylinski.se · 22/05/2026
~ Today in Karl2D! ~ Mouse locking (mouse capturing) has been merged: github.com/karl-zylinsk... See the mouse_locking example to see how to use it: github.com/karl-zylinsk...
github.com
Mouse locking (capture the cursor) by karl-zylinski · Pull Request #174 · karl-zylinski/karl2d
Adds support for locking the cursor to the window. When locked, you can still fetch the mouse delta motion, and thus use the mouse for your own custom input needs. Additional changes: Added a mous...
040
Karl Zylinski @zylinski.se · 22/05/2026
What both you write is true. I use AI chats to understand APIs etc. But what I wrote is still true: These tools are quick to learn. The hard part is knowing programming. So there is no "rush" to learn these things. If you wish, you could learn them the week before a job interview that requires it.
110
Karl Zylinski @zylinski.se · 22/05/2026
Feel like you must learn AI coding without wanting to? My 2 cents: - The hard part is reviewing the code the AI outputs - You'll continue honing that skill by not using AI - Learning to use AI takes just a few days So: Ignore AI until you actually need it, you'll be better off
2241
Karl Zylinski @zylinski.se · 20/05/2026
Perhaps I can do static / dynamic with or without SDF + slug... It's a lot though :)
020
Karl Zylinski @zylinski.se · 20/05/2026
It has been merged!
010
Karl Zylinski @zylinski.se · 20/05/2026
Merged bitmap fonts into Karl2D, or "static fonts" as I call it: github.com/karl-zylinsk... I now refer to the fontstash fonts as "dynamic fonts". I'll probably reimplement the fontstash path and static path into a single path that just differs in configuration (bake once, or on-demand).
github.com
Static
Add support for pre-baked bitmap fonts. These are referred to as "static" fonts. I've renamed the fontstash fonts to "dynamic" fonts. I may replace fontstash in a future PR ...
130
Reposted by Karl Zylinski
Mike Cook @mtrc.bsky.social · 20/05/2026
Shoutout to the very senior professor in HCI who gave a talk last month about how AI can do qualitative data analysis better than people now.
First, I’d created 2000 free-text responses and labelled them ‘UK’. Then I copied and pasted the exact same 2000 responses but labelled these ‘US’. Finally, I combined them to create a dataset of 4000 total responses, and jumbled them up.

Despite the responses being identical for the UK and US, Copilot produced a rich, detailed summary of how US and UK respondents differed.
11387187
Karl Zylinski @zylinski.se · 20/05/2026
Working on adding "bitmap fonts" to Karl2D: github.com/karl-zylinsk... Previously I've only supported fontstash. But perhaps fontstash isn't a good for shipping games. Generating atlases of unknown sizes feels flaky. My plan is instead bitmap + slug (two separate modes).
github.com
Bitmap font by karl-zylinski · Pull Request #172 · karl-zylinski/karl2d
Add support for pre-baked bitmap fonts. I don't think fontstash is very useful for actually shipping games since it generates an unknown amount of texture data. My idea is to instead support bi...
2100
Karl Zylinski @zylinski.se · 19/05/2026
hahaha amazing!! I have a distinct memory of those beer bottles. I liked them because they are fun to open :D
010
Reposted by Karl Zylinski
Erik Svedäng @eriksvedang.com · 19/05/2026
141
Karl Zylinski @zylinski.se · 19/05/2026
Oh, I don't remember how it looks :D I'd love to see it again
100
Karl Zylinski @zylinski.se · 18/05/2026
Some more images from the event, taken by @mandelbaumski.bsky.social
120
Karl Zylinski @zylinski.se · 18/05/2026
A MAZE Berlin was great. It's an art house video game festival. It's more design and art heavy than programming. But they managed to squeeze in my Odin workshop despite that! Thanks :) Personally I like the art focus, as I find game design harder than programming. Got lots of inspiration!
1131
Reposted by Karl Zylinski
Gerry Mander @mandelbaumski.bsky.social · 17/05/2026
Crafted some on brand cat stamps at @amazefest.bsky.social with @zylinski.se today!
011
Reposted by Karl Zylinski
Gerry Mander @mandelbaumski.bsky.social · 14/05/2026
Ha! @zylinski.se at his workshop at @amazefest.bsky.social , where they learn about making games from scratch using Odin and Karl2D as an example :)
061
Karl Zylinski @zylinski.se · 13/05/2026
Yaaay! More of a workshop. See you!
010
Karl Zylinski @zylinski.se · 13/05/2026
A MAZE time! 🙃
170
Reposted by Karl Zylinski
Gerry Mander @mandelbaumski.bsky.social · 12/05/2026
Drawing cover art for @zylinski.se is one of my favorite things to do. I can go full crazy and silly :D
021
Karl Zylinski @zylinski.se · 12/05/2026
Showcase video of the top 10 games from the Karl2D Jam: www.youtube.com/watch?v=hArE...
youtube.com
People made these games using my library
YouTube video by Karl Zylinski
032
Karl Zylinski @zylinski.se · 11/05/2026
A short story about how Tom tries Odin and struggles a bit with namespaces zylinski.se/posts/toms-n...
zylinski.se
Tom's Namespaces: An Odin Fanfic
Tom likes making games. He has worked professionally as a game developer, but he also likes to make games in his free time, as a hobby. He makes these hobby games in a “from scratch” kind of way. This...
050
Reposted by Karl Zylinski
Sos "Buy Lazy Kickers" Sosowski @sosowski.bsky.social · 10/05/2026
Super Open Sound System is back at @amazefest.bsky.social this year for it's 10th anniversary! Everyone can be a DJ! 14 May, Thursday, 22:00-XX:00! Sign ups will be live during the festival! If you make your own music and want to secure a spot, contact Sos on AMAZE Discord! discord.gg/Tfhxtmz53
0276