Qt World Summit: Submit your Presentation

Can I bypass framebuffer with Qt?

  • I am developing a simple monochrome UI (basically some text and bitmap icons) using a graphics LCD that has it's own controller. I have an OMAP-L138 and don't want to use the LCD controller. I will write to the LCD memory using OMAP's expansion memory IF. So what I would like to do is simply have QT at the low level use my own routines for writing into the expansion memory, I don't want to use framebuffer. Is that possible? From what I have read so far it seems Qt is closely tied to the linux framebuffer.
    Thanks much.

  • Lifetime Qt Champion

    Hi and welcome to DevNet,

    I don't have a ready made answer to give you but did you take a look at "QScreen":http://qt-project.org/doc/qt-4.8/qscreen.html ? It might be a starting point

    Hope it helps

  • Right, I have looked at QScreen and I've found this blurb regarding custom drivers:
    "Custom screen drivers can be implemented by subclassing the QScreen class and creating a screen driver plugin (derived from QScreenDriverPlugin). The default implementation of the QScreenDriverFactory class will automatically detect the plugin, and load the driver into the server application at run-time using Qt's plugin system.
    When rendering, the default behavior is for each client to render its widgets as well as its decorations into memory, while the server copies the memory content to the device's framebuffer using the screen driver. See the Qt for Embedded Linux Architecture overview for details (note that it is possible for the clients to manipulate and control the underlying hardware directly as well)."

    So it sounds promising. But digging around on the web I haven't seen or heard about an example that isn't using the linux framebuffer. That's why I asked.

  • Take a look at the gfxdriver plugins sources. For example, I recall the eglnullws plugin derives a QScreen class for a fullscreen EGL context without referencing the linux framebuffer.

  • Hey guys, back at it again after a hiatus.
    So I've built my custom screen class and plugin and made a .so library as a result. My question now is how to go about installing it. I've tried putting this library in:
    targetfs/usr/lib/qt/plugins folder and then running my application with the switch -display -<name> with name being in the keys() routine in the plugin. But it fails with: driver not found. So I'm probably missing some installation instructions. It is a totally custom driver so I'm not using any of the Qt built in ones. Do I need to run a configure script entry such as "./configure -qt-gfx-<name>" ?
    It seems I don't because those commands enable some of the built in drivers.

    Any hints on this I'd appreciate it, thanks!

  • Lifetime Qt Champion

    Did you also create a "QScreenDriverPlugin":http://qt-project.org/doc/qt-4.8/qscreendriverplugin.html ?

  • Yes I did create a class that inherits QScreenDriverPlugin. And it references my custom QScreen. So I built those into a .so file and I installed it in usr/lib/qt/plugins. But still, the driver doesn't seem to be recognized.

  • Another possible hint.. After my failed attempt at running my application, I noticed that a file got created "Trolltech.conf" and in it some info about my custom driver "libpebble.so" that it doesn't seem to like?

    cat Trolltech.conf

    [Qt Plugin Cache 4.7.false]
    usr\lib\qt\plugins\gfxdrivers\libpebble.so=40704, 0, arm linux g++-4 full-config, 2013-04-18T19:55:30

  • Lifetime Qt Champion

    I thought there was something more ! Have a look at "this":http://qt-project.org/doc/qt-4.8/deployment-plugins.html#loading-and-verifying-plugins-dynamically there are some advice to deploy the plugins and troubleshoot them.

  • Thanks SGaist, this Deploying Plugins page has some helpful trouble shooting tips. I need to make sure I am building my application and Qt libraries in the same mode and version. Going to revisit my build process.

  • Lifetime Qt Champion

    You're welcome !

    And don't forget to clear the cache (always worth a try)

  • Ok, how do I clear the cache?

  • Lifetime Qt Champion

    IIRC, theres is a config file created in the home directory .config/ something that you can simply remove.

  • ok. on my target it was /root/Settings/Trolltech.conf (I'm using Qt 4.7.4).

    So I got Qt to recognize my driver, what helped me was the env variable QT_DEBUG_PLUGINS. With that set it would show me the errors when it was loading my plugin, and that pointed me to the problems.

Log in to reply