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.