CN114741081B - 一种基于异构缓存访问的跨运行环境显示输出共享方法 - Google Patents

一种基于异构缓存访问的跨运行环境显示输出共享方法 Download PDF

Info

Publication number
CN114741081B
CN114741081B CN202210658915.6A CN202210658915A CN114741081B CN 114741081 B CN114741081 B CN 114741081B CN 202210658915 A CN202210658915 A CN 202210658915A CN 114741081 B CN114741081 B CN 114741081B
Authority
CN
China
Prior art keywords
display
screen capture
data
desktop
virtual
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
Application number
CN202210658915.6A
Other languages
English (en)
Other versions
CN114741081A (zh
Inventor
温研
晏华
赵旺林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Linzhuo Information Technology Co Ltd
Original Assignee
Beijing Linzhuo Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Linzhuo Information Technology Co Ltd filed Critical Beijing Linzhuo Information Technology Co Ltd
Priority to CN202210658915.6A priority Critical patent/CN114741081B/zh
Publication of CN114741081A publication Critical patent/CN114741081A/zh
Application granted granted Critical
Publication of CN114741081B publication Critical patent/CN114741081B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/38Creation or generation of source code for implementing user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Graphics (AREA)
  • Human Computer Interaction (AREA)
  • Digital Computer Display Output (AREA)

Abstract

本发明公开了一种基于异构缓存访问的跨运行环境显示输出共享方法,通过在安卓兼容环境内创建与虚显相关的内含虚拟图层的虚拟显示设备,在图像绘制过程中虚拟图层将截屏数据转换为材质后再进行渲染,通过虚拟显示设备与运行在安卓兼容环境内的截屏进程的配合实现直接在安卓兼容环境内截取并共享桌面系统的截屏,因此仅需要三次内存复制即可实现截屏数据的共享,从而有效降低了CPU利用率,减少了共享截屏数据的系统延时,提高了共享过程的流畅性。

Description

一种基于异构缓存访问的跨运行环境显示输出共享方法
技术领域
本发明属于在跨运行环境的数据共享技术领域,具体涉及一种基于异构缓存访问的跨运行环境显示输出共享方法。
背景技术
运行在不同环境中的应用程序通过对输入数据的处理形成输出数据,输出数据或以图片或视频的方式显示输出、或以音频的方式输出,也可以文件等方式进行输出。对于运行环境而言,屏幕显示也是一种显示输出的方式。
Linux或Windows等桌面操作系统上的安卓兼容环境(下文简称安卓兼容环境)是一种在Linux或Windows操作系统上运行安卓应用的技术,对丰富操作系统应用生态有着重要的意义。通常情况下,典型的安卓兼容环境主要包括安卓应用显示单元和安卓应用兼容服务,安卓应用显示单元用于在桌面操作系统上实现安卓应用的用户界面,安卓应用兼容服务用于提供运行于桌面操作系统上的安卓兼容环境,通过安卓应用显示单元与安卓应用兼容服务的相互配合实现安卓应用在桌面操作系统上的有效运行,例如,现有安卓兼容环境的实现方案有xDroid,它包括xDroidUI和xDroidServer,xDroidUI为安卓应用显示单元,xDroidServer为安卓应用兼容服务。
用户在使用安卓应用的过程中,往往会有分享屏幕的需求,例如,在使用视频会议类软件时用户有共享桌面的需求。现有安卓系统的显示系统中,一般主要包括CPU、GPU和Display三个部分,其中,CPU负责计算帧数据,然后把计算完成的图像数据交给GPU,GPU对图像数据进行渲染,然后把渲染后的数据放到图形缓存区中,SurfaceFlinger将从图形缓冲区中取出的数据合成一帧的数据放入帧缓冲区,最后Display从帧缓冲区中取出这些数据展示到屏幕上。VirtualDisplay是虚拟的Display,能够抓取屏幕上显示的内容主要用于截屏过程,能够满足用户共享屏幕的需求。
目前,现有的跨运行环境的显示输出共享方式一般为,在桌面系统截取屏幕再将截屏数据通过RPC调用或内存共享等方式复制到安卓环境内,然而这一过程通常需要至少四次内存复制才能完成数据共享,即:将截屏数据从桌面端的显示服务器复制到桌面端应用内存,然后从桌面端应用内存复制到桌面端与安卓端共享内存,再从共享内存复制到安卓端显示服务器(SurfaceFlinger)内存,最后是从安卓端显示服务器内存复制到安卓端显存中进行显示。
由此可见,由于现有技术所涉及的内存复制过程比较复杂,因此会降低桌面端与安卓端截屏数据共享的效率,从而导致桌面端与安卓端共享显示输出数据时出现延迟问题,为用户操作带来不便。
发明内容
有鉴于此,本发明提供了一种基于异构缓存访问的跨运行环境显示输出共享方法,能够在不同运行环境之间实现显示输出的共享。
本发明提供的一种基于异构缓存访问的跨运行环境显示输出共享方法,包括以下步骤:
在安卓兼容环境中,当SurfaceFlinger服务接收到显示状态更新消息后,遍历当前保存的Display,若存在状态为读取状态且类型为虚显的Display,则创建与该Display相关的虚拟显示设备,虚拟显示设备获取与Display相对应的桌面窗口的窗口句柄,截屏进程根据所述窗口句柄获取桌面系统截屏数据,虚拟显示设备将所述截屏数据输出到屏幕显示;如果不存在状态为读取状态且类型为虚显的Display,则退出本流程;当安卓兼容环境的虚显销毁时,结束截屏进程,退出本流程;在桌面系统中,设置桌面显示设备的访问权限使所述截屏进程能够访问桌面显示设备;所述虚拟显示设备为包含单一虚拟图层的DisplayDevice;所述虚拟显示设备将所述截屏数据输出到屏幕显示的过程为:当绘制虚拟图层时将截屏数据转换为材质后再将材质渲染到屏幕显示。
进一步地,所述虚拟图层的实现方式,包括以下步骤:
步骤1.1、获取安卓兼容环境内的显示设备,初始化OpenGL环境;创建渲染图层并将其绑定到与虚显对应的桌面窗口,创建渲染上下文得到渲染的位置变量和材质变量;将绘制状态设置为不透明且始终可见,且可视区域的尺寸与桌面系统的屏幕尺寸相同;
步骤1.2、若当前虚拟图层为新建图层,则创建截屏数据队列,并启动截屏进程,执行步骤1.3,截屏数据队列为保存带有时间戳的截屏数据帧的链表;若当前虚拟图层不是新建图层,则执行步骤1.3;
步骤1.3、获取桌面系统的当前时间,选择截屏数据队列中时间戳与当前时间的差值小于阈值的数据写入待绘制帧列表,清空当前的截屏数据队列,执行步骤1.4;若截屏数据队列中不存在时间戳与当前时间的差值小于阈值的数据,则等待设定时间后执行步骤1.3;
步骤1.4、若截屏数据队列为空且最后绘制帧不为空,则使用着色器将最后绘制帧中的截屏数据根据步骤1.1得到的材质变量转换为材质,再根据步骤1.1得到的位置变量将材质渲染到显示设备;若截屏数据队列为空且最后绘制帧也为空,则将提示信息渲染到显示设备;若截屏数据队列不为空,则使用着色器将待绘制帧列表中的截屏数据帧根据步骤1.1得到的材质变量转换为材质,再根据步骤1.1创建的位置变量将材质渲染到显示设备,然后将待绘制帧列表中最新一帧数据保存为最后绘制帧,清空当前的待绘制帧列表。
进一步地,所述着色器为基于着色器语言GLSL实现的着色器。
进一步地,所述截屏进程根据虚拟图层获取的窗口句柄获取桌面显示设备,发起截屏请求获取截屏数据,再将截屏数据添加到截屏数据队列的尾部。
进一步地,所述截屏进程在Linux系统中的实现方式包括以下步骤:
步骤2.1、若Linux系统采用的显示服务器协议为X11协议,则执行步骤2.2;若Linux系统采用的显示服务器协议为Wayland协议,则执行步骤2.3;
步骤2.2、根据窗口句柄获取桌面显示设备,发起截屏请求,再获取截屏数据,最后将截屏数据添加到截屏数据队列的尾部;
步骤2.3、根据窗口句柄采用dbus接口获取桌面显示设备,创建格式为RGBA的安卓渲染缓冲区,将桌面显示设备的原始缓冲区替换为安卓渲染缓冲区,刷新桌面显示设备更新安卓渲染缓冲区内数据,读取安卓渲染缓冲区内截屏数据,并将截屏数据格式转换为RGBA格式后将其添加到截屏数据队列的尾部;恢复桌面显示设备的原始缓冲区。
进一步地,所述步骤2.3中读取安卓渲染缓冲区内截屏数据后,若Linux系统的字节序为小端序则将读出的截屏数据转换为RGBA格式数据。
有益效果:
1、本发明通过在安卓兼容环境内创建与虚显相关的虚拟显示设备,虚拟显示设备中仅包含一个虚拟图层,虚拟图层构建渲染图层绑定与虚显对应的桌面窗口、建立截屏数据队列保存截屏数据,在图像绘制过程中虚拟图层将截屏数据转换为材质后再进行渲染,通过虚拟显示设备与运行在安卓兼容环境内的截屏进程的配合实现直接在安卓兼容环境内截取并共享桌面系统的截屏,因此仅需要三次内存复制即可实现截屏数据的共享,从而有效降低了CPU利用率,减少了共享截屏数据的系统延时,提高了共享过程的流畅性。
2、本发明通过在安卓系统内进行系统级的设计实现,进一步提高了桌面系统屏幕共享的执行效率,提升了使用效果。
附图说明
图1为本发明提供的一种基于异构缓存访问的跨运行环境显示输出共享方法的流程图。
具体实施方式
下面结合附图并举实施例,对本发明进行详细描述。
为了便于理解本专利提供的技术方案,现将与本专利相关的安卓系统技术名词以及桌面系统相关名词列举如下:
SurfaceFlinger服务,是用于在安卓系统中将接收到的多个来源的图形显示数据合成后发送到显示设备。例如,安卓应用一般包括三个图层:顶部的状态栏、底部或者侧面的导航栏以及应用的界面,单独更新和渲染图层,再将图层发送到SurfaceFlinger服务进行合成后刷新到硬件显示。
绘制表面(Surface),是安卓应用窗口第一次显示时请求安卓系统内的WindowManagerService服务为其创建的用于记录窗口显示内容的类。安卓系统中,窗口(Window)是从设计者角度定义的关于层次和布局的类,Surface则是从工程师实现角度定义的类。窗口的内容是变化的,Surface需要有空间来记录每个时刻窗口的内容。在安卓系统的SurfaceFlinger实现里,Surface一般具有两个缓冲区,分别用于绘画和显示,两个缓冲区按照固定的频率进行交换,从而实现窗口的动态刷新。
图层(Layer),是SurfaceFlinger 进行合成的基本操作单元。Layer在安卓应用请求创建Surface时在SurfaceFlinger内部创建,因此Surface与Layer对应。
显示(Display),是用于从帧缓冲区中取出数据信息并将数据信息展示到屏幕上的类,其中,虚显(VirtualDisplay)是Display的子类。Display的状态一般包括读取状态(mCurrentState)和待绘制状态(mDrawingState)两类,其中,处于待绘制状态的Display通常为处于读取状态的Display的子集。
虚拟显示绘制表面(VirtualDisplaySurface),是安卓系统为虚显创建的用于渲染图形数据的类。
显示设备(DisplayDevice),是用于描述显示屏的类,用于是将DisplaySurface中的渲染数据显示在显示屏上。
显示服务器,是运行在桌面操作系统中的程序,负责协调客户端与操作系统的其他部分之间、硬件与操作系统之间的输入和输出。显示服务器基于显示服务器协议与客户端进行通信将客户端的信息显示在显示设备中,Windows系统中显示服务器协议为 XWindow,Linux系统中显示服务器协议包括X11、Wayland 和 Mir,其中,X11是 Linux 发行版中最常用的显示服务器协议。本发明中,为了避免混淆便于表述,将桌面系统中的显示设备(DisplayDevice)称为桌面显示设备,将安卓系统中的显示设备(DisplayDevice)称为安卓显示设备。
本发明提供的一种基于异构缓存访问的跨运行环境显示输出共享方法,流程如图1所示,包括以下步骤:
在桌面系统中,根据显示服务器的类型,设置桌面显示设备的访问权限,使安卓兼容环境中的截屏进程能够访问桌面显示设备;
当安卓兼容环境的SurfaceFlinger服务接收到显示状态更新消息后,遍历当前保存的Display,若存在状态仅为读取状态且类型为虚显的Display,则创建与该Display相关的虚拟显示设备,由虚拟显示设备将截屏进程获取到的截屏数据输出到屏幕显示;如果不存在状态为读取状态且类型为虚显的Display,则退出本流程;当安卓兼容环境的虚显销毁时,结束截屏进程,退出本流程;
其中,虚拟显示设备为仅包含一个虚拟图层的DisplayDevice;虚拟图层构建渲染图层获取与虚显对应的桌面窗口的窗口句柄、建立截屏数据队列保存截屏数据,当绘制虚拟图层时将截屏数据转换为材质后再进行渲染;截屏进程,是运行在安卓兼容环境内根据窗口句柄获取桌面系统截屏数据的进程。
本发明提供了虚拟显示设备中虚拟图层(VirtualDisplayLayer)的一种实现方式,具体过程如下:
步骤1.1、获取安卓兼容环境中的显示设备,并将安卓兼容环境内的OpenGL环境进行初始化;创建渲染图层并将其绑定到与虚显对应的桌面窗口,从而获取桌面窗口的窗口句柄,创建渲染上下文得到渲染的位置变量和材质变量;将绘制状态设置为不透明且始终可见,且可视区域的尺寸与桌面系统的屏幕尺寸相同;
步骤1.2、若当前虚拟图层为新建图层,则创建截屏数据队列,并启动截屏进程,执行步骤1.3,其中,截屏数据队列是用于保存带有时间戳的截屏数据帧的链表;若当前虚拟图层不是新建图层,则执行步骤1.3;
步骤1.3、获取系统的当前时间,选择截屏数据队列中时间戳与当前时间的差值小于阈值的一帧数据写入待绘制帧列表,清空当前的截屏数据队列,执行步骤1.4;若截屏数据队列中没有符合时间戳与当前时间的差值小于阈值的数据,则等待设定时间后执行步骤1.3;
步骤1.4、若截屏数据队列为空且最后绘制帧不为空,则使用着色器将最后绘制帧中的截屏数据根据步骤1.1得到的材质变量转换为材质,再根据步骤1.1得到的位置变量将材质渲染到显示设备;若截屏数据队列为空且最后绘制帧也为空,则将提示信息渲染到显示设备;若截屏数据队列不为空,则使用着色器将待绘制帧列表中的截屏数据帧根据步骤1.1得到的材质变量转换为材质,再根据步骤1.1创建的位置变量将材质渲染到显示设备,然后将待绘制帧列表中最新一帧数据保存为最后绘制帧,并清空当前的待绘制帧列表。
进一步地,为了提高截屏数据渲染的效率,本发明中采用基于着色器语言GLSL(OpenGL Shading Language)的着色器实现将截屏数据转换为材质,再将材质渲染到显示设备。
进一步地,本发明还提供了截屏进程的一种实现方式,具体过程如下:根据虚拟图层获取的桌面窗口的窗口句柄获取桌面显示设备,发起截屏请求获取截屏数据,并将截屏数据添加到截屏数据队列的尾部。
进一步地,本发明在将X协议C语言绑定(XCB,X protocol C-language Binding)的相关函数移植到安卓兼容环境中的基础上,还提供了针对Linux系统的截屏进程的一种实现方式,具体过程如下:
步骤2.1、若Linux系统采用的显示服务器协议为X11协议,则执行步骤2.2;若Linux系统采用的显示服务器协议为Wayland协议,则执行步骤2.3;
步骤2.2、根据虚拟图层获取到的桌面窗口的窗口句柄采用xcb_connect获取桌面显示设备,调用xcb_get_image发起截屏请求,再调用xcb_get_image_data获取截屏数据,最后将截屏数据添加到截屏数据队列的尾部;其中,截屏数据的格式为PIXMAP;
步骤2.3、根据虚拟图层获取到的桌面窗口的窗口句柄采用dbus接口获取桌面显示设备,创建格式为RGBA的安卓渲染缓冲区,将桌面显示设备的原始缓冲区替换为安卓渲染缓冲区,刷新桌面显示设备更新安卓渲染缓冲区内数据,读取安卓渲染缓冲区内截屏数据,并将截屏数据格式转换为RGBA格式后将其添加到截屏数据队列的尾部;恢复桌面显示设备的原始缓冲区。
上述步骤2.3中,可通过调用glReadnPixels读取安卓渲染缓冲区内截屏数据,若Linux系统的字节序为小端序(Little Endian)则读出的截屏数据的格式是ABGR,此时需要将其转换为RGBA格式;若Linux系统的字节序为大端序(Big Endian),则不必转换数据格式。
实施例1:
本实施例通过修改安卓系统中的Layer类实现了本发明提供的虚拟显示设备中虚拟图层(VirtualDisplayLayer),具体包括以下步骤:
S1.1、调用eglGetDisplay获取OpenGL ES的Display设备dpy;
S1.2、使用dpy调用eglInitialize初始化OpenGL ES环境;
S1.3、调用eglCreateWindowSurface创建渲染图层,采用selectConfigForNativeWindow方法将渲染图层绑定到与虚显(VirtualDisplay)相对应的安卓窗口在桌面系统内的桌面窗口;
S1.4、基于OpenGL ES的2.0版本调用eglCreateContext创建渲染上下文,然后,依次调用glCreateProgram、glAttachShader、glLinkProgram及glGetProgramiv得到渲染的位置变量句柄PositionHandle和材质变量句柄TextureHandle;
S1.5、设置Layer类中的函数isVisible的返回值始终为TRUE,函数setPerFrameData中将可视区域设置为当前桌面系统上的屏幕大小;
S1.6、若当前虚拟图层为新建图层,则创建截屏数据队列grabbedFrameList,并启动截屏进程grabScreenThread,执行S1.7,其中,grabbedFrameList是用于保存带有时间戳的截屏数据帧的链表;若当前虚拟图层不是新建图层,则执行S1.7;
S1.7、设置grabbedFrameList为锁定状态,获取当前系统时间currentTime,遍历grabbedFrameList中的所有截屏数据帧,如果截屏数据帧的时间戳timeStamp满足条件(currentTime-timeStamp)< t秒,则将截屏数据帧加入renderFrameList,清空grabbedFrameList,并设置grabbedFrameList为解锁状态;否则,设置grabbedFrameList为解锁状态,等待设定时间后执行S1.7;
S1.8、若renderFrameList为空且lastestFrame不为空,则将lastestFrame内的数据渲染到显示设备;若renderFrameList与lastestFrame均为空,则将提示文本或提示图片渲染到显示设备,提示当前正在缓存中;若renderFrameList不为空,则将renderFrameList中最新的一帧保存到lastestFrame中,再遍历renderFrameList的每一帧renderFrame,将renderFrame渲染到显示设备中;
S1.9、清空renderFrameList。
进一步地,为了提高渲染效率,本发明中采用基于着色器语言GLSL(GL ShaderLanguage)的着色器实现将截屏数据渲染到显示设备的过程,具体如下:调用glTexImage2D将renderFrame转换成材质,以PositionHandle作为参数调用glEnableVertexAttribArray、以TextureHandle作为参数调用glEnableVertexAttribArray,再调用glSwapBuffers将材质渲染到显示设备中。
此外,由于虚拟图层(VirtualDisplayLayer)的渲染过程中仅采用二维图像且图像的格式为RGBA,而这些都是OpenGL ES 2.0所支持的,因此,为减少对OpenGL ES版本的要求适配更多设备,在虚拟图层的创建过程中设定采用的OpenGL ES版本为2.0版。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (6)

1.一种基于异构缓存访问的跨运行环境显示输出共享方法,其特征在于,包括以下步骤:
在安卓兼容环境中,当SurfaceFlinger服务接收到显示状态更新消息后,遍历当前保存的Display,若存在状态为读取状态且类型为虚显的Display,则创建与该Display相关的虚拟显示设备,虚拟显示设备获取与Display相对应的桌面窗口的窗口句柄,截屏进程根据所述窗口句柄获取桌面系统截屏数据,虚拟显示设备将所述截屏数据输出到屏幕显示;如果不存在状态为读取状态且类型为虚显的Display,则退出本流程;当安卓兼容环境的虚显销毁时,结束截屏进程,退出本流程;在桌面系统中,设置桌面显示设备的访问权限使所述截屏进程能够访问桌面显示设备;所述虚拟显示设备为包含单一虚拟图层的DisplayDevice;所述虚拟显示设备将所述截屏数据输出到屏幕显示的过程为:当绘制虚拟图层时将截屏数据转换为材质后再将材质渲染到屏幕显示。
2.根据权利要求1所述的跨运行环境显示输出共享方法,其特征在于,所述虚拟图层的实现方式,包括以下步骤:
步骤1.1、获取安卓兼容环境内的显示设备,初始化OpenGL环境;创建渲染图层并将其绑定到与虚显对应的桌面窗口,创建渲染上下文得到渲染的位置变量和材质变量;将绘制状态设置为不透明且始终可见,且可视区域的尺寸与桌面系统的屏幕尺寸相同;
步骤1.2、若当前虚拟图层为新建图层,则创建截屏数据队列,并启动截屏进程,执行步骤1.3,截屏数据队列为保存带有时间戳的截屏数据帧的链表;若当前虚拟图层不是新建图层,则执行步骤1.3;
步骤1.3、获取桌面系统的当前时间,选择截屏数据队列中时间戳与当前时间的差值小于阈值的数据写入待绘制帧列表,清空当前的截屏数据队列,执行步骤1.4;若截屏数据队列中不存在时间戳与当前时间的差值小于阈值的数据,则等待设定时间后执行步骤1.3;
步骤1.4、若截屏数据队列为空且最后绘制帧不为空,则使用着色器将最后绘制帧中的截屏数据根据步骤1.1得到的材质变量转换为材质,再根据步骤1.1得到的位置变量将材质渲染到显示设备;若截屏数据队列为空且最后绘制帧也为空,则将提示信息渲染到显示设备;若截屏数据队列不为空,则使用着色器将待绘制帧列表中的截屏数据帧根据步骤1.1得到的材质变量转换为材质,再根据步骤1.1创建的位置变量将材质渲染到显示设备,然后将待绘制帧列表中最新一帧数据保存为最后绘制帧,清空当前的待绘制帧列表。
3.根据权利要求2所述的跨运行环境显示输出共享方法,其特征在于,所述着色器为基于着色器语言GLSL实现的着色器。
4.根据权利要求1所述的跨运行环境显示输出共享方法,其特征在于,所述截屏进程根据虚拟图层获取的窗口句柄获取桌面显示设备,发起截屏请求获取截屏数据,再将截屏数据添加到截屏数据队列的尾部。
5.根据权利要求4所述的跨运行环境显示输出共享方法,其特征在于,所述截屏进程在Linux系统中的实现方式包括以下步骤:
步骤2.1、若Linux系统采用的显示服务器协议为X11协议,则执行步骤2.2;若Linux系统采用的显示服务器协议为Wayland协议,则执行步骤2.3;
步骤2.2、根据窗口句柄获取桌面显示设备,发起截屏请求,再获取截屏数据,最后将截屏数据添加到截屏数据队列的尾部;
步骤2.3、根据窗口句柄采用dbus接口获取桌面显示设备,创建格式为RGBA的安卓渲染缓冲区,将桌面显示设备的原始缓冲区替换为安卓渲染缓冲区,刷新桌面显示设备更新安卓渲染缓冲区内数据,读取安卓渲染缓冲区内截屏数据,并将截屏数据格式转换为RGBA格式后将其添加到截屏数据队列的尾部;恢复桌面显示设备的原始缓冲区。
6.根据权利要求5所述的跨运行环境显示输出共享方法,其特征在于,所述步骤2.3中读取安卓渲染缓冲区内截屏数据后,若Linux系统的字节序为小端序则将读出的截屏数据转换为RGBA格式数据。
CN202210658915.6A 2022-06-13 2022-06-13 一种基于异构缓存访问的跨运行环境显示输出共享方法 Active CN114741081B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210658915.6A CN114741081B (zh) 2022-06-13 2022-06-13 一种基于异构缓存访问的跨运行环境显示输出共享方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210658915.6A CN114741081B (zh) 2022-06-13 2022-06-13 一种基于异构缓存访问的跨运行环境显示输出共享方法

Publications (2)

Publication Number Publication Date
CN114741081A CN114741081A (zh) 2022-07-12
CN114741081B true CN114741081B (zh) 2022-08-09

Family

ID=82287150

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210658915.6A Active CN114741081B (zh) 2022-06-13 2022-06-13 一种基于异构缓存访问的跨运行环境显示输出共享方法

Country Status (1)

Country Link
CN (1) CN114741081B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115309315B (zh) * 2022-10-11 2023-01-20 麒麟软件有限公司 Wayland环境下X应用的截图方法、系统及介质
CN115544497B (zh) * 2022-12-05 2023-03-28 麒麟软件有限公司 Wayland环境下安全防截屏系统
CN116471446B (zh) * 2023-06-19 2023-08-11 北京麟卓信息科技有限公司 一种跨运行环境的视频播放优化方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110362375A (zh) * 2019-07-11 2019-10-22 广州虎牙科技有限公司 桌面数据的显示方法、装置、设备和存储介质
JP2020064499A (ja) * 2018-10-18 2020-04-23 富士通株式会社 表示制御装置、表示制御方法、表示制御プログラム
CN112351093A (zh) * 2020-10-30 2021-02-09 深圳Tcl新技术有限公司 截屏图像共享方法、装置、设备及计算机可读存储介质
CN113900754A (zh) * 2021-10-09 2022-01-07 深圳技德智能科技研究院有限公司 共享桌面方法、装置、计算机设备和存储介质
CN114579246A (zh) * 2022-05-05 2022-06-03 北京麟卓信息科技有限公司 一种安卓兼容环境中多窗口模式下安卓应用的截屏方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020064499A (ja) * 2018-10-18 2020-04-23 富士通株式会社 表示制御装置、表示制御方法、表示制御プログラム
CN110362375A (zh) * 2019-07-11 2019-10-22 广州虎牙科技有限公司 桌面数据的显示方法、装置、设备和存储介质
CN112351093A (zh) * 2020-10-30 2021-02-09 深圳Tcl新技术有限公司 截屏图像共享方法、装置、设备及计算机可读存储介质
CN113900754A (zh) * 2021-10-09 2022-01-07 深圳技德智能科技研究院有限公司 共享桌面方法、装置、计算机设备和存储介质
CN114579246A (zh) * 2022-05-05 2022-06-03 北京麟卓信息科技有限公司 一种安卓兼容环境中多窗口模式下安卓应用的截屏方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Android显示服务器——SurfaceFlinger研究;杨倩 等;《计算机应用与软件》;20140630;第31卷(第6期);第324-326页 *

Also Published As

Publication number Publication date
CN114741081A (zh) 2022-07-12

Similar Documents

Publication Publication Date Title
US7012606B2 (en) System and method for a unified composition engine in a graphics processing system
CN114741081B (zh) 一种基于异构缓存访问的跨运行环境显示输出共享方法
US7667704B2 (en) System for efficient remote projection of rich interactive user interfaces
CN113661471B (zh) 混合渲染
JP4374590B2 (ja) シーングラフのための汎用パラメータ設定
JP4904325B2 (ja) イミーディエイトモードグラフィックスのためのインテリジェントキャッシングデータ構造
JP4796499B2 (ja) 映像およびシーングラフインターフェイス
US20060010454A1 (en) Architecture for rendering graphics on output devices
CN114741044B (zh) 一种基于异构渲染的跨运行环境显示输出共享方法
US20150193904A1 (en) Graphics acceleration for applications executing on mobile devices with multi-operating system environment
US7716685B2 (en) Pluggable window manager architecture using a scene graph system
TW201539294A (zh) 跨平台顯像引擎
JP2009530706A (ja) 代替的グラフィック・セットの効率的な符号化
CN114895961B (zh) 一种跨运行环境的显示输出共享方法
KR101520067B1 (ko) 윈도우 시스템을 구현한 그래픽 처리 방법 및 그 장치
CN117008860A (zh) 应用投屏方法、装置、电子设备、存储介质
CN118283331A (zh) 播放处理方法、装置和计算机可读存储介质
CN118037923A (zh) 图像渲染方法、装置、存储介质及电子设备
Herrb et al. New evolutions in the x window system
Hall et al. Integrating the Sample Application into Windows
WO2015058100A1 (en) Graphics acceleration for applications executing on mobile devices with multi-operating system environment

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