Sebastian Schöner 's Avatar

Sebastian Schöner

@sschoener.bsky.social

Programming! - previously at Epic Games, Unity Technologies, Paradox Dev Studios https://blog.s-schoener.com

699 Followers  |  52 Following  |  307 Posts  |  Joined: 03.11.2024
Posts Following

Posts by Sebastian Schöner (@sschoener.bsky.social)

I'm flattered :) -- fwiw, it took me a while to understand the RectTransform layouting, but once it clicks, it's very good indeed. I have only recently used a very similar approach for a new UI system.

28.02.2026 20:37 — 👍 1    🔁 0    💬 0    📌 0

Elements need to be keyed manually. There is no auto-keying, but you can often derive it from content (e.g. a button can be identified by its text within its parent scope). It's essentially what DearImGui is also doing :)

09.02.2026 12:38 — 👍 1    🔁 0    💬 0    📌 0

nice side-effect of making all cross-frame dependencies explicit and obvious. One of my main gripes with immediate mode GUIs is the layout lag/stabiliziation frame that you sometimes see, and it was important to me to make it obvious where that exists as a risk.

09.02.2026 12:14 — 👍 0    🔁 0    💬 1    📌 0

but sometimes it happens explicitly. In the case of interactions, the system handles it for you ("oh, you created spot XYZ? That existed last frame and we're hovering it!"). In some other cases, you have explicitly say "I am now querying the position of this box in the last frame". This has the...

09.02.2026 12:13 — 👍 0    🔁 0    💬 1    📌 0

I use hierarchical keys to give every item a hash. The state flip-flops between two arenas: last frame and previous frame. So at the start of a new frame I can use the new mouse pointer to compare it against last frame's data, and then you can query it using the hashes. Most of this is implicit, but

09.02.2026 12:11 — 👍 0    🔁 0    💬 1    📌 0
Post image

What I've learned over the last 1.5months of writing a GUI library: blog.s-schoener.com/2026-02-09-g...

09.02.2026 10:12 — 👍 20    🔁 4    💬 1    📌 0
Preview
Putting slim locks on a diet | Sebastian Schöner Let’s talk about reader-writer locks. Reader-writer locks are what you employ when you know that multiple readers can safely access a resource concurrently, but once there is a single writer that writ...

Putting slim locks on a diet
blog.s-schoener.com/2026-01-28-r...

28.01.2026 14:46 — 👍 4    🔁 0    💬 0    📌 0
Preview
Spinning around: Please don't! - siliceum Embark on a journey about why you should sometimes trust your OS more than yourself.

Ever wrote spin-locks or had to debug them?
I have, and I got tired of seeing (and writing) crappy ones, so I did a real investigation this time.

Spoiler: trust your OS.

siliceum.com/en/blog/post...

27.01.2026 10:40 — 👍 23    🔁 9    💬 1    📌 1
Preview
Clauded optimism | Sebastian Schöner This post is a continuation of my last post about programming with AI agents. I wanted to specifically talk about one property of Claude Code: The constant “Yes, of course!” and “That’s a brilliant id...

A piece on how I learned to appreciate the brainless enthusiasm of AI agents.
blog.s-schoener.com/2026-01-14-c...

14.01.2026 13:57 — 👍 4    🔁 0    💬 1    📌 0
Preview
An early good bye to 2025 | Sebastian Schöner There are less than 2 weeks left in 2025 and this means it is time to look back at the last year. In last year’s review I ended on this note: For the next year, I hope to spend more timing painting in...

An early good bye to 2025: blog.s-schoener.com/2025-12-19-y...

19.12.2025 10:17 — 👍 10    🔁 0    💬 1    📌 0
Preview
When better codegen doesn't help | Sebastian Schöner I want to write a few words about what sorts of games benefit from my build postprocessor for Unity il2cpp builds, cpp2better. It’s not the case that every game unconditionally benefits from it to the...

I wrote a few words about when improving codegen actually leads to better performance, motivated by my experiences with cpp2better: blog.s-schoener.com/2025-12-04-w...

04.12.2025 11:50 — 👍 10    🔁 0    💬 1    📌 0
Preview
How to figure out why C# projects are rebuilding | Sebastian Schöner A friend recently joked that all my blog posts are to some level just trauma processing. He is not entirely wrong. Today’s trauma is “why does it take 12s to recompile C# when nothing has changed?” I ...

How do you figure out why your C# projects are rebuilding, and how does the MSBuild log help?
blog.s-schoener.com/2025-11-24-m...

24.11.2025 11:45 — 👍 7    🔁 1    💬 0    📌 0

can we declare this an international holiday already?

14.11.2025 15:24 — 👍 2    🔁 0    💬 0    📌 0
Post image

Every once in a while, I check the reviews on my games on Steam. It's always nice when a game finds the exact player it was made for. New review from July:

"We Love this game, it plays as advertised." (store.steampowered.com/app/1584170/...)

How I advertise it:

13.11.2025 08:49 — 👍 10    🔁 0    💬 0    📌 0
Post image

Is your company interested in trying Live++? Want to know what it can do for you? Curious about its features?

