Xpra: Ticket #304: opengl rendering needs all updates to go via the textures
The current codepath for painting with rgb24/png paints directly onto the GL surface's window, but despite the draws all arriving in the right order (thanks to synchronization via the UI thread and idle_add
), the GL updates overwrite the small regions rgb paints that come after it if they happen very quickly (could well be gl double buffer swap happening after our plain rgb paint).
The solution is to tell the server to send those regions as zlibbed YUV and make them go through the same code (updating the texture to paint).
This requires:
- client to tell the server that it would like small region updates as yuv, only set by the gl window backing
- padding of the regions so that they satisfy swscale minimum size requirements (width greater than 8, height greater than 2) - preferably by grabbing more pixels than requested rather than padding with empty pixels, though the first approach will do for a PoC
- adding a generic rgb2yuv utility to the codecs (can be refactored to some common code later)
- client code to handle YUV painting in GL
- and also maybe: fallback code so the client can convert to YUV if the server does not support sending YUV data, alternatively we can disable OpenGL when connected to such servers
Fri, 22 Mar 2013 09:37:45 GMT - Antoine Martin: attachment set
- attachment
set to small-regions-as-yuv-paint.patch
attempts to implement rgb2yuv for small regions
Fri, 22 Mar 2013 09:38:37 GMT - Antoine Martin:
The first stumbling block with the patch above is this line:
*outsize = ysize + usize + vsize + 1024;
It should be instead:
*outsize = ysize + usize + vsize;
But that crashes and I do not understand why.
Thu, 28 Mar 2013 20:11:14 GMT - Antoine Martin: status changed; resolution set
- status
changed from new to closed
- resolution
set to wontfix
much better solution implemented in r3044
Sat, 23 Jan 2021 04:51:10 GMT - migration script:
this ticket has been moved to: https://github.com/Xpra-org/xpra/issues/304