基于Linux嵌入式系统的多窗口实现方法、装置及介质制造方法及图纸

技术编号:32825640 阅读:12 留言:0更新日期:2022-03-26 20:27
本发明专利技术涉及一种基于Linux嵌入式系统的多窗口实现方法、装置及介质的技术方案,包括:重构,对Linux嵌入式系统的显示标准结构体进行重构;初始化,加载重构的OpenGL程序函数库,并执行初始化;多窗口实现,通过所述重构的OpenGL程序函数库中的多个函数,执行多窗口的窗口创建、帧缓存对象的创建、帧缓存对象的交换、窗口显示及窗口显示位置调整;同步线程处理,通过Vsync处理线程执行送显线程同步处理,以及,通过送显线程执行渲染线程的同步信号管理及帧缓存对象的管理。本发明专利技术的有益效果为:在不改变GPU厂商提供的OpenGLES库和OpenGLES应用的基础上,设计一套实现多窗口/多进程/多线程渲染的方法,提升了fbdev下的OpenGLES的渲染体验和灵活性。渲染体验和灵活性。渲染体验和灵活性。

【技术实现步骤摘要】
基于Linux嵌入式系统的多窗口实现方法、装置及介质


[0001]本专利技术涉及计算机领域,具体涉及了一种基于Linux嵌入式系统的多窗口实现方法、装置及介质。

技术介绍

[0002]在实际的GPU窗口系统中,FBDEV是基本的Linux窗口系统,但其单窗口的弊端导致操作系统只能操作一个可视窗口,这意味着不能向Android、Wayland那样可以多个应用同时操作屏幕上的渲染,FBDEV下并没有一套多窗口系统的实现,通常情况下实现需要FBO再复制到FBDEV的缓存上显示出来,在多进程的系统中的同步非常繁琐。
[0003]现有的技术是在FBDEV下向帧缓存的缓存渲染,如果想多个进程使用GPU渲染或者其它图像产生者(如VE)需要显示,存在同帧缓存的竞争问题。
[0004]Linux帧缓存设备下OpenGLES的实现,只能支持单窗口输出渲染输出到帧缓存设备的帧缓存中,不能像Android和Wayland一样是多窗口渲染,不能很好的支持多进程/线程、存在窗口管理或屏幕的合成进程的操作系统设计。

技术实现思路

