CN115686727A - 基于wlroots的合成渲染实现方法 - Google Patents
基于wlroots的合成渲染实现方法 Download PDFInfo
- Publication number
- CN115686727A CN115686727A CN202310004998.1A CN202310004998A CN115686727A CN 115686727 A CN115686727 A CN 115686727A CN 202310004998 A CN202310004998 A CN 202310004998A CN 115686727 A CN115686727 A CN 115686727A
- Authority
- CN
- China
- Prior art keywords
- rendering
- damage
- area
- region
- intersection
- 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.)
- Granted
Links
Images
Landscapes
- Processing Or Creating Images (AREA)
Abstract
本发明涉及基于wlroots的合成渲染实现方法,区分了透明区域与不透明区域,在渲染时,遍历所有节点,遇到透明节点先过滤,遇到不透明节点就从上往下渲染,等遍历完所有不透明节点后,再遍历透明节点,并从下往上渲染,也即,将已有技术不透明节点从下向上的渲染顺序调整为从上往下渲染,由于交集区从开始就被剔除了,因此不用去渲染被覆盖的节点,减少了damage区域及渲染次数,提升了渲染效率和性能。
Description
技术领域
本发明涉及窗口渲染优化实现方法,具体涉及基于wlroots的合成渲染实现方法。
背景技术
Wayland 是一个开源项目,旨在创建 Linux 下新型的显示服务器架构,Wayland的目标是替代 X,提供一个简单、高效、轻量的,符合现代桌面要求的显示服务器架构。现代桌面的一个重要特征即窗口的合成。
Wayland 即通过合成器来直接与应用程序和视频硬件通信,并转发事件给它们。这其中,应用程序渲染图形到应用程序的缓冲中,然后合成器即显示服务器合成这些图形并显示在屏幕上(就是应用程序的窗口)。
wlroots是基于wayland框架合成器的实现。wlroots 提供了许多 wayland 接口的独立实现,主要来自 wayland.xml 和各种协议扩展,促进了跨许多合成器的可移植扩展的标准化。
wlroots 提供了强大的、独立的和可选的工具,这些工具实现了许多合成器共有的组件,例如物理空间中的输出排列。
wlroots 提供了Xwayland 抽象,允许用户拥有出色的 Xwayland 支持,而无需担心在编写合成器之上编写自己的 X11 窗口管理器。
wlroots 提供了渲染器抽象,简单的合成器可以使用它来避免直接编写Open GL代码,通过使用 wlroots,用户可以获得高性能、出色的硬件兼容性、对许多 wayland 接口的广泛支持以及舒适的开发工具。
中国发明专利(201710522646.X,多窗口渲染方法及装置)本发明提供一种多窗口渲染方法及装置,该方法包括:接收多个人机接口(HMI)控制单元发送的生成信息;根据多个生成信息分别创建对应的渲染环境对象,并基于Wayland协议生成每个渲染环境对象对应的窗口对象;分别在多个窗口对象中对相应的渲染环境对象进行渲染。本发明通过将车载应用拆分为渲染引擎和若干HMI控制单元,由各HMI控制单元分别完成人机交互控制,并由唯一且进程常驻的渲染引擎统一配置各窗口的控制逻辑和数据,实现了满足多个窗口之间乃至于与其它应用之间的联动交互需求、无需重复创建可复用资源的同时,关闭HMI应用不会导致关闭所有窗口,为用户提供了灵活便捷的使用方式,提升了用户体验。提到的多窗口渲染方法不涉及wlroots合成渲染优化。
中国发明专利(201910004988.1,渲染方法、渲染装置和渲染引擎)本发明实施例提出一种渲染方法、渲染装置和渲染引擎。其中该方法包括:控制各画布对象监听渲染驱动通知;控制监听到所述渲染驱动通知的各画布对象依次触发渲染事件;获取已触发渲染事件的画布对象自身的各待渲染效果;按照各所述待渲染效果对所述已触发渲染事件的画布对象内的待渲染图形进行渲染。本发明实施例通过渲染驱动通知来驱动各画布对象的渲染过程,控制监听到渲染驱动通知的各画布对象依次触发渲染事件,能够实现多实例渲染,提高了渲染的速度和效率。提到的渲染方法不涉及wlroots合成渲染优化。
中国发明专利(202210830788.3,基于3D云渲染的多用户协作方法、云渲染服务器及云渲染系统)本发明提供了一种基于3D云渲染的多用户协作方法、云渲染服务器及云渲染系统,属于云渲染的技术领域,用于解决相关技术中云渲染占用云服务器的资源较多的问题。在该方法、云渲染服务器即云渲染系统中,在一3D场景数据中配置与多个客户端一一对应的多个虚拟摄像头,以使所述客户端接收相应的所述虚拟摄像头采集所得的子场景画面;获取所述客户端发送的控制指令,以根据所述控制指令改变对应的虚拟摄像头采集所得的子场景画面的内容。通过采用上述技术方案,既不需要在云服务器配置多份3D应用程序实例,云服务器也不需要进行数据同步,从而有效减少了云服务器资源的占用。提到的云渲染以及渲染系统不涉及wlroots的合成渲染优化。
当前wlroots合成渲染damage过程中未考虑surface不透明,透明等情况damage是否可以优化。如图1所示,目前合成器渲染的过程如下:
1、从下往上遍历damage区域;
2、判断damage区域与每一个surface之间是否存在交集区域,若否,则循环判断damage区域与下一个surface之间是否存在交集区域,若是,则执行步骤2;
3、针对步骤2得到的交集区域,裁剪交集区域,并从下往上渲染贴纹理;
4、判断damage区域是否已经与每一个surface进行过交集(对应图1中“循环次数是否为n”,其中n为surface的个数);若未遍历完毕,则重复步骤2至3,若damage区域已经与每一个surface进行过交集,则遍历完毕,结束。
也即,目前合成器渲染过程中始终是damage与surface从下往上求交集,如果没交集跳过此surface,跟下一个surface求交集,如果存在交集则形成裁剪区,从下往上渲染,直至遍历完所有surface。在使用场景中,大部分surface是不透明的,按目前技术,damage与surface求交集后并不会从总的damage区域剔除出来,这样会被重复计算,导致效率与性能很低。在合成渲染过程中,如何减少damage区域,减少渲染次数,提高渲染性能是面临的重要问题。
发明内容
为解决已有技术存在的不足,本发明提供了一种基于wlroots的合成渲染实现方法,包括:
步骤S1:wlroots合成器对客户端或者服务端操作所产生的damage数据进行初始化,得到node节点信息及需要渲染的damage区域信息;
步骤S2:将damage区域拷贝到变量保存,从上往下遍历所有node节点,得到damage区域与每一个surface的不透明区域的交集区域;
步骤S3:顺次标识步骤S2中的交集区域,裁剪交集区域,并从上往下渲染贴纹理;
步骤S4:计算damage区域,顺次将经过渲染的交集区域从damage区域中剔除出来;直至damage区域为空或遍历完毕;
步骤S5:从下往上遍历,得到damage与每一个surface的透明区域的交集区域;
步骤S6:顺次标识步骤S5中的交集区域,裁剪交集区域,并从下往上渲染贴纹理;
步骤S7:计算damage区域,顺次将经过渲染的交集区域从damage区域中剔除出来;直至damage区域为空或遍历完毕。
其中,所述步骤S1中,wlroots合成器通过wlr_scene_node定义一个结构体,该结构体包括节点信息及需要渲染的区域信息。
其中,所述步骤S2中,通过wayland协议api wl_list_for_each遍历所有node节点,得到damage区域与每一个surface的交集区域。
基于wlroots的合成渲染实现方法,通过调整渲染顺序,Wlroots合成器对damage数据采取处理,渲染时对不同的node节点进行不同处理,最终减少damage区域,减少渲染次数,提高性能。
附图说明
图1:已有技术的wlroots合成渲染流程图。
图2:本发明的wlroots合成渲染流程图。
具体实施方式
为了对本发明的技术方案及有益效果有更进一步的了解,下面结合附图详细说明本发明的技术方案及其产生的有益效果。
在渲染node节点过程中是先从上往下渲染不透明节点,等不透明节点全部渲染完毕了再从下往上渲染透明节点。实际应用场景中,绝大部分窗口的节点是不透明的,少数是透明的。因为不透明节点是不透明的,因此会遮盖住下方的节点,此时从上往下渲染,先渲染上方节点,渲染完后,交集区会从damage剔除出来,再渲染被遮住下方节点时因为交集区已经被剔除了,就不会渲染了,因此极大减少了渲染次数,提升了性能,现有技术从下往上渲染,不区分透明与不透明,被遮盖的不透明节点会被反复渲染。
因此,为了解决wlroots合成渲染效率跟性能低的问题,本发明区分了透明区域与不透明区域,在渲染时,遍历所有节点,遇到透明节点先过滤,遇到不透明节点就从上往下渲染,等遍历完所有不透明节点后,再遍历透明节点,并从下往上渲染,也即,将已有技术不透明节点从下向上的渲染顺序调整为从上往下渲染,由于交集区从开始就被剔除了,因此不用去渲染被覆盖的节点,减少了damage区域及渲染次数,提升了渲染效率和性能。
本发明基于wayland协议,并使用协议中的wl_surface_damage及wlroots的wlr_scene_node等数据结构来实现渲染顺序的调整:在渲染过程中,需要遍历scene_node节点,过滤完全隐藏在不透明节点后面的节点,也即,如果遇到完全隐藏在不透明节点后面的节点时就跳过此节点,不做渲染。
通常情况下,触发damage有以下情况:窗口缩小、窗口放大、窗口移动、窗口焦点切换等。其中窗口移动跟焦点切换是服务端产生damage,其他情况是客户端commit提交damage给到服务端,客户端commit的damage数据通过wayland协议传给服务端,比如窗口的缩小,放大,窗口最小化,最大化操作产生的damage。Wlroots合成器对damage数据采取处理,渲染时对不同的node节点进行不同处理,最终减少damage区域,减少渲染次数,提高性能。
图2为本发明的wlroots合成渲染流程图,如图2所示,本发明的基于wlroots的合成渲染优化实现方法具体实施步骤如下:
1、变量初始化,基于wlroots合成器的wlr_scene_node定义一个结构体包含节点信息,需要渲染的区域等信息,并进行初始化。
2、计算交集区,将damage区域拷贝到变量保存,使用wayland协议api wl_list_for_each遍历所有node节点,得到damage与每一个surface的不透明区域的交集区域,若damage与当前的surface的不透明区域之间不存在交集,则循环与下一个surface的不透明区域进行交集,若damage与当前的surface的不透明区域之间存在交集,则执行步骤3-4。
3、渲染,标识前面得到的交集区,使用函数裁剪交集区域,调整渲染顺序,不透明节点从上往下渲染,透明节点从下往上渲染(图2的下半部分操作方法,即下文步骤7的操作),不透明节点遮住了下方节点,两节点交集区在上方节点渲染后,交集区会从damage区域剔除了,那渲染下方节点时,交集区已经被剔除了,就不需要渲染了,透明节点按现有技术从下往上贴,这样减少了渲染次数。
4、计算damage区域,把前面渲染完的交集区域从damage区域剔除出来,每渲染完一个交集区就从damage区域减出来。这样减少了damage区域。
5、循环步骤2-4,直至damage与surface没有交集区域,或者damage为空。
6、渲染完毕不透明区域后,开始渲染透明区域。damage区域从下往上与透明区域求交集,若damage与当前的surface的透明区域之间不存在交集,则循环与下一个surface的透明区域进行交集,若damage与当前的surface的透明区域之间存在交集,则执行步骤7-8。
7、渲染交集区,如果存在交集区就标识交集区,如果没有就跳过此surface,与下一个surface求交集。然后裁剪交集区,按照从下往上的顺序渲染交集区。
8、计算damage区域,把前面渲染完的交集区从damage区域减出来
9、循环以上步骤6-8,直至damage为空或者遍历完毕。这样整个操作完成了。
其中,遍历完毕就是遍历完了所有damage区域与透明区域或不透明区域的交集区域,在此情况下,damage区域不一定为空,因为有些damage区域与透明区域或不透明区域不存在交集的。而damage为空的情况下,damage一定已遍历完毕。
本发明中,Wayland基于domain socket实现了一套display server与client间通信的库,并且以XML形式定义了一套可扩展通信协议。这个协议分为Wayland核心协议和扩展协议。
本发明中,所谓的Wlroots 是一个用于构建 Wayland 合成器的框架,它实现了种类繁多的 Wayland 合成器功能,是目前最成熟的 Wayland 合成器框架。 它提供抽象底层显示和输入硬件的后端,包括 KMS/DRM、libinput、Wayland。
本发明中,所谓的Damage,指server端需要重绘的区域。damage区域可以是client端渲染本身表面内容产生的,也可以是server端产生的,移动窗口跟窗口切换焦点(调整窗口层级)属于server端。wl_surface_damage是client端向server发送的一个事件。参数为x为局部x坐标,y为局部y坐标,width为损坏区域的宽度,height为损坏矩形的高度。最开始,client端将整个surface作为初始区域给damage,目的就是绘制surface。
本发明通过上述方法对wlroots合成渲染进行优化后,渲染效率提升显著,目前使用场景绝大部分窗口是不透明的,优化前,假设有30个窗口不透明且完全覆盖,那合成器需要渲染30次,优化后只需要渲染一次;针对涉及播放视频的场景,当下方窗口在播放视频,上方被不透明窗口完全覆盖,优化前,下方视频一直播放,就会一直渲染,优化后,仅渲染上方不透明窗口,视频界面不会反复渲染。性能与效率提升非常大。
虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的精神和范围之内,相对上述实施例进行各种变动与修改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。
Claims (3)
1.基于wlroots的合成渲染实现方法,其特征在于包括:
步骤S1:wlroots合成器对客户端或者服务端操作所产生的damage数据进行初始化,得到node节点信息及需要渲染的damage区域信息;
步骤S2:将damage区域拷贝到变量保存,从上往下遍历所有node节点,得到damage区域与每一个surface的不透明区域的交集区域;
步骤S3:顺次标识步骤S2中的交集区域,裁剪交集区域,并从上往下渲染贴纹理;
步骤S4:计算damage区域,顺次将经过渲染的交集区域从damage区域中剔除出来;直至damage区域为空或遍历完毕;
步骤S5:从下往上遍历,得到damage与每一个surface的透明区域的交集区域;
步骤S6:顺次标识步骤S5中的交集区域,裁剪交集区域,并从下往上渲染贴纹理;
步骤S7:计算damage区域,顺次将经过渲染的交集区域从damage区域中剔除出来;直至damage区域为空或遍历完毕。
2.如权利要求1所述的基于wlroots的合成渲染实现方法,其特征在于:所述步骤S1中,wlroots合成器通过wlr_scene_node定义一个结构体,该结构体包括节点信息及需要渲染的区域信息。
3.如权利要求1所述的基于wlroots的合成渲染实现方法,其特征在于:所述步骤S2中,通过wayland协议api wl_list_for_each遍历所有node节点,得到damage区域与每一个surface的交集区域。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310004998.1A CN115686727B (zh) | 2023-01-04 | 2023-01-04 | 基于wlroots的合成渲染实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310004998.1A CN115686727B (zh) | 2023-01-04 | 2023-01-04 | 基于wlroots的合成渲染实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115686727A true CN115686727A (zh) | 2023-02-03 |
CN115686727B CN115686727B (zh) | 2023-04-14 |
Family
ID=85057084
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310004998.1A Active CN115686727B (zh) | 2023-01-04 | 2023-01-04 | 基于wlroots的合成渲染实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115686727B (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104751507A (zh) * | 2013-12-31 | 2015-07-01 | 北界创想(北京)软件有限公司 | 图形内容渲染方法和装置 |
CN107423014A (zh) * | 2017-06-30 | 2017-12-01 | 百度在线网络技术(北京)有限公司 | 多窗口渲染方法及装置 |
CN111381914A (zh) * | 2018-12-29 | 2020-07-07 | 中兴通讯股份有限公司 | 一种云桌面虚机实现3d能力的方法和系统 |
CN111414960A (zh) * | 2020-03-18 | 2020-07-14 | 大连民族大学 | 一种人工智能图像特征提取系统及其特征识别方法 |
CN112328130A (zh) * | 2020-09-04 | 2021-02-05 | 华为技术有限公司 | 显示处理方法及电子设备 |
CN113398579A (zh) * | 2021-06-21 | 2021-09-17 | 深圳市创客火科技有限公司 | 无人机对战的场景渲染方法、装置及计算机可读存储介质 |
CN114896002A (zh) * | 2022-04-13 | 2022-08-12 | 北京智象信息技术有限公司 | 一种基于Wayland协议的浏览器应用窗口层级切换方法及装置 |
CN114926553A (zh) * | 2022-05-12 | 2022-08-19 | 中国科学院计算技术研究所 | 基于神经辐射场的三维场景一致性风格化方法及系统 |
CN115131488A (zh) * | 2022-08-31 | 2022-09-30 | 麒麟软件有限公司 | wayland图形显示环境下管理显示缓存的方法及系统 |
CN115546410A (zh) * | 2022-09-22 | 2022-12-30 | 北京正负无限科技有限公司 | 窗口展示方法、装置、电子设备及存储介质 |
-
2023
- 2023-01-04 CN CN202310004998.1A patent/CN115686727B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104751507A (zh) * | 2013-12-31 | 2015-07-01 | 北界创想(北京)软件有限公司 | 图形内容渲染方法和装置 |
CN107423014A (zh) * | 2017-06-30 | 2017-12-01 | 百度在线网络技术(北京)有限公司 | 多窗口渲染方法及装置 |
CN111381914A (zh) * | 2018-12-29 | 2020-07-07 | 中兴通讯股份有限公司 | 一种云桌面虚机实现3d能力的方法和系统 |
CN111414960A (zh) * | 2020-03-18 | 2020-07-14 | 大连民族大学 | 一种人工智能图像特征提取系统及其特征识别方法 |
CN112328130A (zh) * | 2020-09-04 | 2021-02-05 | 华为技术有限公司 | 显示处理方法及电子设备 |
CN113398579A (zh) * | 2021-06-21 | 2021-09-17 | 深圳市创客火科技有限公司 | 无人机对战的场景渲染方法、装置及计算机可读存储介质 |
CN114896002A (zh) * | 2022-04-13 | 2022-08-12 | 北京智象信息技术有限公司 | 一种基于Wayland协议的浏览器应用窗口层级切换方法及装置 |
CN114926553A (zh) * | 2022-05-12 | 2022-08-19 | 中国科学院计算技术研究所 | 基于神经辐射场的三维场景一致性风格化方法及系统 |
CN115131488A (zh) * | 2022-08-31 | 2022-09-30 | 麒麟软件有限公司 | wayland图形显示环境下管理显示缓存的方法及系统 |
CN115546410A (zh) * | 2022-09-22 | 2022-12-30 | 北京正负无限科技有限公司 | 窗口展示方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN115686727B (zh) | 2023-04-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
RU2324229C2 (ru) | Визуальный и пространственный графические интерфейсы | |
US20200126285A1 (en) | Frameworks for Graphics Animation and Compositing Operations | |
EP3441943B1 (en) | Framework for graphics animation and compositing operations | |
US6154215A (en) | Method and apparatus for maintaining multiple representations of a same scene in computer generated graphics | |
US8884947B2 (en) | Image processing apparatus and image processing method | |
US7409248B2 (en) | Layer based paint operations | |
US9588651B1 (en) | Multiple virtual environments | |
Allard et al. | A shader-based parallel rendering framework | |
WO2014191329A1 (en) | Image edits propagation to underlying video sequence via dense motion fields | |
CN103544730A (zh) | 一种基于粒子系统的图片处理方法 | |
CN115686727B (zh) | 基于wlroots的合成渲染实现方法 | |
US20120256946A1 (en) | Image processing apparatus, image processing method and program | |
Durand | The “TOON” project: requirements for a computerized 2D animation system | |
US20060232597A1 (en) | Hybrid vector/raster based paint | |
CN111897530B (zh) | 基于ue4平台的ui系统及方法 | |
JP4260747B2 (ja) | 動画像構成方法及びシーン構成方法 | |
TWI490815B (zh) | 影像效果顯示方法及電子裝置 | |
CN108184054A (zh) | 一种用于智能终端拍摄图像的预处理方法及预处理装置 | |
Bill et al. | Computer sculpting of polygonal models using virtual tools | |
Schnorf | Integrating video into an application framework | |
WO2023134537A1 (zh) | 分屏特效道具生成方法、装置、设备和介质 | |
JP3750171B2 (ja) | 描画色変更方法、及び画像作成装置 | |
Qi et al. | Quasi-3D cell-based Animation. | |
Selgrad et al. | Faster Ray-Traced Shadows for Hybrid Rendering of Fully Dynamic Scenes by Pre-BVH Culling. | |
CN116880791A (zh) | 一种多媒体资源跨硬件移动操作方法 |
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 |