Stacked art application

TL&DR

The Pi can run framebuffer applications at 4K and very low refresh rates. (not that the rasterized animation is exactly hampered by the refresh rate)

Overview

Motivation

I saw Dom involved in a forum where people were attempting to get the Pi functional at 4K; given the man has historically been pretty bloody technically solid, it lended sufficient credibility for me to attempt following said instructions.

Pi adjustment for 4K

Basically, you adjust /boot/config.txt and book to a 4K framebuffer. Go to the link above for the original suggests from Dom and co, mine follows and are a little aggressive.

THIS CONFIGURATION MIGHT SCREW YOUR PI OR EAT YOUR POODLE. I ACCEPT NO RESPONSIBILITY

[root@boombox ~]# cat /boot/config.txt  
# See /boot/overlays/README for all available options

force_turbo=1
gpu_mem=512
dtparam=audio=on

hdmi_group=2
hdmi_mode=87
hdmi_cvt 3840 2160 24
disable_overscan=1
max_framebuffer_width=3840
max_framebuffer_height=2160
hdmi_pixel_freq_limit=400000000
hvs_priority=0x32ff

framebuffer_depth=32
framebuffer_ignore_alpha=1

THIS CONFIGURATION MIGHT SCREW YOUR PI OR EAT YOUR POODLE. I ACCEPT NO RESPONSIBILITY

Demo Application selection and adjustment

Cool, so now we have a 4K framebuffer (verified by catting /dev/urandom to > /dev/fb0), what do we show.

I have an application that I personally use on my Pis along with the Qt (5.8.0 beta) packages I maintain for Arch on the Pi (0/1/2/3).

That app is a QML app, and normally the hardware accelerated aspect of things is awesome for an animated art application, but at 4K resolutions we can no longer allocated EGL surfaces without hitting:

EGL Error : Could not create the egl surface: error = 0x300b

I even verified this with the Pi reference applications to make sure Qt was not the stumbling point.

Cool, so no EGL surfaces. A trivial qwindow example ran perfectly on the framebuffer with -platform linuxfb.

Turns out Laszlo aint full of shit and getting your sweet QML application to run on a dumb frame buffer is a mofo-ing single API call away. Snake oil capable of driving a combustion engine. (Clearly this technology does not come out of the valley)

I coded up the changes and adjusted my application to launch with linuxfb

[root@boombox ~]# cat /usr/lib/systemd/system/pi-launcher\@.service | grep platform
ExecStart=-/usr/bin/artriculate -platform linuxfb

all that remains is adjusting ~/.config/Chaos\ Reins/Articulate.conf (generated on first launch)

[General]
artPath=/blackhole/art
columnCount=20
raster=true
view=Basic

is set (high columnCount because we got a lot of pixels to occupy) and I was immediately up and running. (adjust for your own art/photo path)

I am stoked it worked in such a straight forwards fashion, now I just need to think about how I am gonna code up an alternative view for low frequency refreshes.