xpra icon
Bug tracker and wiki

Version 8 (modified by Antoine Martin, 6 years ago) (diff)

--

Client Rendering

The choice of drawing backend has an influence on the performance, the encodings the client can support, etc.


Python / GTK Client

The main supported client is written in Python + gtk, and supports three rendering modes:

  • PixmapBacking - a standard pixmap based backing, gtk2 only.
  • CairoBacking - uses cairo surfaces for backing, required for gtk3 support.
  • GLPixmapBacking - uses OpenGL for backing, allows us to speedup rendering by using OpenGL for the colourspace conversion step needed with x264 and vpx encodings.

The GL backend should be used for non-transient windows when the encoding is set to x264 or vpx.

Java Client

The (unsupported) Java client has backends for:

  • AWT
  • Swing
  • GTK-Java

In all cases, only "jpeg" and "png" encodings are supported.

Android Client

The (unsupported) Android client has the same limitations as the Java client with which it shares most of the code.


OpenGL Notes

Some drivers are blacklisted for OpenGL support, for example nouveau on Linux, OpenGL status messages should be printed out when using the command line tool to attach to a session (unless the configuration file or command line options specifically disabled it). The --opengl=yes|no|auto option can be used to override the automatic detection of supported drivers.

You can also find the OpenGL driver information in the Features pane of the Session Info dialog from the system tray menu.

To test/diagnose your system support for OpenGL, run:

  • on Posix:
    python ./xpra/gl/gl_check.py
    
  • on MS Windows:
    OpenGL_check.exe
    

The output will show the driver, vendor and the status of various required extensions. Related tickets:

  • #147 - original feature ticket
  • #150 - OpenGL usage bugs
  • #226 - OSX build issues
  • #227 - MS Windows specific issues
  • #229 - bug: hard crash
  • #314 - VirtualBox bug (crash VM)
  • #321 - problem with small rgb updates
  • #328 - codec split
  • #367 - minor UI tweak
  • #365 - future optimization
  • #372 - Linux client crash
  • #385 - Improvements: scaling / RGB