4 ms·
>Since he is using the Cairo library everything is rendered locally and transferred in uncompressed form to the X server for drawing. The same is true for all f
by cycloptic 6y ago
>Since he is using the Cairo library everything is rendered locally and transferred in uncompressed form to the X server for drawing. The same is true for all font engines which use in the case of Xft the Xrender extension.
So this is not necessarily true, it depends on how you're using Cairo. If you're using Cairo's xlib surfaces, those will try to accelerate with XRender if that's available: https://cairographics.org/manual/cairo-XLib-Surfaces.html https://cairographics.org/manual/cairo-XLib-Surfaces.html
As far as why the toolkits never got on board with it, some do actually use XRender in certain circumstances, but it's hard for all applications to make use of it properly. Most of the advantages go away if you have any images coming down the pipeline at all, or if you need to do any text layout or reading back from the pixmap, or if you have any GL/Vulkan usage in your application, etc. Plus historically I've heard the implementation of this was very inconsistent and on some servers it actually resulted in a slower rendering path, although this should not necessarily be the case if you're using the current Xorg with glamor enabled.
- sprash 6y ago> those will try to accelerate with XRender if that's available The XRender extension does all the rendering client-side. The one exception are glyphs which are rendered by the client only once and than stored in the server. XRender also does not solve the problem that a line from A to B will/should look completely different on displays with different dpi / color space / subpixel arrangement. > if you have any GL/Vulkan usage in your application The original implementation of OpenGL on X11 was GLX by Sgi which serialized all the OpenGL commands and was completely network transparent as a result. Considering the fact that all the communication with the GPU is serialized via PCIe anyways there is no reason this shouldn't work with reasonable performance today when done right.
- cycloptic 6y ago>The XRender extension does all the rendering client-side. I'm not sure where you heard this, but it's not correct, you might consider checking the extension spec and the implementation in the server: https://www.x.org/releases/X11R7.7/doc/renderproto/renderproto.txt https://www.x.org/releases/X11R7.7/doc/renderproto/renderpro... https://gitlab.freedesktop.org/xorg/xserver/-/blob/master/render/ https://gitlab.freedesktop.org/xorg/xserver/-/blob/master/re... The reason why it's not used in all cases is because it doesn't map 1:1 to cairo and there are things missing, e.g. curves probably being the most important. You would have to ask Keith for a definitive answer why this is since he wrote both XRender and Cairo. (I assume it's because Cairo already included the necessary tessellation steps at the time) Indirect GLX does work great for simple use cases, once you start to add textures into the equation the amount of bandwidth used would probably make it unusable over the network. There has been no serious work in getting indirect GLX working past OpenGL 1.x. I think another one of the main problems is that nobody really came up with a good way for GL extensions to work well there, the server needs to manually add an implementation for every extension you want to use.