CN113672321B - 支持客户端窗口坐标的轻量级wayland合成器的实现方法 - Google Patents
支持客户端窗口坐标的轻量级wayland合成器的实现方法 Download PDFInfo
- Publication number
- CN113672321B CN113672321B CN202110842166.8A CN202110842166A CN113672321B CN 113672321 B CN113672321 B CN 113672321B CN 202110842166 A CN202110842166 A CN 202110842166A CN 113672321 B CN113672321 B CN 113672321B
- Authority
- CN
- China
- Prior art keywords
- window
- client
- server
- synthesizer
- coordinates
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Digital Computer Display Output (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
本发明涉及支持客户端窗口坐标的轻量级wayland合成器的实现方法,通过在wayland服务端和客户端之间建立从应用程序设置窗口坐标到服务端收到请求重新渲染的通信实现。本发明提供的支持客户端窗口坐标的轻量级wayland合成器的实现方法,通过灵活扩展wayland协议,实现客户端程序对窗口坐标的设置,满足习惯于桌面系统风格的用户使用需求。
Description
技术领域
本发明涉及应用程序窗口坐标设置技术领域,具体涉及一种支持客户端窗口坐标的轻量级wayland合成器的实现方法。
背景技术
在传统的X11中,一次窗口渲染需要多次通信。如果客户端窗口内容发生变化,首先需要请求服务端重新渲染。当服务端收到渲染请求后,告知合成器有客户端窗口的内容发生了变化。合成器收到这条通知,对发生变化的区域重新合成。然后再给服务端发送渲染请求,服务端这时候去刷新缓冲区实现渲染。
在wayland中,利用共享内存或者其他 GPU 处理方式,使得客户端程序直接渲染自己的缓冲区,并把窗口内容更新的请求发给 wayland 服务端,服务端直接去共享内存或者显存中拿到新的窗口内容合成就可以了。这样高效的处理,使得渲染性能有了很大的提升,从而减少了X11中常见的窗口撕裂、拖动残影等老大难的问题。
但是 wayland 核心协议的内容有限,不满足我们平常对窗口的一些操作,例如无法设置应用程序坐标,打开多个程序后,窗口重叠影响客户使用;即使应用程序设置了窗口坐标,还是会重叠显示,导致无法观测各程序运行情况。
wayland 平铺式窗口管理器,比如 sway可以满足窗口不重叠的需求。它由合成器根据屏幕大小决定各个应用程序的窗口大小和坐标,保证互不重叠。但是在这种模式下,用户无法进行拖动窗口等常规操作。一般来说只适合高级用户,普通用户无法适应这种交互方式。
开源kwin 窗口管理器的wayland后端(kwayland库)实现了 xdg-shell 的协议,支持客户端程序设置窗口坐标。但是 kwin 窗口管理器体量庞大,它的后端除了 wayland还有 X11,依赖库众多,对机器性能要求较高,同样也不适用。
发明内容
为解决已有技术存在的不足,本发明提供了一种支持客户端窗口坐标的轻量级wayland合成器的实现方法,通过在wayland服务端和客户端之间建立从应用程序设置窗口坐标到服务端收到请求重新渲染的通信实现。
其中,包括如下步骤:
步骤S1:选择支持xdg-shell协议的开源qtwayland版本;
步骤S2:修改 qtwayland,增加 qtwayland-server 端和 qtwayland-client 端对协议接口 set_window_geometry的通信支持,使得 qtwayland xdg surface 设置的坐标值可以传递到服务端;
步骤S3:基于 qtwayland 开发合成器程序 kw-shell,在合成器中响应客户端设置坐标的请求,记录收到新的窗口坐标值并重新渲染。
其中,所述步骤S2中,通过下述方法增加 qtwayland-server 端和 qtwayland-client 端对协议接口 set_window_geometry的通信支持,使得 qtwayland xdg surface设置的坐标值可以传递到服务端:修改qtwayland 源码,应用补丁 0001-set-window-geometry.patch,增加对 qtwayland 客户端程序设置窗口坐标的接口 set_window_geometry 的支持,编译生成 deb 包并安装到系统中。
其中,还包括步骤S4:合成器在收到客户端设置窗口坐标的请求后,记录客户端程序设置的窗口坐标值,使用 OpenGL 库接口重新绘制窗口,从而更新屏幕上窗口视图的坐标。
本发明提供的支持客户端窗口坐标的轻量级wayland合成器的实现方法,通过灵活扩展 wayland 协议,实现客户端程序对窗口坐标的设置,满足习惯于桌面系统风格的用户使用需求。
附图说明
图1:本发明的方案框架图。
图2:本发明的支持客户端窗口坐标的轻量级wayland合成器的实现方法的实现流程图。
具体实施方式
为了对本发明的技术方案及有益效果有更进一步的了解,下面结合附图详细说明本发明的技术方案及其产生的有益效果。
本发明针对 wayland 渲染环境下,当打开多个应用程序时,由于客户端程序无法设置窗口坐标,各个应用程序在窗口重叠,导致无法实时观测程序运行情况的问题,提出一种通用的实现xdg-shell扩展协议的方式来支持应用程序自定义坐标。
作为新一代显示服务器,wayland本身不支持客户端程序设置窗口坐标。为了实现这个功能,需要在wayland服务端和客户端之间,建立从应用程序设置窗口坐标到服务端收到请求重新渲染的通信。
Qt Wayland Compositor API给我们提供了非常方便的接口,让我们可以实现自己的合成器程序:QWaylandCompositor 用来管理客户端程序到合成器的连接、显示设备以及键鼠设备等。QWaylandOutput 就是WaylandCompositor管理的显示屏。QWaylandOutputMode 表示显示器的分辨率和刷新率。QWaylandXdgShellV5 可以简单理解为窗口管理器的操作类,通过它我们可以处理窗口的请求,比如窗口最大化,全屏等。QWaylandXdgSurfaceV5 扩展 QWaylandSurface,我们可以基于它来开发桌面风格的合成器,比如调整窗口大小、移动窗口等。QWaylandView 对应就是显示出来的客户端窗口,客户端设置窗口坐标后,合成器通过解析request信息来更新 QWaylandView 的坐标数据,重绘窗口。
在 qtwayland 中,客户端窗口对应 QWaylandSurface,窗口管理器对应的则是QWaylandWlShell。在我们选择的 xdg-shell 中,对应的是 QWaylandXdgSurfaceV5 和QWaylandXdgShellV5。简单来说,Surface代表Wayland 客户端的一个绘图表面。客户端程序通过将画好的buffer attach到surface上来更新窗口内容。Shell是窗口管理器,客户端的 surface要想被窗口管理器管理,需要创建相应的shell surface。同一个 surface 可以有好几个 view 与之对应。一个 view 对应用户看到的一个窗口,管理的就是要被渲染的 buffer。在合成器开发时,我们需要有一个列表来维护 views。
本发明通过实现 xdg-shell 的接口协议,实现客户端应用设置窗口坐标的功能。
图1为本发明的方案框架图,如图1所示,本发明主要基于 qtwayland 开发,具体流程如下:
(1)选择开源 qtwayland 版本,需要高于 5.8,因为这个版本已实现部分 xdg-shell 扩展协议。
(2)修改 qtwayland 源码,增加 qtwayland-server 端和 qtwayland-client 端对协议接口 set_window_geometry的通信支持,使得 qtwayland xdg surface 设置的坐标值可以传递到服务端。
(3)基于 qtwayland 开发合成器程序 kw-shell,在合成器中响应客户端设置坐标的请求,记录收到新的窗口坐标值并重新渲染。图2为本发明的支持客户端窗口坐标的轻量级wayland合成器的实现方法的实现流程图。以应用程序设置窗口位置为实施例,一个详细的实现流程如下:
开发轻量化 wayland 合成器前提条件
1、qtwayland 准备工作
首先,选择 qtwayland 5.12 的版本,在源码目录 src/3rdparty/protocol 已经存在扩展协议文件 xdg-shell-unstable-v5.xml,说明这个版本已经可以支持 xdg-shell协议了。
2、修改 qtwayland 源码,应用补丁001-set-window-geometry.patch,
增加对 qtwayland 客户端程序设置窗口坐标的接口 set_window_geometry 的支持,编译生成 deb 包并安装到系统中。
3、在安装新的 qtwayland 包的系统上,开发轻量级的 qtwayland 合成器程序kw-shell。
具体的,基于 Wayland 协议和 qtwayland 库实现一个定制化的合成器,代码文件compositor.cpp 和 window.cpp,其中 compostor.cpp 实现了自定义的 Compositor类,通过继承 qtwayland 提供的接口 QWaylandCompositor 来实现。window.c 实现了自定义的 Window 类,通过继承 QOpenGLWindow 类实现,该 Window 重载了 paintGL 函数用于客户端窗口的重绘,并且重载 QOpenGLWindow 的 mousePressEvent 函数,将鼠标事件发送到合成器,从而实现客户端窗口拖动、拖拽大小等操作。自定义 Compositor 在创建时接受一个 Window 类型的参数,用于客户端程序窗口的绘制,同时可以使用该窗口来创建不同尺寸的 Compositor。初始化该合成器时,创建 QWayalndWlShell,QWaylandXdgShellV5 等对象监听客户端窗口的创建、内容更新重绘以及窗口坐标变化等信号。如上文所述,通过修改 qtwayland 打通了客户端到服务端的 set_window_geometry请求通道,自定义合成器 Compositor 中就能收到QWaylandXdgSurfaceV5::windowGeometryChanged 信号,在回调函数中更新窗口位置。同时该位置的更新触发了重绘函数 paintGL,这个函数中获取到新的坐标位置,使用 QOpenGLTextureBlitter 将窗口的纹理数据显示到屏幕上,从而实现了窗口位置的更新。
4、合成器在收到客户端设置窗口坐标的请求后,记录客户端程序设置的窗口坐标值,使用 OpenGL 库接口重新绘制窗口,从而更新屏幕上窗口视图的坐标。因此,合成器接收应用程序设置的窗口坐标信息,并重新渲染。使得应用程序可以按计划设置窗口坐标,避免应用程序窗口重叠。
wayland 协议,简单理解其实就是预先定义好一个 object 的接口,接口包括request 和 event,Server实现 request 接口,Client实现对 event 的监听和响应。当Client把对这个对象的 request 封装成消息发给Server,Server收到消息后,根据对象id的和操作码执行对应的响应函数。本专利中,客户端程序想要设置自己窗口的位置,也就是需要能更新 xdg-surface 的坐标。就把这样一个 request 封装成消息,发给 Server,Server 收到消息后,找到 Client 窗口对应的 xdg-surface,用解析出来坐标值重新绘画客户端窗口,从而实现窗口位置的更新。
Server和Client的通信通过 socket 来实现。Client把 request 请求组成message 发送给Server。Server socket 监听机制监听到这条消息后,就会执行 socket的回调函数。在这个函数里面将收到的信息反序列化,找到目标对象对应的接口函数,利用libffi 执行 server 端的 implementation 函数。
服务端与客户端的对象是一一对应的,当客户端程序申请 bind xdg-surface 对象,Server端就要创建一个资源与之对应,分别是 wl_proxy 与 wl_resource,用一张映射表来维护。
为了实现客户端程序的坐标设置功能,需要增加 set_window_geometry 这样一个请求,Server就需要实现这个函数接口。客户端程序发送的请求指明了 xdg-surface 和坐标值 (x,y),服务端解析拿到相关数据后,在重绘函数 paintGL 中,根据新的坐标值去绘画窗口,从而实现客户端窗口坐标的更新。
修改src/client/qwaylandwindow.cpp,在客户端窗口初始化或者调用接口setGeometry 调整坐标位置时,增加坐标设置的操作 mDisplay->shellIntegration()->setWindowGeometry(this, rect); 封装当前窗口的 surface 对象和坐标信息等生成request 信息发送给服务端。这条消息通过 socket 传到服务端(即合成器),服务端为了实现这个请求,增加对xdg_surface 对象的wayland 协议接口的实现,也就是增加handle_set_window_geometry,当收到了客户端请求, 为当前的 surface 保存新的坐标值,并发出 windowGeometryChanged信号。合成器收到信号后,为视图更新位置,并在重绘函数 paintGL 取到新值去渲染窗口。
本发明在 qtwayland 应用补丁 0001-set-window-geometry.patch,打通了客户端与服务端的 set_window_geometry 通道,实现了客户端窗口的坐标更新。
本发明的有益效果如下:
1、通过灵活扩展 wayland 协议,基于qtwayland 实现对应用程序自主设置窗口坐标的支持,实现了客户端程序对窗口坐标的设置,满足习惯于桌面系统风格的用户使用需求。
2、通过 wayland 显示服务器提升渲染性能,在合成窗口时不再需要拷贝窗口内容,充分利用了wayland 渲染的优点,提升图形程序渲染性能。
本发明中,所谓的“X11”,全称为X Window System ,是传统的显示服务器,已经出现三十多年。这个显示服务器架构中,由 X server 、X client 和合成器三个部分互相通信,实现屏幕上窗口的显示与管理。
本发明中,所谓的“wayland”,为新一代图形显示服务器,它的出现就是为了替代X11,也是未来的趋势。在这个架构中,合成器就是显示服务器,少了多余的中间层 server,减少冗余通信,从而渲染性能有了很大的提升。
本发明中,所谓的“合成器”,为拿到窗口树结构以及各个窗口的内容,以实现窗口透明、阴影等特效动画等效果的软件程序。
本发明中,所谓的“wayland 协议”,为在 wayland 服务端和客户端之间预先定义好的接口,从而实现服务端与客户端之间的通信。
虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的精神和范围之内,相对上述实施例进行各种变动与修改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。
Claims (3)
1.支持客户端窗口坐标的轻量级wayland合成器的实现方法,其特征在于:通过在wayland服务端和客户端之间建立从应用程序设置窗口坐标到服务端收到请求重新渲染的通信实现;
包括如下步骤:
步骤S1:选择支持xdg-shell协议的开源qtwayland版本;
步骤S2:修改 qtwayland,增加 qtwayland-server 端和 qtwayland-client 端对协议接口 set_window_geometry的通信支持,使得 qtwayland xdg surface 设置的坐标值可以传递到服务端;
步骤S3:基于 qtwayland 开发合成器程序 kw-shell,在合成器中响应客户端设置坐标的请求,记录收到新的窗口坐标值并重新渲染。
2.如权利要求1所述的支持客户端窗口坐标的轻量级wayland合成器的实现方法,其特征在于,所述步骤S2中,通过下述方法增加 qtwayland-server 端和 qtwayland-client端对协议接口 set_window_geometry的通信支持,使得 qtwayland xdg surface 设置的坐标值可以传递到服务端:修改qtwayland 源码,应用补丁 0001-set-window-geometry.patch,增加对 qtwayland 客户端程序设置窗口坐标的接口 set_window_geometry 的支持,编译生成 deb 包并安装到系统中。
3.如权利要求1所述的支持客户端窗口坐标的轻量级wayland合成器的实现方法,其特征在于,还包括步骤S4:合成器在收到客户端设置窗口坐标的请求后,记录客户端程序设置的窗口坐标值,使用 OpenGL 库接口重新绘制窗口,从而更新屏幕上窗口视图的坐标。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110842166.8A CN113672321B (zh) | 2021-07-26 | 2021-07-26 | 支持客户端窗口坐标的轻量级wayland合成器的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110842166.8A CN113672321B (zh) | 2021-07-26 | 2021-07-26 | 支持客户端窗口坐标的轻量级wayland合成器的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113672321A CN113672321A (zh) | 2021-11-19 |
CN113672321B true CN113672321B (zh) | 2023-08-22 |
Family
ID=78540096
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110842166.8A Active CN113672321B (zh) | 2021-07-26 | 2021-07-26 | 支持客户端窗口坐标的轻量级wayland合成器的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113672321B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115629838B (zh) * | 2022-12-06 | 2023-03-17 | 麒麟软件有限公司 | 基于Wayland的客户端窗口坐标管理实现方法 |
CN115809047B (zh) * | 2023-02-02 | 2023-06-23 | 麒麟软件有限公司 | Wayland合成器 |
CN117369936B (zh) * | 2023-12-04 | 2024-03-08 | 武汉凌久微电子有限公司 | 一种显示内容渲染方法及渲染系统 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105573752A (zh) * | 2015-12-11 | 2016-05-11 | 中国航空工业集团公司西安航空计算技术研究所 | 一种基于OpenGL的MiniGUI窗口系统支持方法 |
WO2016178442A1 (ko) * | 2015-05-06 | 2016-11-10 | 엘지전자 주식회사 | 디지털 디바이스 및 디지털 디바이스 제어 방법 |
CN107292807A (zh) * | 2016-03-31 | 2017-10-24 | 阿里巴巴集团控股有限公司 | 一种图形合成方法、窗口设置方法及系统 |
CN107423014A (zh) * | 2017-06-30 | 2017-12-01 | 百度在线网络技术(北京)有限公司 | 多窗口渲染方法及装置 |
CN107436760A (zh) * | 2017-06-30 | 2017-12-05 | 百度在线网络技术(北京)有限公司 | 多窗口渲染方法及装置 |
CN108536500A (zh) * | 2018-01-10 | 2018-09-14 | 上海伟世通汽车电子系统有限公司 | 提高车载终端ui界面显示帧率的方法及其系统 |
CN112527219A (zh) * | 2019-09-17 | 2021-03-19 | 中兴通讯股份有限公司 | 基于wayland协议的图形合成方法、装置和系统 |
CN113050899A (zh) * | 2021-02-07 | 2021-06-29 | 厦门亿联网络技术股份有限公司 | 一种基于Wayland协议的视频和UI的drm直接显示方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120113091A1 (en) * | 2010-10-29 | 2012-05-10 | Joel Solomon Isaacson | Remote Graphics |
-
2021
- 2021-07-26 CN CN202110842166.8A patent/CN113672321B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016178442A1 (ko) * | 2015-05-06 | 2016-11-10 | 엘지전자 주식회사 | 디지털 디바이스 및 디지털 디바이스 제어 방법 |
CN105573752A (zh) * | 2015-12-11 | 2016-05-11 | 中国航空工业集团公司西安航空计算技术研究所 | 一种基于OpenGL的MiniGUI窗口系统支持方法 |
CN107292807A (zh) * | 2016-03-31 | 2017-10-24 | 阿里巴巴集团控股有限公司 | 一种图形合成方法、窗口设置方法及系统 |
CN107423014A (zh) * | 2017-06-30 | 2017-12-01 | 百度在线网络技术(北京)有限公司 | 多窗口渲染方法及装置 |
CN107436760A (zh) * | 2017-06-30 | 2017-12-05 | 百度在线网络技术(北京)有限公司 | 多窗口渲染方法及装置 |
CN108536500A (zh) * | 2018-01-10 | 2018-09-14 | 上海伟世通汽车电子系统有限公司 | 提高车载终端ui界面显示帧率的方法及其系统 |
CN112527219A (zh) * | 2019-09-17 | 2021-03-19 | 中兴通讯股份有限公司 | 基于wayland协议的图形合成方法、装置和系统 |
CN113050899A (zh) * | 2021-02-07 | 2021-06-29 | 厦门亿联网络技术股份有限公司 | 一种基于Wayland协议的视频和UI的drm直接显示方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN113672321A (zh) | 2021-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113672321B (zh) | 支持客户端窗口坐标的轻量级wayland合成器的实现方法 | |
US8042094B2 (en) | Architecture for rendering graphics on output devices | |
US8819705B2 (en) | User interaction support across cross-environment applications | |
AU2004287140B2 (en) | System and method for a unified composition engine in a graphics processing system | |
US9049213B2 (en) | Cross-environment user interface mirroring using remote rendering | |
US7890570B2 (en) | Methods and systems for providing, by a remote machine, access to graphical data associated with a resource provided by a local machine | |
US8933949B2 (en) | User interaction across cross-environment applications through an extended graphics context | |
US5668997A (en) | Object-oriented system for servicing windows | |
US10353718B2 (en) | Providing access to a remote application via a web client | |
JP4371350B2 (ja) | 多重レベル・グラフィックス処理システムおよび方法 | |
WO2019007216A1 (zh) | 一种图层处理方法及装置 | |
US20150193904A1 (en) | Graphics acceleration for applications executing on mobile devices with multi-operating system environment | |
US5724532A (en) | Method and apparatus for exchanging information between application programs according to a drag and drop operation | |
US20120086717A1 (en) | Instant remote rendering | |
EP0834801A2 (en) | Remote control of a display system | |
JPH07160608A (ja) | プログラム・アプリケーションを表示するためのシステムおよび方法 | |
CN114741044B (zh) | 一种基于异构渲染的跨运行环境显示输出共享方法 | |
CN114741081B (zh) | 一种基于异构缓存访问的跨运行环境显示输出共享方法 | |
US20030182469A1 (en) | Distributed computer system using a graphical user interface toolkit | |
CN118312269B (zh) | 一种基于spice协议的应用虚拟化方法、系统、介质及产品 | |
CN115809047B (zh) | Wayland合成器 | |
CN111813404B (zh) | 基于混合图形显示的应用方法、介质及客户端 | |
Argue | Advanced multi-display configuration and connectivity | |
Eilemann | Project Equalizer |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |