More details here: https://en.wikipedia.org/wiki/Sealioning
3,673 karma · joined January 7, 2013
More details here: https://en.wikipedia.org/wiki/Sealioning
See https://youtu.be/7ttG90raCNo for more details.
It's wasteful to do this expensive filtering and blending every frame since the player typically sees those blended textures for a large number of frames when they're traversing the environment, so you keep a LRU cache of blended textures around. That's the surface cache.
This also goes into a bit more detail regarding how these keys are used.
CES 2026 will probably be very interesting in that regard.
I'm surprised to read about the MSAA stuff and the fact that apparently they didn't even try binpacking the texture atlas (even though it's not needed at all anymore, as per the article). A more analytical approach to AA is probably not practical on dx11 level hardware, but I'm sure someone like Raph Levien knows more about that.
"Regular" Rust and C++ is fairly readable, but a quick Google for "Higher Kinded Types in Rust" ends up with [0]:
fn ap<A, B, F: Fn(&A) -> B>(x: &<Self as Plug<F>>::R, arg: &<Self as Plug<A>>::R) -> <Self as Plug<B>>::R
where Self: Plug<A> + Plug<B> + Plug<F>;
[0] https://hugopeters.me/posts/14/Records are also immutable, but you can create them and delete them throughout your application like you would a regular class.