[0005]本专利技术的目的在于至少解决现有技术中存在的技术问题之一,提供了一种基于Linux嵌入式系统的多窗口实现方法、装置及介质,本专利技术技术方案在不改变原有GPU厂商的代码下,通过封装库结合IC显示驱动的特点,实现了OpenGLES FBDEV下的多线程、多进程的多窗口系统方案。
[0006]本专利技术的技术方案包括一种基于Linux嵌入式系统的多窗口实现方法,其特征在于,该方法包括:重构,对Linux嵌入式系统的显示标准结构体进行重构,经过重构的标准结构体用于对EGL接口变量、线程变量及GPU线程管理变量进行描述;初始化,加载重构的OpenGL程序函数库和对外API函数库,并执行初始化;多窗口实现,通过所述重构的OpenGL程序函数库中的多个函数,执行多窗口的窗口创建、帧缓存对象的创建、帧缓存对象的交换、窗口显示及窗口显示位置调整;同步线程处理,通过Vsync处理线程执行送显线程同步处理,以及,通过送显线程执行渲染线程的同步信号管理及帧缓存对象的管理。
[0007]根据所述的基于Linux嵌入式系统的多窗口实现方法,其中重构包括:对OpenGLES/EGL的API函数进行重构,其中所述EGL接口变量包括离屏缓冲区变量及显示资源变量,离屏缓冲区变量及显示资源变量分别用于表示外部EGLSurface及EGLDisplay的数据类型,所述线程变量用于表示每个线程拥有的变量,所述GPU线程管理变量用于表示原生GPU厂商的OpenGLES/EGL原生变量。
[0008]根据所述的基于Linux嵌入式系统的多窗口实现方法,其中初始化包括:启动渲染程序执行数据加载,包括对原生OpenGLES/EGL的库装载,并通过所述重构对标准OpenGLES/EGL API函数进行函数重构;启动Vsync处理线程,对窗口的生产者与消费者进行同步。
[0009]根据所述的基于Linux嵌入式系统的多窗口实现方法,其中多窗口实现包括:所述
窗口创建通过eglCreateWindowSurface函数创建离屏渲染对象,初始化所述离屏缓冲区变量及初始化消费者硬件层,以及,在同一进程或多个进程创建至少一个窗口,且多个窗口之间不互相影响;所述帧缓存对象的创建通过eglMakeCurrent函数申请与帧缓存对象数量的缓存,并创建对应数量的帧缓存对象,对对应的所述离屏缓冲区变量进行初始化,并创建线程变量用于保存必要的线程变量数据;所述帧缓存对象的交换通过eglSwapBuffers交换所述离屏缓冲区变量中的帧缓存对象,将渲染操作绘制到帧缓存对象中,并创建sync信号,提交到送显线程,获取并绑定新的帧缓存对象;所述窗口显示通过glBindFramebuffer函数对应用程序绑定帧缓存对象依次执行获取线程前后文变量、获取离屏缓冲窗口、获取写入函数的帧缓存对象、执行绑定;所述窗口显示位置调整通过eglSetSurfaceExt函数将不同的窗口放置到消费者的不同通道和层中。
[0010]根据所述的基于Linux嵌入式系统的多窗口实现方法,其中多窗口实现还包括:通过eglGetDisplay指定窗口显示于对应的消费者,若消费者为第一次获取,将会创建对应消费者的送显线程。
[0011]根据所述的基于Linux嵌入式系统的多窗口实现方法,其中Vsync处理线程包括:控制送显线程执行平滑送帧;对用于同步窗口的循环使用的缓存进行归还处理;以及对需要vsync信号的应用发出渲染节拍。
[0012]根据所述的基于Linux嵌入式系统的多窗口实现方法,其中送显线程包括:同一个vsync周期限制送显一帧画面;同步渲染线程的sync信号管理;基于消费者角度对帧缓存对象的多缓存消费进行协调。
[0013]根据所述的基于Linux嵌入式系统的多窗口实现方法,其中该方法还包括对受影响的API函数进行消除副作用处理。
[0014]本专利技术的技术方案还包括一种基于Linux嵌入式系统的多窗口实现装置,该装置包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述任一项的方法步骤。
[0015]本专利技术的技术方案还包括一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现任一所述的方法步骤。
[0016]本专利技术的有益效果为:在不改变GPU厂商提供的OpenGLES库和OpenGLES应用的基础上,设计一套实现多窗口/多进程/多线程渲染的方法,提升了fbdev下的OpenGLES的渲染体验和灵活性。
附图说明
[0017]下面结合附图和实施例对本专利技术进一步地说明;
[0018]图1所示为根据本专利技术实施方式的总体流程图。
[0019]图2所示为根据本专利技术实施方式的库初始流程图。
[0020]图3所示为根据本专利技术实施方式的交换缓冲流程图。
[0021]图4所示为根据本专利技术实施方式的帧缓存对象绑定流程图。
[0022]图5所示为根据本专利技术实施方式的Vsync处理线程工作流程图。
[0023]图6所示为根据本专利技术实施方式的送显线程工作流程图。
[0024]图7所示为根据本专利技术实施方式的装置图。
具体实施方式
[0025]本部分将详细描述本专利技术的具体实施例,本专利技术之较佳实施例在附图中示出,附图的作用在于用图形补充说明书文字部分的描述,使人能够直观地、形象地理解本专利技术的每个技术特征和整体技术方案,但其不能理解为对本专利技术保护范围的限制。
[0026]在本专利技术的描述中,若干的含义是一个或者多个,多个的含义是两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。
[0027]在本专利技术的描述中,对方法步骤的连续标号是为了方便审查和理解,结合本专利技术的整体技术方案以及各个步骤之间的逻辑关系,调整本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于Linux嵌入式系统的多窗口实现方法,其特征在于,该方法包括:重构,对Linux嵌入式系统的显示标准结构体进行重构,经过重构的标准结构体用于对EGL接口变量、线程变量及GPU线程管理变量进行描述;初始化,加载重构的OpenGL程序函数库和对外API函数库,并执行初始化;多窗口实现,通过所述重构的OpenGL程序函数库中的多个函数,执行多窗口的窗口创建、帧缓存对象的创建、帧缓存对象的交换、窗口显示及窗口显示位置调整;同步线程处理,通过Vsync处理线程执行送显线程同步处理,以及,通过送显线程执行渲染线程的同步信号管理及帧缓存对象的管理。2.根据权利要求1所述的基于Linux嵌入式系统的多窗口实现方法,其特征在于,所述重构包括:对OpenGLES/EGL的API函数进行重构,其中所述EGL接口变量包括离屏缓冲区变量及显示资源变量,离屏缓冲区变量及显示资源变量分别用于表示外部EGLSurface及EGLDisplay的数据类型,所述线程变量用于表示每个线程拥有的变量,所述GPU线程管理变量用于表示原生GPU厂商的OpenGLES/EGL原生变量。3.根据权利要求2所述的基于Linux嵌入式系统的多窗口实现方法,其特征在于,所述初始化包括:启动渲染程序执行数据加载,包括对原生OpenGLES/EGL的库装载,并通过所述重构对标准OpenGLES/EGL API函数进行函数重构;启动Vsync处理线程,对窗口的生产者与消费者进行同步。4.根据权利要求1所述的基于Linux嵌入式系统的多窗口实现方法,其特征在于,所述多窗口实现包括:所述窗口创建通过eglCreateWindowSurface函数创建离屏渲染对象,初始化所述离屏缓冲区变量及初始化消费者硬件层,以及,在同一进程或多个进程创建至少一个窗口,且多个窗口之间不互相影响;所述帧缓存对象的创建通过eglMakeCurrent函数申请与帧缓存对象数量的缓存,并创建对应数量的帧缓存对象,对对应的所述离屏缓冲区变量进行初始化,并创建线...

【专利技术属性】
技术研发人员:崔运涛邓博
申请(专利权)人:珠海全志科技股份有限公司
类型:发明
国别省市:

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

1