树莓派上的 Qt OpenGL 上下文

Posted

技术标签:

【中文标题】树莓派上的 Qt OpenGL 上下文【英文标题】:Qt OpenGl context on raspberry pi 【发布时间】:2016-01-29 09:05:58 【问题描述】:

我正在编写一个带有 Qt5 opengl 上下文的程序。它在我的桌面(fedora 23)上运行良好。但我必须在 pi 2 上运行它。所以我在每个地方下载 Qt5 源代码并在 pi 上本地编译它。当我试图在 pi 上编译和运行我的程序时,它会抛出以下错误:

QXcbIntegration: Cannot create platform OpenGL context, neither GLX nor EGL are enabled

在 Qt 论坛中,我看到在 Raspberry pi XCB 中无论如何都无法与 egl 集成。此外,当我配置 Qt 源代码时,EGL on x 选项为否。但是启用了 GLX。无论如何设置 QXcbIntegration 以在 pi 上使用 GLX?

我试图修复 XCB 和 egl 集成。所以我尝试在 qtbase 的 config.tests/qpa 目录中重新编译 egl-x11 测试以查看错误。输出是:

g++ -c -pipe -O2 -Wall -W -fPIC  -I. -isystem /usr/include/libdrm -I../../../mkspecs/linux-g++ -o egl-x11.o egl-x11.cpp
egl-x11.cpp: In function ‘int main(int, char**)’:
egl-x11.cpp:47:20: error: invalid conversion from ‘EGLNativeDisplayType aka void*’ to ‘Display* aka _XDisplay*’ [-fpermissive]
egl-x11.cpp:49:11: error: invalid conversion from ‘EGLNativeDisplayType aka void*’ to ‘Display* aka _XDisplay*’ [-fpermissive]
egl-x11.cpp:50:79: error: invalid conversion from ‘Window aka long unsigned int’ to ‘EGLNativeWindowType aka void*’ [-fpermissive]
egl-x11.cpp:51:26: error: invalid conversion from ‘EGLNativeWindowType aka void*’ to ‘Window aka long unsigned int’ [-fpermissive]
/usr/include/X11/Xlib.h:2251:12: error:   initializing argument 2 of ‘int XDestroyWindow(Display*, Window)’ [-fpermissive]
Makefile:530: recipe for target 'egl-x11.o' failed
make: *** [egl-x11.o] Error 1

有没有办法修复 XCB 和 EGL 的集成?

如果 EGL 和 GLX 无法在树莓派上集成,我该怎么做才能在树莓派上运行我的应用程序?

【问题讨论】:

【参考方案1】:

您需要有一个 Raspberry Pi 2。而且你必须为它重新编译 Qt 库。

它将使用使用 EGL 的 Qt EGLFS 平台集成运行。这意味着一个全屏 Qt 应用程序,没有桌面环境。

还没有在raspberry上构建库,但是我已经完成了Qt库的交叉编译。它需要一个 raspberry sysroot 来针对它配置 Qt:

./configure -opengl es2 -device linux-rasp-pi2-g++ -sysroot "$R" -opensource -confirm-license -optimized-qmake -reduce-exports -release -make libs -make tools ... <lots of other options>

如果在 sysroot 中安装了正确的东西,它将正确检测和配置。

【讨论】:

以上是关于树莓派上的 Qt OpenGL 上下文的主要内容,如果未能解决你的问题,请参考以下文章

在树莓派上的wireshark报错

树莓派上的 PySide2

如何使用 Qt 4 创建 OpenGL 3 上下文?

带有 OpenGL 上下文的基于 Qt 的命令行工具

树莓派上安装Qt5 MQTT支持

什么时候使用 Qt 在 opengl 中创建渲染上下文?