Graphics

Replicant relies on the CPU for graphics rendering, a technique known as software rendering. Using the dedicated graphics processor (GPU) currently requires non-free software on all of the supported devices. As free-software replacements are not yet available, the GPU cannot be used with Replicant for the moment (see GraphicsResearch). The software rendering is the reason why Replicant devices appear slow at times and is responsible for a lot of crashes that can happen during usage.

Until Replicant 6.0 0003 Replicant used the Android software renderer, also known as libagl. libagl is fast, but caused several issues due to lack of OpenGL ES (GLES) 2.0 support.

As of Replicant 6.0 0004 rc1, llvmpipe is used as the default software renderer. llvmpipe has a more complete GLES implementation than libagl (see #705), so more apps work with it, like Firefox-based browsers or more recent WebViews (see #1780). Unfortunately, llvmpipe is too slow for certain system components, which may able be true for some apps. Furthermore, certain apps still crash with llvmpipe, although less frequentely. Usually, the screen stays black if an app does not work with llvmpipe.

To cater for these issues, Replicant 6.0 0004 includes a mechanism that allows choosing between llvmpipe and ligagl, on a per process basis. Such mechanism is actually used on the Replicant 6.0 0004 images to force some system components (bootanimation, SurfaceFlinger and system_server) to use libagl.

Choosing the default software renderer

Make sure ADB is running as root and the system partition is mounted writable.

The following command switches between llvmpipe and libagl:

adb shell "grep -q "ro.libagl=1" /system/build.prop && sed "s/ro.libagl=1/ro.libagl=0/" -i /system/build.prop || sed "s/ro.libagl=0/ro.libagl=1/" -i /system/build.prop" 

Then reboot the device. To switch back to previous renderer, run the above command again and reboot the device.
This method works on both Replicant 6.0 0003 and 0004. Do note that on 0003 you will start with libagl by default, whereas on 0004 the default is llvmpipe.

Choosing the software renderer for a specific app

Choosing the software renderer for a system component

In case the screen compositor (SurfaceFlinger) is used with llvmpipe, this could have an effect to other apps. For instance with Gallery and Orbot it happens, that some GUI elements are visible, while the main screen is black. The GUI of Simple File Manager works as long as no image is viewed in fullscreen.

Known issues with libagl

Popular apps from F-Droid that do not work

See also