You can now request a live demo through our website - free of charge!
liveplusplus.tech/request_live...

#cpp

06.11.2025 15:46 — 👍 4    🔁 3    💬 1    📌 0
Preview
cpp2better, an il2cpp postprocessor | Sebastian Schöner It’s been a while since I last talked about cpp2better. Time for an official “here it is” post. What is cpp2better? cpp2better is a tool that hooks into your build pipeline for Unity to achieve better...

Do you want to improve the performance of your il2cpp Unity projects, without changing your code or your assets? My il2cpp build processor cpp2better is now officially available (on request). Reach out to me, details here: blog.s-schoener.com/2025-11-04-c...

04.11.2025 14:13 — 👍 14    🔁 7    💬 0    📌 0

Fantastic! I saw it the other day, excellent change. I am also looking forward to watching the talk, I am sure I'm going to learn some new tricks!

01.11.2025 14:57 — 👍 1    🔁 0    💬 1    📌 0

Ahhh you should have said you are going to be in Stockholm, I would have gladly invited you for dinner!

01.11.2025 14:43 — 👍 1    🔁 0    💬 1    📌 0
Preview
GitHub - eliemichel/dawn-prebuilt: Only look at releases! This fork of Dawn is use to share precompiled artifacts until upstream shares official builds. Only look at releases! This fork of Dawn is use to share precompiled artifacts until upstream shares official builds. - eliemichel/dawn-prebuilt

I'm currently dealing with dawn as well. We started with github.com/eliemichel/d... (used via github.com/eliemichel/W...), which provides binaries and also does a slightly leaner build of Dawn. Ironically, I have just decided to build Dawn myself today and ditch the binaries :)

09.10.2025 18:53 — 👍 1    🔁 0    💬 0    📌 0

There are plenty of cases where Windows will actually stop you from deleting a file while it is in use. Try deleting a DLL that's loaded into a process, for example.

But to be very precise, the entire post shows that Windows doesn't actually stop you very much, so I also disagree with it :)

08.10.2025 10:54 — 👍 1    🔁 0    💬 0    📌 0

Removing the API isn't the only option. It could be marked deprecated, it could get an API upgrader. The upgrade wouldn't Remove the allocation, but it could clearly tell people "this is more expensive than you think."

04.10.2025 07:50 — 👍 3    🔁 0    💬 0    📌 0
Preview
What can go wrong in cross compilation | Sebastian Schöner I have been unfortunate enough to embark on a journey of C++ cross-compilation, by choice nonetheless. In my case, I use clang to compile on a Linux machine to get binaries for a Windows machine. This...

Do you want to know about what things might go wrong when cross-compiling from Linux to Windows? No? Ah, too bad. Then don't click the link below.

blog.s-schoener.com/2025-09-29-c...

30.09.2025 10:16 — 👍 14    🔁 1    💬 1    📌 0

That's sort of the thing: when you DO need it, then it's obvious that async/await is a *really* effective design.

24.09.2025 06:25 — 👍 1    🔁 0    💬 0    📌 0
Bilbo: "After all, why not? Why shouldn't I make this async?"

Bilbo: "After all, why not? Why shouldn't I make this async?"

Async, too much
blog.s-schoener.com/2025-09-22-a...

23.09.2025 08:52 — 👍 34    🔁 8    💬 1    📌 1
Preview
How I became the control group in an AI experiment | Sebastian Schöner At the risk of alienating almost everyone reading this blog, I wanted to report some first hand experience of interacting with AI for programming. I specifically want to talk about how I accidentally ...

How I accidentally served as the control group for an AI experiment
blog.s-schoener.com/2025-09-17-c...

17.09.2025 09:27 — 👍 9    🔁 1    💬 0    📌 0

Yes! The ability to just write a TODO frees up your mind to write the thing that actually matters today.

10.09.2025 15:20 — 👍 1    🔁 0    💬 0    📌 0
Preview
TODO TITLE | Sebastian Schöner In the past, I used to work in a codebase that had a lot of // @TODO: comments in it. Those TODOs would rank from obvious, small improvements to calls for features that would require an entire rewrite...

How my attitude to "unfinished" code changed blog.s-schoener.com/2025-09-08-t...

10.09.2025 09:21 — 👍 7    🔁 3    💬 2    📌 0

*completely unrelated to this*, but since this is an opportunity: I'm currently doing a bunch of work with OpenUSD! Thanks for your work on this!

29.08.2025 14:22 — 👍 1    🔁 0    💬 1    📌 0

Thanks! Yes, I think that point is totally debatable. I especially don't think it's *only* for executives. It's more a reminder that a lot of actions from executives really make sense when you see them through that lense (instead of "they are actually insane"). :)

29.08.2025 14:21 — 👍 1    🔁 0    💬 1    📌 0
Preview
Unreasonable within reason | Sebastian Schöner Over the years I have come to appreciate “unreasonable” coworkers. What a weird sentence to write, right? When it comes to programming, you are usually fairly well advised to be “reasonable.” For exam...

Unreasonable within reason blog.s-schoener.com/2025-08-29-r...

29.08.2025 09:06 — 👍 8    🔁 2    💬 1    📌 0