Loading video...

Video Failed to Load

Go Home

Hot take: retained-mode was a premature optimization. We built Membrane using rust and egui and never looked back. When our IDE was react-based we had to worry about reflows and re-renders. With immediate-mode every frame is a re-render! But it only takes 900us

89,828 views • 1 year ago •via X (Twitter)

10 Comments

Juan Campa's profile picture
Juan Campa1 year ago

Retained-mode made sense when GPUs didn't exist but these days virtually every device has a powerful enough GPU to continually paint what amounts to a bunch of rectangles.

static_assert(false)'s profile picture
static_assert(false)1 year ago

Nice UI! … now let’s see the battery life

Juan Campa's profile picture
Juan Campa1 year ago

It uses 0.9ms out of 16.6ms which translates to ~6% usage of a single CPU core! I’m okay with that. (assuming 60hz display, double for 120hz) GPU might actually be less than DOM-based apps because there’s no layer compositor. I haven’t measured though. Everything is rendered in a single pass. It does nothing while idle or backgrounded. Only when being interacted with.

WerWolv's profile picture
WerWolv1 year ago

Had the exact same experience when making ImHex! Immediate Mode is great. I did make one optimization though. By default we render at the screen refresh rate but if the window isn't focused or no input events have happened for a few seconds, we lower it to 5 FPS

Patryk Zoltowski's profile picture
Patryk Zoltowski1 year ago

This maybe makes sense for some desktop apps but definitely not for mobile apps or OS ui - would drain battery too much. Imagine all windows OS gui and apps written in immediate mode and battery would be dead much faster.

____ _____'s profile picture
____ _____1 year ago

Look into lazy evaluation! You can use an immediate mode API with retained mode performance if you do it right. That's what I did on my own project at least.

Juan Campa's profile picture
Juan Campa1 year ago

Isn’t that exactly what react does?

Johannes Schickling's profile picture
Johannes Schickling1 year ago

Damn this UI looks awesome!

Patrick Smith's profile picture
Patrick Smith1 year ago

React is a retained virtual DOM because the other retained system, the DOM, has a slow API. Which is then transformed by the browser into another retained layout tree, and that into a retained paint tree. It’s multiple levels of retained.

Johann Woelper's profile picture
Johann Woelper1 year ago

I did the same with my image viewer: Never looked back. The most important part is that UI is fun again now.

Related Videos