我正在尝试使用here的示例创建一个非常简单的wayland合成器,如下所示:
import QtQuick 2.12
import QtQuick.Window 2.2
import QtWayland.Compositor 1.3
WaylandCompositor {
id: wlcompositor
WaylandOutput {
compositor: wlcompositor
window: Window {
width: 800
height: 480
visible: true
title: wlcompositor.socketName
Grid {
anchors.fill: parent
anchors.margins: 100
columns: 2
Repeater {
model: shellSurfaces
ShellSurfaceItem {
id: shellSurfaceItem
autoCreatePopupItems: true
shellSurface: modelData
onSurfaceDestroyed: shellSurfaces.remove(index)
}
}
}
}
}
ListModel { id: shellSurfaces }
XdgShell {
onToplevelCreated: shellSurfaces.append({shellSurface: xdgSurface})
}
}然后我创建了一个单独的客户端应用程序,它只是创建了几个矩形作为测试。
import QtQuick 2.12
import QtQuick.Window 2.12
Window
{
id: window
visible: true
width: 200
height: 200
Rectangle
{
anchors.fill: parent
color: "green"
Rectangle
{
x: 10
y: 10
width: 100
height: 100
color: "blue"
}
}
}每件事看起来都简单明了。但是当我在我的Pi4上运行它(使用-platform wayland标志)时,客户端得到了疯狂的失真,如下所示:

我正在使用Boot2Qt进行测试,这是一个yocto linux映像。我已经尝试了Qt版本5.14.2和最新的5.15.0版本,结果是一样的。控制台上没有错误。除了它看起来很糟糕之外,没有任何迹象表明有什么不对劲。
我确实注意到,如果我使用weston作为我的合成器,而不是QtWayland,那么这个应用程序看起来很完美。这让我觉得WaylandCompositor出了点问题。但我在谷歌上搜索了一下,没有发现其他人在抱怨同样的事情。
我甚至不知道该尝试什么。有谁有什么想法吗?
发布于 2021-02-24 05:04:00
我在pi 4上使用qt 5.15.1和qt 5.15.2与qt wayland时也有类似的效果。通过使用以下选项编译mesa驱动程序20.3.3和20.3.4,我设法让QT Wayland正常工作:
驱动程序=broadcom-Ddri-Dgallium drivers=kmsro,v3d,vc4 -Dbuildtype=release -Dprefix=/usr -Degl=true
安装驱动程序后,我更新了主机上的sysroot并交叉编译了QT库。这使得它终于可以工作了。祝好运。
发布于 2021-09-22 15:43:11
我在Qt 5.12到5.15和Qt 6.2.0RC中遇到过同样的问题。
避免失真的解决方案是在QtWayland中启用dma-buf,并从合成器端设置硬件集成:
export QT_WAYLAND_CLIENT_BUFFER_INTEGRATION=linux-dmabuf-unstable-v1
export QT_WAYLAND_SERVER_BUFFER_INTEGRATION=dmabuf-server 请注意,为了启用dma-buf,我需要调整.pro和configure.json文件(我正在Pi4上进行本机构建),因为qmake或cmake无法正确检测到libdrm-dev头文件。
将INCLUDEPATH += /usr/include/libdrm/添加到以下两项中:
./src/plugins/hardwareintegration/client/dmabuf-server/dmabuf-server.pro
./src/plugins/hardwareintegration/compositor/dmabuf-server/dmabuf-server.pro并在以下文件中的drm头之前添加libdrm/:
./src/client/configure.json
./src/compositor/configure.json重新配置和重建应该可以工作。在Pi4 + Qt 5.15.2上使用armhf和arm64镜像进行测试,使用dtoverlay=vc4-kms-v3d-pi4覆盖。
发布于 2021-04-07 17:56:08
如果我没记错的话,当涉及到wayland支持时,闭源图形驱动程序是一个真正的痛苦。您可以通过在启动合成器之前设置QT_WAYLAND_CLIENT_BUFFER_INTEGRATION=brcm为qt wayland启用broadcom后端(我认为这是适合rpis的),这可能会带来一些运气。
在这个自述文件中有一些关于这个环境变量的信息:https://code.qt.io/cgit/qt/qtwayland.git/tree/README
但如果可能的话,我认为mesa开源驱动程序会给你带来更少的痛苦,因为它得到了更广泛的使用,支持也可能更好。
https://stackoverflow.com/questions/62124690
复制相似问题