首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >树莓派4上的QtWayland客户端失真

树莓派4上的QtWayland客户端失真
EN

Stack Overflow用户
提问于 2020-06-01 10:02:20
回答 3查看 312关注 0票数 0

我正在尝试使用here的示例创建一个非常简单的wayland合成器,如下所示:

代码语言:javascript
复制
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})
    }
}

然后我创建了一个单独的客户端应用程序,它只是创建了几个矩形作为测试。

代码语言:javascript
复制
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出了点问题。但我在谷歌上搜索了一下,没有发现其他人在抱怨同样的事情。

我甚至不知道该尝试什么。有谁有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 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库。这使得它终于可以工作了。祝好运。

票数 2
EN

Stack Overflow用户

发布于 2021-09-22 15:43:11

我在Qt 5.12到5.15和Qt 6.2.0RC中遇到过同样的问题。

避免失真的解决方案是在QtWayland中启用dma-buf,并从合成器端设置硬件集成:

代码语言:javascript
复制
export QT_WAYLAND_CLIENT_BUFFER_INTEGRATION=linux-dmabuf-unstable-v1
export QT_WAYLAND_SERVER_BUFFER_INTEGRATION=dmabuf-server 

请注意,为了启用dma-buf,我需要调整.proconfigure.json文件(我正在Pi4上进行本机构建),因为qmake或cmake无法正确检测到libdrm-dev头文件。

INCLUDEPATH += /usr/include/libdrm/添加到以下两项中:

代码语言:javascript
复制
./src/plugins/hardwareintegration/client/dmabuf-server/dmabuf-server.pro
./src/plugins/hardwareintegration/compositor/dmabuf-server/dmabuf-server.pro

并在以下文件中的drm头之前添加libdrm/

代码语言:javascript
复制
./src/client/configure.json
./src/compositor/configure.json

重新配置和重建应该可以工作。在Pi4 + Qt 5.15.2上使用armhf和arm64镜像进行测试,使用dtoverlay=vc4-kms-v3d-pi4覆盖。

票数 1
EN

Stack Overflow用户

发布于 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开源驱动程序会给你带来更少的痛苦,因为它得到了更广泛的使用,支持也可能更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62124690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档