Cross compile Qt5.12.9 for raspberry pi 3b+ succeeds except OpenGL
-
wrote on 1 Sept 2020, 15:39 last edited by thoru 9 Jan 2020, 19:22
Hello folks,
for cross compiling Qt5.12.9 for a Raspberry Pi 3b+ I followed the blog post https://mechatronicsblog.com/cross-compile-and-deploy-qt-5-12-for-raspberry-pi/
and https://wiki.qt.io/RaspberryPi2EGLFS. I've also runupdate-rpi
before rsyncing my sysroot. Compiling succeeds. I also have support for eglfs on the pi. But I can't get openGl to work.QOpenGLFramebufferObject: Framebuffer incomplete attachment. QOpenGLShaderProgram: could not create shader program shader compilation failed: "" QOpenGLShaderProgram::uniformLocation(matrix): shader program is not linked QOpenGLShaderProgram::uniformLocation(opacity): shader program is not linked QOpenGLShaderProgram: could not create shader program shader compilation failed: "" QOpenGLShaderProgram::uniformLocation(matrix): shader program is not linked QOpenGLShaderProgram::uniformLocation(textureScale): shader program is not linked QOpenGLShaderProgram::uniformLocation(color): shader program is not linked QOpenGLShaderProgram::uniformLocation(alphaMin): shader program is not linked QOpenGLShaderProgram::uniformLocation(alphaMax): shader program is not linked QOpenGLShaderProgram: could not create shader program
I have tried so many different combinations of symlinks, qmake.conf file edits (adding brcm), targets pi3-g++ and pi-g++, and whatever, I just can't get it to work.
I only see a white blank screen. There are pieces in my QML code that make use of OpacityMask and DropShadow to style an image. If I comment them out, the app runs just fine.For example, here is my latest build with the pi-g++ device:
# qmake configuration for: # - Raspberry PI # - Raspberry PI Zero # http://wiki.qt.io/RaspberryPi include(../common/linux_device_pre.conf) QMAKE_RPATHLINKDIR_POST += $$[QT_SYSROOT]/opt/vc/lib QMAKE_LIBDIR_OPENGL_ES2 = $$[QT_SYSROOT]/opt/vc/lib QMAKE_LIBDIR_EGL = $$QMAKE_LIBDIR_OPENGL_ES2 QMAKE_LIBDIR_OPENVG = $$QMAKE_LIBDIR_OPENGL_ES2 QMAKE_INCDIR_EGL = $$[QT_SYSROOT]/opt/vc/include \ $$[QT_SYSROOT]/opt/vc/include/interface/vcos/pthreads \ $$[QT_SYSROOT]/opt/vc/include/interface/vmcs_host/linux QMAKE_INCDIR_OPENGL_ES2 = $${QMAKE_INCDIR_EGL} QMAKE_INCDIR_OPENVG = $${QMAKE_INCDIR_EGL} QMAKE_LIBS_EGL = -lbrcmEGL -lbrcmGLESv2 QMAKE_LIBS_OPENVG = -lbrcmEGL -lbrcmOpenVG -lbrcmGLESv2 QMAKE_INCDIR_BCM_HOST = $$[QT_SYSROOT]/opt/vc/include QMAKE_LIBDIR_BCM_HOST = $$[QT_SYSROOT]/opt/vc/lib QMAKE_LIBS_BCM_HOST = -lbcm_host contains(DISTRO, squeeze) { #Debian Squeeze: Legacy everything QMAKE_LIBS_OPENGL_ES2 = -lbrcmGLESv2 -lbrcmEGL } else:contains(DISTRO, arch) { #On principle: no wizardry required } else { #This is not strictly necessary DISTRO_OPTS += deb-multi-arch DISTRO_OPTS += hard-float } QMAKE_CFLAGS += \ -marm \ -mfpu=vfp \ -mtune=arm1176jzf-s \ -march=armv6zk \ -mabi=aapcs-linux QMAKE_CXXFLAGS = $$QMAKE_CFLAGS # Preferred eglfs backend EGLFS_DEVICE_INTEGRATION = eglfs_brcm include(../common/linux_arm_device_post.conf) load(qt_config)
Qt config:
Configure summary: Building on: linux-g++ (x86_64, CPU features: mmx sse sse2) Building for: devices/linux-rasp-pi-g++ (arm, CPU features: <none>) Target compiler: gcc 4.8.3 Configuration: cross_compile compile_examples enable_new_dtags largefile precompile_header shared rpath release c++11 concurrent dbus reduce_exports stl Build options: Mode ................................... release Optimize release build for size ........ no Building shared libraries .............. yes Using C standard ....................... C11 Using C++ standard ..................... C++11 Using ccache ........................... no Using gold linker ...................... no Using new DTAGS ........................ yes Using precompiled headers .............. yes Using LTCG ............................. no Target compiler supports: NEON ................................. no Build parts ............................ libs Qt modules and options: Qt Concurrent .......................... yes Qt D-Bus ............................... yes Qt D-Bus directly linked to libdbus .... yes Qt Gui ................................. yes Qt Network ............................. yes Qt Sql ................................. yes Qt Testlib ............................. yes Qt Widgets ............................. yes Qt Xml ................................. yes Support enabled for: Using pkg-config ....................... yes udev ................................... yes Using system zlib ...................... yes Qt Core: DoubleConversion ....................... yes Using system DoubleConversion ........ yes GLib ................................... yes iconv .................................. yes ICU .................................... no Tracing backend ........................ <none> Logging backends: journald ............................. no syslog ............................... no slog2 ................................ no Using system PCRE2 ..................... yes Qt Network: getifaddrs() ........................... yes IPv6 ifname ............................ yes libproxy ............................... no Linux AF_NETLINK ....................... yes OpenSSL ................................ yes Qt directly linked to OpenSSL ........ no OpenSSL 1.1 ............................ yes DTLS ................................... yes SCTP ................................... no Use system proxies ..................... yes Qt Gui: Accessibility .......................... yes FreeType ............................... yes Using system FreeType ................ yes HarfBuzz ............................... yes Using system HarfBuzz ................ yes Fontconfig ............................. yes Image formats: GIF .................................. yes ICO .................................. yes JPEG ................................. yes Using system libjpeg ............... yes PNG .................................. yes Using system libpng ................ yes EGL .................................... yes OpenVG ................................. yes OpenGL: Desktop OpenGL ....................... no OpenGL ES 2.0 ........................ yes OpenGL ES 3.0 ........................ yes OpenGL ES 3.1 ........................ yes OpenGL ES 3.2 ........................ yes Vulkan ................................. yes Session Management ..................... yes Features used by QPA backends: evdev .................................. yes libinput ............................... yes INTEGRITY HID .......................... no mtdev .................................. yes tslib .................................. yes xkbcommon .............................. yes X11 specific: XLib ................................. yes XCB Xlib ............................. yes EGL on X11 ........................... no QPA backends: DirectFB ............................... no EGLFS .................................. yes EGLFS details: EGLFS OpenWFD ........................ no EGLFS i.Mx6 .......................... no EGLFS i.Mx6 Wayland .................. no EGLFS RCAR ........................... no EGLFS EGLDevice ...................... no EGLFS GBM ............................ no EGLFS VSP2 ........................... no EGLFS Mali ........................... no EGLFS Raspberry Pi ................... yes EGLFS X11 ............................ no LinuxFB ................................ yes VNC .................................... yes Mir client ............................. no XCB: Using system-provided XCB libraries .. yes XCB XKB .............................. yes XCB XInput ........................... no Native painting (experimental) ....... yes GL integrations: GLX Plugin ......................... no EGL-X11 Plugin ..................... no Qt Sql: SQL item models ........................ yes Qt Widgets: GTK+ ................................... no Styles ................................. Fusion Windows Qt PrintSupport: CUPS ................................... yes Qt Sql Drivers: DB2 (IBM) .............................. no InterBase .............................. no MySql .................................. no OCI (Oracle) ........................... no ODBC ................................... yes PostgreSQL ............................. yes SQLite2 ................................ yes SQLite ................................. yes Using system provided SQLite ......... no TDS (Sybase) ........................... yes Qt Testlib: Tester for item models ................. yes Qt SerialBus: Socket CAN ............................. yes Socket CAN FD .......................... yes Further Image Formats: JasPer ................................. no MNG .................................... yes TIFF ................................... yes Using system libtiff ................. yes WEBP ................................... yes Using system libwebp ................. no Qt QML: QML network support .................... yes QML debugging and profiling support .... yes QML sequence object .................... yes QML list model ......................... yes QML XML http request ................... yes QML Locale ............................. yes QML delegate model ..................... yes Qt Quick: Direct3D 12 ............................ no AnimatedImage item ..................... yes Canvas item ............................ yes Support for Qt Quick Designer .......... yes Flipable item .......................... yes GridView item .......................... yes ListView item .......................... yes TableView item ......................... yes Path support ........................... yes PathView item .......................... yes Positioner items ....................... yes Repeater item .......................... yes ShaderEffect item ...................... yes Sprite item ............................ yes Qt Bluetooth: BlueZ .................................. no BlueZ Low Energy ....................... no Linux Crypto API ....................... no WinRT Bluetooth API (desktop & UWP) .... no Qt Sensors: sensorfw ............................... no Qt Quick Controls 2: Styles ................................. Default Fusion Imagine Material Universal Qt Quick Templates 2: Hover support .......................... yes Multi-touch support .................... yes Qt Multimedia: ALSA ................................... yes GStreamer 1.0 .......................... no GStreamer 0.10 ......................... no Video for Linux ........................ yes OpenAL ................................. yes PulseAudio ............................. yes Resource Policy (libresourceqt5) ....... no Windows Audio Services ................. no DirectShow ............................. no Windows Media Foundation ............... no Qt Tools: QDoc ................................... no Note: Also available for Linux: linux-clang linux-icc Note: PKG_CONFIG_LIBDIR automatically set to /home/thomas/raspi/sysroot/usr/lib/pkgconfig:/home/thomas/raspi/sysroot/usr/share/pkgconfig:/home/thomas/raspi/sysroot/usr/lib/arm-linux-gnueabihf/pkgconfig
Command line:
-release -opengl es2 -eglfs -qpa eglfs -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=/home/thomas/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- -sysroot /home/thomas/raspi/sysroot -opensource -confirm-license -make libs -prefix /usr/local/qt5pi -extprefix /home/thomas/raspi/qt5pi -hostprefix /home/thomas/raspi/qt5 -skip qt3d -skip qtactiveqt -skip qtandroidextras -skip qtcanvas3d -skip qtscript -skip qtcharts -skip qtdatavis3d -skip qtdoc -skip qtgamepad -skip qtlocation -skip qtmacextras -skip qtpurchasing -skip qtscript -skip qtscxml -skip qtspeech -skip qtvirtualkeyboard -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwebglplugin -skip qtwebsockets -skip qtwebview -skip qtwinextras -skip qtxmlpatterns -no-use-gold-linker -v -no-gbm
The links to the brcm libs:
lrwxrwxrwx 1 root root /usr/lib/arm-linux-gnueabihf/libEGL.so.1.1.0 -> /opt/vc/lib/libbrcmEGL.so lrwxrwxrwx 1 root root /usr/lib/arm-linux-gnueabihf/libEGL.so.1.1 -> /opt/vc/lib/libbrcmEGL.so lrwxrwxrwx 1 root root /usr/lib/arm-linux-gnueabihf/libEGL.so.1 -> /opt/vc/lib/libbrcmEGL.so lrwxrwxrwx 1 root root /usr/lib/arm-linux-gnueabihf/libEGL.so -> /opt/vc/lib/libbrcmEGL.so -rw-r--r-- 1 root root /opt/vc/lib/libEGL.so lrwxrwxrwx 1 root root /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.1.0 -> /opt/vc/lib/libbrcmGLESv2.so lrwxrwxrwx 1 root root /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.1 -> /opt/vc/lib/libbrcmGLESv2.so lrwxrwxrwx 1 root root /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2 -> /opt/vc/lib/libbrcmGLESv2.so lrwxrwxrwx 1 root root /usr/lib/arm-linux-gnueabihf/libGLESv2.so -> /opt/vc/lib/libbrcmGLESv2.so
ldd myapp
... libGLESv2.so.2 => /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2 libbrcmEGL.so => /opt/vc/lib/libbrcmEGL.so ...
And now the really strange part -> maybe this is a bug?
I can display the image (with mask, and dropshadow) itself.
But I can not load it as a delegate from a DelegateModel like following (this is when I see the open gl errors from above):DelegateModel{ id: mydelegatemodel model: kidmodel delegate: RoundShadowIcon{ id: item width: grid.cellWidth; height: grid.cellHeight; } } GridView{ clip: true id: grid anchors.fill: parent cellWidth: 100 cellHeight: 100 model: mydelegatemodel }
RoundShadowIcon.qml:
import QtQuick 2.12 import QtGraphicalEffects 1.12 Item { Image { id: face source: "file:///usr/local/qt5pi/examples/myapp/cache/someimage.png" sourceSize: Qt.size(parent.width, parent.height) width: parent.width height: parent.height fillMode: Image.PreserveAspectCrop smooth: true visible: false } Rectangle{ id: mask anchors.fill: parent radius: main.radius_ visible: false } OpacityMask { id: round anchors.fill: face source: face maskSource: mask } DropShadow { id: shadow anchors.fill: parent horizontalOffset: 0 verticalOffset: 0 radius: 12.0 samples: 17 source: round } }
Greetings
Thomas
1/1