> No, the new renderers are not faster (yet).
I think yet is here the important word.If you see a noticeable performance decrease:
> GSK_RENDERER=gl
Please keep in mind that it is unlikely that Microsoft, Apple or Google would discuss these. It would be probably „forget the old API, here another API“ (Microsoft), „enforced from ${WEIRD_NAME}“ (Apple) or „you won’t get that update“ (Google).It would probably have been a good idea to track performance throughout the implementation and iterate on that instead of "architectural purity".
> Proper color handling (including HDR) > Path rendering on the GPU > Possibly including glyph rendering > Off-the-main-thread rendering > Performance (on old and less powerful devices)
(Which is not to say that tracking performance isn't a good idea. It's just that "architectural purity" sounds needlessly dismissive to me.)
I'm ok with performance leaning on advances in the hardware. I'm also ok with performance dropping if you are pushing more pixels. But, we had high resolution displays years ago. Such that that is a tough hill to defend.
Is why nobody says that old "3d" games like Doom were poorly implemented. Even if they were not fully 3d.
(which CPU? render what? using how much of the available CPU power? with how many frames of latency allowed?)
Note that I don't fundamentally disagree with you and I cringe when I hear issues dismissed as "premature optimizations" myself.
I don’t think I get your point here. Gtk 4 is retained-mode whatever renderer you use; Vulkan and OpenGL are immediate-mode (well, kinda) whatever renderer you use. Whatever problems that forces in the new renderers would be just as present in the old ones, wouldn’t they?
Vulkan and OpenGL, though, are in no practical sense immediate mode: You need to draw the whole frame every frame (barring a few exotic extensions for compositors and such), so you need to retain the state of everything in the frame so you can draw it.
> You need to draw the whole frame every frame
This isn’t even true at a high level. You can composite buffers. That’s not exotic. That’s a fundamental operation.
But insofar as needing to actually do all your draw calls at once - that is literally what "immediate" in immediate mode means.
> Vulkan and OpenGL
They don’t specifically retain state - they’re immediate. That’s what immediate mode means. What something higher up does has nothing to do with it.
What would you even consider immediate mode by your definition?
> so you need to retain the state of everything in the frame so you can draw it.
That state can be a procedure and a handful of variables (which in the extreme is all a shader). The point is Vulkan and OpenGL have no say over the nature of that state.
I guess I'm looking at it from a GUI application programmer POV. That OpenGL or Vulkan are, themselves, immediate mode, doesn't matter all that much there. Drawing happens on the GPU, which wants to process large buffers without changing its state in between. An overview of all drawing operations (scene graph, proper use of the term retained mode) with batching and merging is needed to cater to that. Examples: Qt QML scene graph, GTK4 GSK
> You can composite buffers
Compositing buffers is still drawing, though
> What would I consider immediate mode?
Basically, a canvas-type thing. You just scribble wherever whenever (limited by convention and correctness, of course) and what you don't touch stays like it is. Drawing happens on the CPU, which is fairly happy to do small operations at the drop of a hat. No need to remember any state for the benefit of the graphics API. Examples: Qt QPainter, GTK < 4 using Cairo