I just installed Scenic + Nerves, I can run the basic example on my laptop fine, I can successfully build fw images. But when I boot the Rpi, I can see all boot log messages scroll by and then it finally switches to a blank screen with nothing to show
I can see log messages via a remote IEx session on the device, there is nothing dramatic to be seen (Processes crashing or something). But the screen stays blank.
Should HDMI output work with the default Scenic + Nerves project setup? Is there something special to set in the /boot/config.txt or somewhere else?
Unfortunately I dont have a zero at hand, but tailing the logs with RingLogger and IEx via ssh does the job for now. To clarify, plain nerves stuff runs just fine, it is the Scenic part that leaves me puzzled.
Ah, finally some light. The primary problem is that the Rpi does not render text/fonts. The minimal default scene only displays text, so thats the blank screen problem solved. Drawing a simple rectangle is fine!
I tried to use a custom font (which works well on the desktop), but still no text rendering on the Rpi
Solved the font problem: The hashing scheme described in the docs does evaluate the paths at compile time, which is usually the development machineās paths and not the deployed (nerves) one.
I āfixedā it for now by differentiating a bit more and hardcoding the nerves path (bad!):
@font_hash_path :code.priv_dir(:my_app) |> Path.join("/static/fonts/myfont.otf")
if @target == "host" do
@font_path @font_hash_path
else
@font_path "/srv/erlang/lib/my_app-0.1.0/priv/static/fonts/myfont.otf"
end
@font_hash Scenic.Cache.Hash.file!(@font_hash_path, :sha)
and in init/2
def init(_, opts) do
Scenic.Cache.File.load(@font_path, @font_hash)
...
I guess thats also the problem with the built-in fonts not showing in nerves
Hmmm, I would expect that :code.priv_dir(:my_app) |> Path.join("/static/fonts/myfont.otf") would work as long as you call it at run-time and not compile time (i.e. do not place it in a module attribute)
@axelson Yes you are right. The canonical examples try to build the graph at compile time for performance and other reasons. And hashing resources like custom fonts at runtime does not feel right.
@thovoll Nice! I also discovered that using really large fonts (>500) crashes the renderer on the RPi. It is also having a hard time on the desktop where all textures are wrong for a second after starting up. Also, line breaks in the text suddenly appear when using large fonts. (for example, rendering a screen-filling clock on a 1920x1050 display).
All in all, small things that can be resolved. I really like Scenic, thanks @boydm !
Uh, right I did not try thatā¦ Pulling them out of the dependency and treat them as custom fonts is your best bet for now I guess. I also guess that currently the default fonts are also hashed at (dependency) compile time when the path is different to the release on the RPi.
All said, using a good non-default font will get you 50% of the way to a descent design