基于wlroots的合成渲染实现方法技术

技术编号:36575402 阅读:55 留言:0更新日期:2023-02-04 17:33
本发明专利技术涉及基于wlroots的合成渲染实现方法,区分了透明区域与不透明区域,在渲染时,遍历所有节点,遇到透明节点先过滤,遇到不透明节点就从上往下渲染,等遍历完所有不透明节点后,再遍历透明节点,并从下往上渲染,也即,将已有技术不透明节点从下向上的渲染顺序调整为从上往下渲染,由于交集区从开始就被剔除了,因此不用去渲染被覆盖的节点,减少了damage区域及渲染次数,提升了渲染效率和性能。能。能。

【技术实现步骤摘要】
基于wlroots的合成渲染实现方法


[0001]本专利技术涉及窗口渲染优化实现方法,具体涉及基于wlroots的合成渲染实现方法。

技术介绍

[0002]Wayland 是一个开源项目,旨在创建 Linux 下新型的显示服务器架构,Wayland 的目标是替代 X,提供一个简单、高效、轻量的,符合现代桌面要求的显示服务器架构。现代桌面的一个重要特征即窗口的合成。
[0003]Wayland 即通过合成器来直接与应用程序和视频硬件通信,并转发事件给它们。这其中,应用程序渲染图形到应用程序的缓冲中,然后合成器即显示服务器合成这些图形并显示在屏幕上(就是应用程序的窗口)。
[0004]wlroots是基于wayland框架合成器的实现。wlroots 提供了许多 wayland 接口的独立实现,主要来自 wayland.xml 和各种协议扩展,促进了跨许多合成器的可移植扩展的标准化。
[0005]wlroots 提供了强大的、独立的和可选的工具,这些工具实现了许多合成器共有的组件,例如物理空间中的输出排列。
[0006]wlroots 提供了Xwayland 抽象,允许用户拥有出色的 Xwayland 支持,而无需担心在编写合成器之上编写自己的 X11 窗口管理器。
[0007]wlroots 提供了渲染器抽象,简单的合成器可以使用它来避免直接编写Open GL 代码,通过使用 wlroots,用户可以获得高性能、出色的硬件兼容性、对许多 wayland 接口的广泛支持以及舒适的开发工具。
[0008]中国专利技术专利(201710522646.X,多窗口渲染方法及装置)本专利技术提供一种多窗口渲染方法及装置,该方法包括:接收多个人机接口(HMI)控制单元发送的生成信息;根据多个生成信息分别创建对应的渲染环境对象,并基于Wayland协议生成每个渲染环境对象对应的窗口对象;分别在多个窗口对象中对相应的渲染环境对象进行渲染。本专利技术通过将车载应用拆分为渲染引擎和若干HMI控制单元,由各HMI控制单元分别完成人机交互控制,并由唯一且进程常驻的渲染引擎统一配置各窗口的控制逻辑和数据,实现了满足多个窗口之间乃至于与其它应用之间的联动交互需求、无需重复创建可复用资源的同时,关闭HMI应用不会导致关闭所有窗口,为用户提供了灵活便捷的使用方式,提升了用户体验。提到的多窗口渲染方法不涉及wlroots合成渲染优化。
[0009]中国专利技术专利(201910004988.1,渲染方法、渲染装置和渲染引擎)本专利技术实施例提出一种渲染方法、渲染装置和渲染引擎。其中该方法包括:控制各画布对象监听渲染驱动通知;控制监听到所述渲染驱动通知的各画布对象依次触发渲染事件;获取已触发渲染事件的画布对象自身的各待渲染效果;按照各所述待渲染效果对所述已触发渲染事件的画布对象内的待渲染图形进行渲染。本专利技术实施例通过渲染驱动通知来驱动各画布对象的渲染过程,控制监听到渲染驱动通知的各画布对象依次触发渲染事件,能够实现多实例渲染,提高了渲染的速度和效率。提到的渲染方法不涉及wlroots合成渲染优化。
[0010]中国专利技术专利(202210830788.3,基于3D云渲染的多用户协作方法、云渲染服务器及云渲染系统)本专利技术提供了一种基于3D云渲染的多用户协作方法、云渲染服务器及云渲染系统,属于云渲染的
,用于解决相关技术中云渲染占用云服务器的资源较多的问题。在该方法、云渲染服务器即云渲染系统中,在一3D场景数据中配置与多个客户端一一对应的多个虚拟摄像头,以使所述客户端接收相应的所述虚拟摄像头采集所得的子场景画面;获取所述客户端发送的控制指令,以根据所述控制指令改变对应的虚拟摄像头采集所得的子场景画面的内容。通过采用上述技术方案,既不需要在云服务器配置多份3D应用程序实例,云服务器也不需要进行数据同步,从而有效减少了云服务器资源的占用。提到的云渲染以及渲染系统不涉及wlroots的合成渲染优化。
[0011]当前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进行过交集,则遍历完毕,结束。
[0012]也即,目前合成器渲染过程中始终是damage与surface从下往上求交集,如果没交集跳过此surface,跟下一个surface求交集,如果存在交集则形成裁剪区,从下往上渲染,直至遍历完所有surface。在使用场景中,大部分surface是不透明的,按目前技术,damage与surface求交集后并不会从总的damage区域剔除出来,这样会被重复计算,导致效率与性能很低。在合成渲染过程中,如何减少damage区域,减少渲染次数,提高渲染性能是面临的重要问题。

技术实现思路

[0013]为解决已有技术存在的不足,本专利技术提供了一种基于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区域为空或遍历完毕。
[0014]其中,所述步骤S1中,wlroots合成器通过wlr_scene_node定义一个结构体,该结构体包括节点信息及需要渲染的区域信息。
[0015]其中,所述步骤S2中,通过wayland协议apiwl_list_for_each遍历所有node节点,得到damage区域与每一个surface的交集区域。
[0016]基于wlroots的合成渲染实现方法,通过调整渲染顺序,Wlroots合成器对damage数据采取处理,渲染时对不同的node节点进行不同处理,最终减少damage区域,减少渲染次数,提高性能。
...

【技术保护点】

【技术特征摘要】
1.基于wlroots的合成渲染实现方法,其特征在于包括:步骤S1:wlroots合成器对客户端或者服务端操作所产生的damage数据进行初始化,得到node节点信息及需要渲染的damage区域信息;步骤S2:将damage区域拷贝到变量保存,从上往下遍历所有node节点,得到damage区域与每一个surface的不透明区域的交集区域;步骤S3:顺次标识步骤S2中的交集区域,裁剪交集区域,并从上往下渲染贴纹理;步骤S4:计算damage区域,顺次将经过渲染的交集区域从damage区域中剔除出来;直至damage区域为空或遍历完毕;步骤S5:从下往上遍历,得到damage与每一个surface的透明区域的交集区域;步骤S...

【专利技术属性】
技术研发人员:夏接建易强张铎周磊陈霖翔
申请(专利权)人:麒麟软件有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1