I am a developer at Plex, and we are considering CEF for one of our apps. The current version uses a different mechanism to render a web interface over video playback, and are looking at replacing this with CEF. GPU rendering of the UI (web layer) without CPU copy-back is highly preferred so as to maintain high frame rates in the UI.
In our usage, we need the web interface to be rendered with a transparent background, since it is displayed on top of the video. As I understand it, the current state is as follows (please correct me if I got anything wrong):
- Rendering with transparency requires OSR.
- onAcceleratedPaint works on Windows with a shared D3D11 texture.
- This is not called on other platforms; instead, onPaint is called, requiring a copy-back of damage rects
- This PR contains patches to bring onAcceleratedPaint to Mac and Linux platforms. Further work which was updated to newer Chromium versions is available in Richard Jackson’s repo and OBS’s Github repo.
- This work cannot be rebased beyond version 5060 due to architectural changes in Chromium
In light of the above, I’m wondering: what is the future of this use-case? We would like to know if changing to use CEF would require either sticking with 5060 or giving up texture sharing on Mac/Linux, or if another method will be available down the road. Could 3263, 3293, and/or 3294 yield the desired result?
For reference, our current implementation composites the UI and video via:
- Windows: Rendering the UI and video in a separate child HWNDs letting Windows do the compositing
- Mac: Same idea but using NSViews
- Linux: Blitting the video and UI into a shared framebuffer and displaying the result.
Thanks for any info.