6 ms·
Qt Widgets Rendering Pipeline
- danielvaughn 3y agoAt a glance, the rendering pipeline doesn’t seem too different than rendering on the web.
- 0x1cebooda 3y agoOr any other ui toolkit.
- ReactiveJelly 3y agoThere's only so many ways to approach the impossible task of rendering text. For one, I think Harfbuzz text shaping underlies Skia, QPainter, and every other text renderer?
- adamredwoods 3y agoCahier looks interesting! A research and note gathering tool. https://getcahier.com/ https://getcahier.com/
- wayvey 3y agoFor anyone wondering why this is here, is because it's linked at the top of the article page.
- felipefar 3y agoHi! I'm glad you found Cahier interesting. I use it on a daily basis. I've been developing the tool for 10 months, and still haven't gone full public. There's still some things to iron out before that. But I hope to publish more about it in the coming weeks.
- Narann 3y agoI didn’t know AGG library this article is referring to. It seems to have a big legacy yet not much is known about the author. https://en.wikipedia.org/wiki/Anti-Grain_Geometry https://en.wikipedia.org/wiki/Anti-Grain_Geometry
- dalke 3y agoAs I recall, he worked at 3D Pharmaceuticals on their ABCD project. The company was then bought by Johnson and Johnson. He later went to Wall Street. My knowledge comes indirectly through Dimitris Agrafiotis, who was the head of that project. Google Scholar lists several papers with him as co-author, like the ABCD paper at https://pubs.acs.org/doi/pdf/10.1021/ci700267w https://pubs.acs.org/doi/pdf/10.1021/ci700267w which has "3DX supports these functions through a highly finessed UI and a superb rendering engine that delivers fast antialiased graphics with subpixel accuracy." citing "Shemanarev, M. The Anti-Grain Geometry Project. http://www.anti- http://www.anti- grain.com (accessed June 1, 2006)."
- smallstepforman 3y agoHaiku OS also uses AGG for its interface kit.
- rubymamis 3y agoThanks for the interesting read. Your app Cahier looks cool! I'm developing a note-taking app[1] using Qt C++ and QML and love that combo. Creating complex UIs with animation is much more straightforward with QML and since the model is still on the C++ side and most Qt Quick components are compiled to C++ the performance is close to Qt Widgets. [1] https://www.get-plume.com https://www.get-plume.com
- ognarb 3y agoIn your website, you say that your code is open source but I can't find a github repo. I would love to see how you did the text manipulation code.
- hmmstedaa 3y ago[dead]
- rubymamis 3y agoHi! Thanks for your interest. I've been doing some thinking in the last couple of days and decided to close source the code for Plume.[1] I'm going to update the website now. I've contributed here[2] for text selection between different blocks if you want to take a look. Of course, you'll have to implement yourself editing between blocks, undo & redo, copy & paste, etc. For me, a big challenge was to synchronize between the state of underlying plain text and the rendered HTML since Qt's conversion is incredibly inconsistent, it requires some annoying small modifications each time. BTW, there's a high chance I'll open source Plume in the future. I don't fully trust any non-open source app without a transparent build process. But only after I'm sure I figure out a sustainable monetization source. [1] https://news.ycombinator.com/item?id=38584960 https://news.ycombinator.com/item?id=38584960 [2] https://github.com/shaan7/qtdevcon2022-textarea/pull/1 https://github.com/shaan7/qtdevcon2022-textarea/pull/1
- rubymamis 3y agoOh Carl, I just noticed it is you! Haha. Thanks for your early support with Notes!
- zerr 3y ago> Widgets draw different types of graphical elements one after the other, changing states rapidly. Since OpenGL excels in rendering lots of data of the same type, but is slow when changing states, this created a performance penalty for Qt Widgets applications. Why does this not hinder QML to be GPU-accelerated? (Or any other GPU-accelerated UI such as WPF, Flutter)
- dist-epoch 3y agoOne reason is in QML/WPF you use data binding instead of directly setting widget state like in classic Qt. Data binding allows the runtime to batch and consolidate changes. Classic Qt also encourages a bad state handling programming style which is hard to optimize. Data binding fixes that and moves more of the responsibility to the framework.
- ptx 3y agoCouldn't the rendering still be batched? In Swing, for example, onDraw is invoked whenever Swing feels like it (and so could presumably be batched) regardless of when and how often the component's state is updated.
- ahartmetz 3y agoAll the drawing in QWidgets is done imperatively with QPainter. Converting immediate mode painting to retained mode painting is possible, I guess... but not easy and probably full of pitfalls. Also, performance is just fine (really good actually) in practice, at least on PC-class hardware. QPainter's backend is not quite as fast as Skia, but still fast.
- deleted 3y ago[deleted]
- wokwokwok 3y agoI know QT is a very successful graphics library that works incredibly well, so clearly they’re on their game. However. I’m puzzled that a software rasteriser can possibly be performant enough for modern UI applications. If you compare it with other sophisticated UI stacks for example, WPF or chrome (1), you can see a detailed and well considered use of GPU acceleration. Does qt not do this too? I’m very surprised. [1] - https://www.chromium.org/developers/design-documents/gpu-accelerated-compositing-in-chrome/ https://www.chromium.org/developers/design-documents/gpu-acc...
- saidinesh5 3y agoQt itself has a few "graphical frameworks" to do the rendering. QWidgets is what you're referring to. That's what is used to build traditional desktop applications and is rendered using software by default. QML/QtQuick is their GPU accelerated scenegraph: https://doc.qt.io/qt-6/qtquick-index.html https://doc.qt.io/qt-6/qtquick-index.html . It is mostly used in mobile/embedded systems, but they do have desktop components too.
- Kelteseth 3y ago> It is mostly used in mobile/embedded systems, but they do have desktop components too. This is misleading. QML was supposed to be the successor of QWidgets. Many big apps use it just fine on the desktop. Sadly many Qt dev themselves (just look at the QtCreator code, do you see any commits using QML there?) do not like QML and so it never really replaced QWigets. Now we have a community that is essentially split and every party cries if one gets more updates then the other. QML still has things like TrayIcon support as a unstable labs preview module, after nearly 10 years. Yes I'm a full time Qt/QML developer and I'm salty about this :*)
- bluGill 3y agoFor a desktop application widgets are better than QML. QML brings things to your UI that a desktop application shouldn't use. QML is the right way to do phone applications, but there are good user interface reasons to not use most of the features QML gives you on desktop applications, but to use those features on phone applications. Not that you cannot build good desktop applications with QML, but there will be a lot more work for questionable gain.
- brlebtag 3y agoI wish there was a multiplatform MIT alternative or ... Qt change its license prices... it is so expensive!
- Vogtinator 3y agoLGPL is perfectly usable IMO.
- joezydeco 3y agoLGPL3 on embedded is...tricky.
- bluGill 3y agoQt also puts a lot of money into paying developers to make it good. Developers are expensive.
- PKop 3y ago>it is so expensive That's how the product is made good.
- jdlyga 3y agoQt Widgets was a pleasure to work with. It's very well documented, well structured, and easy to extend with your own Widget classes.