I hope I dont sound bitter, but most decent graphics engine developers have created renderers that are a couple of generations ahead of the open source GUI toolkit renderers. There are several of us that can truely bring next gen rendering to the open source desktop, however we’re working for gamedev companies (they pay our bills), and we have no time to contribute to open source stacks. If the community can organise a regular budget to pay for such devs, then you’d see a significant rendered snd toolkit updates. Same with other open source apps.
How many of these game engines are abstracted at a level where you can swap in a pdf or svg backend? How many of them support cmyk and and print units? I'm only scratching the surface of things a gui renderer needs that a game engine doesn't.
I'm very skeptical that a bunch of game developers are going to whip together something that crushes Skia in performance without sacrificing a ton of capabilities.
"swap in a pdf or svg backend"
I am not sure, if I understand you right, but do you mean rendering to pdf or svg instead of the GPU?
If so, are there real world use cases?
"crushes Skia in performance without sacrificing a ton of capabilities"
Same question, what of those capabilities are really in use and needed? Linux GUIs in general are really not a beacon of light, in terms of performance or usability. I strongly suspect things could be better, if some bloat would be removed.
I am amazed with what is possible with PixiJS, a renderer for the Web, using WebGL and soon WebGPU. Having something simple, but powerful as the base, would be my way to go.
Saving websites as PDF comes to mind. If taking screenshots of windows as SVG was possible I would definitely use it.
A screenshot of a rasterized image saved in SVG is not something I see any use for. It will be a bloated monstrosity.
SVG is vector graphics, when you already have pixels - there is no clear way going back.
I think he means taking the scenegraph and saving it directly to SVG. Pretty much how it would be done for PDF.
Ah, right. Does not sound too complicated, but is an entirely seperated render path. And apparently now supported? But I have never seen it put to use.
Cairo and Skia can do this.
But is there a real world use case, where this actually was put to use?
(Sorry, I am having flashbacks of the debate with X and wayland, where it was argued, but X is network transparent, except that it wasn't anymore since a long time and, or because - no one used it)
The use case is usually sending the screen to the printer or saving a document.
It seems super complicated to me :-) cool idea though
I got the impression from above, that this is something possible now, yet I have never seen such a capability. And I thing the effort will be way greater the reward to implement from scratch ..
("Easy" assumed, there is already something there)
SVG files can refer to images for bitmap graphics, only the rectangles, text, etc would be specified as vectors. See https://www.joachim-breitner.de/blog/494-Better_PDF_screensh... for a demo.
Um, isn't that an application feature?
Printers often want pdf or postscript. Or if not some other format that isn't a regular GPU supported thing. Games rarely support printing, the main use is take a screenshot which uses the OS not the game engine, which is great for games. However if you are writing something where printing is important you want more control over the output than a screenshot can give (printers tend to be much higher resolution, but you have to deal with paper size - two things that should be passed back to the application as you can often make adjustments to better use show things when you know those limits - there are other compromises in printing too that may matter)
Couple times in the past I have implemented GPU-targeted GUI renderers, here’s an example: https://github.com/Const-me/Vrmac?tab=readme-ov-file#vector-... https://github.com/Const-me/Vrmac/blob/master/Vrmac/Draw/VAA...
2D graphics have very little in common with game engines. The problem is very different in many regards. In 2D, you generally have Bezier and other splines on input, large amount of overdraw, textures coming from users complicate VRAM memory management. OTOH, game engines are solving hard problem which are irrelevant to 2D renderers, like dynamic lighting, volumetric effects, and dynamic environment.
There is PixiJS, a 2D web graphic engine. It is really, really fast. I can imagine something like this, as the base.
I gotta disagree that PixiJS is fast. I’ve worked with a bunch of 2D graphics engines going back to the Flash days, and I found it’s really easy to hit a wall with PixiJS performance, especially if you are using text and filters. I wouldn’t have much issue with it if the cacheAsBitmap feature was reliable, but I found it buggy as heck and it didn’t help performance as much as you would expect. There is no way I would use PixiJS for a full screen game or mobile game.
Can you give examples of better JS renderers?
What is needed for performance of traditional GUI app rendering? I'm particularly interested in table rendering. Glide and Perspective are both canvas based renderers, but I haven't dug into the internals.
[1] https://github.com/glideapps/glide-data-grid
[2] https://github.com/finos/perspective
Ok, I also found that performance can drop in unexpected ways, causing workarounds, to get it flowing again.
And I don't use cacheasbitmap, but do my own caching. (Not because I knew of flaws, but because I was already doing it)
And for text I really recommend BitmapText. That is fast. (But not possible with all use cases, sure)
Also Pixi8 with WebGPU will be stable soon, looking forward to it.
But all in all I am really impressed, I used quite a few other js graphic engines before and Pixi was by far the best. Or which one did you find better?
PixiJS is the easy problem, blitting a bunch of premade textures to the screen. The much harder problem is getting curveTo() and text and gradients and strokes, etc.
That is all or mostly possible with PixiJS or an extension to my knowledge.
Edit: but then again, Pixi uses the HTML canvas element for text drawing, which uses the browsers text capabilities. So yes, at some point and somewhere those functionalities need to be implemented
Sure canvas can render text, but its filled with problems and limitations. It doesn’t do linewrapping or any of the font rendering correctly. Doesn’t do aliasing correctly. It needs so much hand holding and manual handling to render semi decent that basically all canvas apps just opt out and use html to render text on top of canvas.
Canvas is almost always the wrong choice if you want to do layouts.
While 3D games are the most common ones these days, there's still plenty of development done on 2D games too :
https://www.factorio.com/blog/post/fff-251
https://www.factorio.com/blog/post/fff-264
https://www.factorio.com/blog/post/fff-281
2D games are mostly rendering sprites. GUI renderers do that too for raster images and font glyphs, but the harder part for GUI is vector 2D graphics.
The ^community^ here are people like you - those who also have to pay bills but contribute anyways, in whatever way they can by using the software and occasionally contributing code.
While yes it would be great if a community could raise funds, that coordination job itself would have to become someone's not-paying-the-bills work.
As much as I love Open source/Free/Libre software and am grateful it exists (and contributing to it, when possible), I've a long held belief that it is the pursuit of the privileged. You need to have the privilege of free time and then the privilege of being able to choose to spend that free time on something that doesn't improve your standard of living and then the privilege of being able to do it consistently.
Sadly I totally agree: Open Source is the playground of people who can afford it.
I benefited a lot of Open Source in my career, life so I am very thankful for all contributors (and try to give back in money/time, when I can afford one or the other).
What really annoys me, that my government does not mandate that software build with tax money must be Open Source.
That would go a long way to fund Open Source and improve the quality.
What government is that?
I dunno, all of them? Which governments mandate open source software when calling for bids?
(I wasn't trying to make a point.) As far as I know, that's what the initiatives like PMPC¹ are for. I think in Switzerland, a law recently passed that seems to go in that direction² (Open Source should by default but some leniency as far as I can interpret the text). According to this³ OSOR report, something similar happened in Italy in 2019. So, I think we're slowly going in that direction in Europe.
¹: https://download.fsfe.org/campaigns/pmpc/PMPC-Modernising-wi...
²: https://www.admin.ch/gov/fr/accueil/documentation/communique...
³: https://joinup.ec.europa.eu/sites/default/files/inline-files...
Bulgaria does. https://git.egov.bg/explore/projects
I do not think it should be mandated. But it should be promoted
In principle, yes. In practice, most of the "community" is paid developers for companies like RedHat. So while they do have to pay the bills, they do so by those FOSS contributions.
True. I recognize that my statement was a bit simplistic.
That said, in the context of what the OP was saying, unfortunately, this is a chicken-and-egg situation. For someone, like the OP, who would like to get paid to do OSS, they'd need to have a reasonably active OSS presence prior to being hired at places like Red Hat. Which is another aspect of my original point of contributing to FLOSS being the pursuit of the privileged.
That sounds a lot like modern extortion. I sincerely hope this attitude does not creep into FLOSS and Open Source more then it already did. Imagine a volunteer firefighter who has found a well paying job announcing "If you'd pay me more, your house wouldn't have burnt down."
A better analogy is volunteer firefighters not cutting it, houses burning down left and right, and a professional firefighter saying "I'd like to come work in your district and help with firefighting, and I could do a much better job than the volunteer guys, but I need to get paid to work".
If you took away people working on FOSS because they're paid to, that wouldn't contribute or drop to 1/10th the rate otherwise, you removed the most prolific and important maintainers and contributors of lots of huge FOSS projects.
Since I just recently completed my certification as a Firefighter I/II (also Wildland FF 2), and have been an open source developer for more than 35 years, with the last 25 years of that being full time and the last 15 having FLOSS as my actual income source, I'd like to comment.
The primary difference between professional firefighters and their volunteer counterparts is hours on the job. When I graduated from the state academy, I knew as much as about firefighting as any of my fellow graduates and had been through precisely the same training requirements. However, the gap is going to open up very rapidly since the career guys will be doing regular shifts every week, whereas I will be answering 1-3 calls a month on average, most of which will not be fire-related. A year from now, the career guys will be even more familiar with everything we learned during our certification training and more, while I will be working hard to remember any of it.
So the question is: how well does this analogy hold for s/w development?
It doesn't.
First of all, the gap between most proprietary development outcomes and their FLOSS equivalents has more to do with UI/UX design questions than actual coding skills. At the source code level, it's generally proprietary projects that are "burning down left and right" (shoddily and quickly built, with inadequate attention to engineering and insufficient caring about one's work due to marketing deadlines).
Secondly, the difference between proprietary developers and their FLOSS equivalents in terms of hours of experience is not deterministic. It's going to be a function of employers, personalities, life situation. Plenty of (typically younger) FLOSS developers squeeze in more quality hours on their FLOSS work than their proprietary cousins do.
Thirdly, a firefighter only gets to put out the fires that actually happen. A software developer can pick their own problems and goals and work on them at any time. There's no relationship between the outside world and your ability to advance your skills and knowledge.
Not a volunteer fire department, but this comes to mind: https://www.npr.org/sections/thetwo-way/2010/10/08/130436382...
What do you want the community to do? Pitch in with money from their day jobs so a gamedev savior can come in and make things render slightly faster? At the expense of hideous unmaintable code that only a gamedev genius could understand ?
Some open source projects hire full time developers with donations / sponsor money (e.g. python, zig).
I'm not saying that's the correct approach for GTK, just noting is not an absurd idea.
Yeah, because there aren't well maintained pro rendering engines /s
And FOSS devs always create non-hideous maintanable code that everybody understands /s
Why don't you get your company to pay for it?
Why should they, if they are interested in releasing games or a game engine?
Then why should this happen?
I'd be very skeptical about that. I work in the game industry, and while our 3D renderers are very good, I have not seen a 2D UI renderer I would feel is at all competive. What are you using for path and pattern rendering?
I am using rmlui in ly own small game. Not sure how good it is.
You may be surprised to know that the open source Godot game engine has also been adopted by some developers as a GUI toolkit (See Standalone Tools and Applications Made with Godot GUI - https://alfredbaudisch.com/blog/gamedev/godot-engine/standal... ).
I can't think of a segment of user interfaces worse for accessibility than game development. Generally speaking, the game-centric UI toolkits and immediate-mode GUIs are very pretty but completely lack any accessibility hooks, including the ability for a screen reader to even know there is text present. If GNOME switched to gamedev-style UIs, I would probably just go buy a Macbook.
Some of the people working on GTK are funded by Red Hat or otherwise. If you're really interested, you could try talking to people.
Edit: In particular, Matthias Clasen, the guy blogging here, has been with Red Hat for many years.
Step one: get the knowledge out there. Have those developers at least, I don’t know, talked about what makes those toolkits better at GDC?
I am a bit skeptical about this. I feel like game UI toolkit and desktop GUI framework live in two separate world with different expectation. At least, in my humble experience, having to have used both in my career.
GTK/Qt are usually good/very good with their integration with the OS, accessibility feature, keyboard navigation, handling of features like copy/paste, ... These are the kinds of things that game ui toolkit tend to completely forgo since they don't need it, and focus instead on performance, theming, integration with a game engine, ...
Theoretically, you could say that the renderer is agnostic with this, but in practice, it is not completely true. And also with the simple fact that you have a limited budget to work on feature, and they both rather work on different feature. Having a very fast and accurate renderer is just not as important for desktop GUI framework than for game UI toolkits.
game devs are already relatively underpaid for the value they bring to companies. I don't know how an open source initiative can even afford a single professional graphics developer.
Also, you say they are a couple of generations ahead, but do these kinds of software need to be bleeding edge? Even many games don't, the kinds of software in research labs that do pay even better than gamedev (and of course require PhD's and whatnot).
There are several companies employing devs for this kind of free software work.
If you think you could contribute you can apply for them.
I guess you will probably find there are already brilliant and competent people working on this stuff and the problem is not so easy as you believe.
The recent "The things nobody wants to pay for in open source (lwn.net)"
https://news.ycombinator.com/item?id=39151000
comes to mind...
Game engines can afford to be generations ahead : they might even be targeting specific hardware (single console release), they typically assume a sandboxed environment that they are in total control of (at best, they'll make a limited and tightly controlled GUI framework for modders), they might have restricted themselves to a limited number of inputs/outputs (single screen with a specific resolution, gamepad only), they don't have to worry about unknown unknown uses by other developers...
None of these apply to a generalist renderer, therefore it can only "lag behind" the game ones. (Unless maybe if we're talking about the "human side of the question" : what are the best designs, layouts for a generalist human/machine interface ? Here it's the generalist GUIs that I would expect to be a couple of generations ahead (Xerox' labs, Apple's Macintosh, IBM's Common User Access standard, CERN's World Wide Web...)