如何在 Yocto Linux 中为 Qt5 应用程序启用 GLX 和 EGL 与 XCB 的集成?
How to enable GLX and EGL integration with XCB for Qt5 applications in Yocto Linux?
我在带有 Qt5 的 Yocto Zeus 3.0.1 上有一个应用程序 运行,它依赖于 OpenGL EGL。应用程序构建正常,但失败并显示以下消息:
QXcbIntegration: Cannot create platform OpenGL context, neither GLX nor EGL are enabled
QXcbIntegration: Cannot create platform offscreen surface, neither GLX nor EGL are enabled
我已经在映像 .bb
文件中添加了所有需要的 OpenGL 驱动程序:
IMAGE_INSTALL += "libegl-mesa libgl-mesa libegl-mesa-dev libgl-mesa-dev libgles3-mesa-dev mesa-megadriver"
以下是我的qt5/qtbase_%.bbappend
文件。
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
PACKAGECONFIG_append = "gles2 mtdev sql-sqlite glib fontconfig gif accessibility"
PACKAGECONFIG_append = " widgets"
do_configure_prepend () {
cat >> ${S}/mkspecs/linux-oe-g++/qmake.conf <<EOF
# the below indentation is important - Soham
QMAKE_LIBS_EGL += -lEGL -ldl -lglib-2.0 -lpthread
QMAKE_LIBS_OPENGL_ES2 += -lGLESv2 -lgsl -lEGL -ldl -lglib-2.0 -lpthread
QMAKE_CFLAGS += -DLINUX=1 -DWL_EGL_PLATFORM -DEGL_API_FB=1
QMAKE_CXXFLAGS += -DLINUX=1 -DWL_EGL_PLATFORM -DEGL_API_FB=1
QT_QPA_DEFAULT_PLATFORM = xcb
load(qt_config)
EOF
}
我正在目标本身上构建应用程序。因此,我添加了 -dev
个文件。
我在这里错过了什么?
我需要改变我的 qtbase_%.bbappend
。它应该如下所示:
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
IMAGE_FEATURES += "accessibility"
IMAGE_FEATURES += "gles2 mtdev sql-sqlite glib fontconfig gif accessibility xcb egl libs xkb xkmcommon"
QT_CONFIG_FLAGS_APPEND = "-xcb"
PACKAGECONFIG_append = " widgets"
DEPENDS += "gsl libxkbcommon"
RDEPENDS_${PN} += "gsl xrandr libxkbcommon"
do_configure_prepend () {
# the below indentation is important - Soham
cat > ${S}/mkspecs/oe-device-extra.pri <<EOF
QMAKE_LIBS_EGL += -lEGL -ldl -lglib-2.0 -lpthread -lX11 -lxcb -lXrandr -lxcb-glx
QMAKE_LIBS_OPENGL_ES2 += -lGLESv2 -lgsl -lEGL -ldl -lglib-2.0 -lpthread -lX11 -lxcb -lXrandr -lxcb-glx
QMAKE_CFLAGS += -DLINUX=1 -DWL_EGL_PLATFORM -DEGL_API_FB=1 -DXCB_USE_EGL -DXCB_USE_GLX
QMAKE_CXXFLAGS += -DLINUX=1 -DWL_EGL_PLATFORM -DEGL_API_FB=1 -DXCB_USE_EGL -DXCB_USE_GLX
QT_QPA_DEFAULT_PLATFORM = xcb
QT_XCB_GL_INTEGRATION = xcb_egl
EOF
}
我在带有 Qt5 的 Yocto Zeus 3.0.1 上有一个应用程序 运行,它依赖于 OpenGL EGL。应用程序构建正常,但失败并显示以下消息:
QXcbIntegration: Cannot create platform OpenGL context, neither GLX nor EGL are enabled
QXcbIntegration: Cannot create platform offscreen surface, neither GLX nor EGL are enabled
我已经在映像 .bb
文件中添加了所有需要的 OpenGL 驱动程序:
IMAGE_INSTALL += "libegl-mesa libgl-mesa libegl-mesa-dev libgl-mesa-dev libgles3-mesa-dev mesa-megadriver"
以下是我的qt5/qtbase_%.bbappend
文件。
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
PACKAGECONFIG_append = "gles2 mtdev sql-sqlite glib fontconfig gif accessibility"
PACKAGECONFIG_append = " widgets"
do_configure_prepend () {
cat >> ${S}/mkspecs/linux-oe-g++/qmake.conf <<EOF
# the below indentation is important - Soham
QMAKE_LIBS_EGL += -lEGL -ldl -lglib-2.0 -lpthread
QMAKE_LIBS_OPENGL_ES2 += -lGLESv2 -lgsl -lEGL -ldl -lglib-2.0 -lpthread
QMAKE_CFLAGS += -DLINUX=1 -DWL_EGL_PLATFORM -DEGL_API_FB=1
QMAKE_CXXFLAGS += -DLINUX=1 -DWL_EGL_PLATFORM -DEGL_API_FB=1
QT_QPA_DEFAULT_PLATFORM = xcb
load(qt_config)
EOF
}
我正在目标本身上构建应用程序。因此,我添加了 -dev
个文件。
我在这里错过了什么?
我需要改变我的 qtbase_%.bbappend
。它应该如下所示:
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
IMAGE_FEATURES += "accessibility"
IMAGE_FEATURES += "gles2 mtdev sql-sqlite glib fontconfig gif accessibility xcb egl libs xkb xkmcommon"
QT_CONFIG_FLAGS_APPEND = "-xcb"
PACKAGECONFIG_append = " widgets"
DEPENDS += "gsl libxkbcommon"
RDEPENDS_${PN} += "gsl xrandr libxkbcommon"
do_configure_prepend () {
# the below indentation is important - Soham
cat > ${S}/mkspecs/oe-device-extra.pri <<EOF
QMAKE_LIBS_EGL += -lEGL -ldl -lglib-2.0 -lpthread -lX11 -lxcb -lXrandr -lxcb-glx
QMAKE_LIBS_OPENGL_ES2 += -lGLESv2 -lgsl -lEGL -ldl -lglib-2.0 -lpthread -lX11 -lxcb -lXrandr -lxcb-glx
QMAKE_CFLAGS += -DLINUX=1 -DWL_EGL_PLATFORM -DEGL_API_FB=1 -DXCB_USE_EGL -DXCB_USE_GLX
QMAKE_CXXFLAGS += -DLINUX=1 -DWL_EGL_PLATFORM -DEGL_API_FB=1 -DXCB_USE_EGL -DXCB_USE_GLX
QT_QPA_DEFAULT_PLATFORM = xcb
QT_XCB_GL_INTEGRATION = xcb_egl
EOF
}