一种适用于机载图形显示的多窗口管理方法转让专利

申请号 : CN202110931247.5

文献号 : CN113791851B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 廖科严龙王锐

申请人 : 中国航空无线电电子研究所

摘要 :

本发明公开了一种适用于机载图形显示的多窗口管理方法,在主函数中,创建若干纹理对象,在主循环中将纹理对象和2D纹理单元绑定,同时将外部窗口ID绑定,绑定后外部窗口的数据将直接渲染到绑定的纹理对象中,此时每个被外部窗口绑定的纹理对象都是一个在主窗口中显示外部窗口的区域,外部窗口的位置即由该纹理对象对应的顶点坐标来确定。本发明使每个应用可以在独立的上下文进行绘制,渲染出的画面可以送到任意的窗口,并且多个窗口可以合成,合成后的画面送显示器进行最终显示。

权利要求 :

1.一种适用于机载图形显示的多窗口管理方法,其特征在于主函数中的实现流程如下:步骤A1、为每个应用需绘制的外部窗口创建上下文ID和外部窗口ID;

步骤A2、为每个外部窗口创建纹理单元;

步骤A3、初始化主窗口,获取主显示器句柄;

步骤A4、在主窗口初始化完成后,初始化各外部窗口;其中,外部窗口的初始化包括设定上下文ID和外部窗口ID的关联、设置外部窗口的属性、上下文的属性、缓冲区的交换策略等;

步骤A5、创建纹理对象,并将纹理对象与步骤A2的纹理单元绑定;

步骤A6、完成渲染环境初始化,并以全局变量的方式通知各应用主函数初始化已完成,将主显示器句柄提供给各应用;

步骤A7、在绘制的循环中,从缓冲中读出各应用的绘制好的外部窗口的内容,将纹理对象设置为2D纹理,并将相应的应用的外部窗口ID绑定到纹理对象,并通过设置纹理对象的顶点坐标和纹理坐标,顶点坐标的区域就是对应该外部窗口在主窗口的显示区域,可通过顶点纹理坐标来配置外部窗口的大小和位置,应用中的实现流程如下:

步骤B1、定义本应用需绘制的外部窗口的上下文ID和外部窗口ID,以及上下文的属性和外部窗口的属性,该上下文ID和外部窗口ID需要和主函数中步骤A1的对应;

步骤B2、等待主函数通知初始化完成,获取主显示器句柄;

步骤B3、完成绘制环境的初始化;

步骤B4、开始循环绘制,将主显示器句柄提供给上下文,上下文绘制完外部窗口后按照主函数步骤A3中定义的缓冲区交换策略,把绘制好的内容放到后缓冲区,供主函数调用。

说明书 :

一种适用于机载图形显示的多窗口管理方法

技术领域

[0001] 本发明属于图形显示领域,一种适用于机载图形显示的多窗口管理方法。

背景技术

[0002] 传统的机载图形显示为单窗口全屏幕显示,即整个显示屏幕的内容由同一个应用进行渲染,渲染后的内容送到显示器进行整屏显示。随着技术的发展,显示屏幕越来越大,需要显示的内容和种类也越来越多,因此就带来了以下需求:
[0003] 1)多个应用能独立进行渲染
[0004] 机载图形显示对安全性有较高要求,在多个应用同时运行时,就要求有独立的上下文来为应用提供运行环境和资源;
[0005] 2)渲染的结果能显示在一个或多个窗口中,并且多个窗口的内容能合成并最终显示在显示器上
[0006] 目前的窗口是单窗口显示,因此显示内容和显示窗口高度耦合,渲染的内容只能在固定的位置进行显示,而采用多窗口以后,渲染和窗口显示可以解耦,渲染的内容可以在一个或者多个窗口进行显示,窗口的大小和位置可配置。
[0007] 目前机载图形显示的以下不足:
[0008] 1)应用耦合度高,模型巨大难维护
[0009] 目前应用程序多为将所有功能模块编译成一个最终可执行文件,随着应用复杂度的提高,这种方式的弊端越发明显:
[0010] a)耦合度高
[0011] 功能上独立的模块因为只能在同一个窗口显示,因此只能编译在一起进行顺序绘制,为了避免功能模块间的干扰,在绘制每个功能模块前后都要保存和恢复当前状态。
[0012] b)维护性差
[0013] 任何一个功能的更改,都要将整个应用重新编译,各个功能模块的复用性差。
[0014] 2)只支持单窗口,画面和窗口绑定
[0015] 目前机载图形应用只支持单窗口显示,且画面渲染和窗口显示高度耦合,渲染的画面只能在固定的窗口位置显示,无法在多个窗口、多个位置进行显示。

发明内容

[0016] 本发明的发明目的在于提供一种适用于机载图形显示的多窗口管理方法,每个应用的功能模块可以在独立的上下文进行绘制,渲染出的画面可以送到任意的窗口,并且多个窗口可以合成,合成后的画面送显示器进行最终显示。
[0017] 本发明的发明目的通过以下技术方案实现:
[0018] 一种适用于机载图形显示的多窗口管理方法,主函数中的实现流程如下:
[0019] 步骤A1、为每个应用需绘制的外部窗口创建上下文ID和外部窗口ID;
[0020] 步骤A2、为每个外部窗口创建纹理单元;
[0021] 步骤A3、初始化主窗口,获取主显示器句柄;
[0022] 步骤A4、在主窗口初始化完成后,初始化各外部窗口;其中,外部窗口的初始化包括设定上下文ID和外部窗口ID的关联、设置外部窗口的属性、上下文的属性、缓冲区的交换策略等;
[0023] 步骤A5、创建纹理对象,并将纹理对象与步骤A2的纹理单元绑定;
[0024] 步骤A6、完成渲染环境初始化,并以全局变量的方式通知各应用主函数初始化已完成,将主显示器句柄提供给各应用;
[0025] 步骤A7、在绘制的循环中,从缓冲中读出各应用的绘制好的外部窗口的内容,将纹理对象设置为2D纹理,并将相应的应用的外部窗口ID绑定到纹理对象,并通过设置纹理对象的顶点坐标和纹理坐标,顶点坐标的区域就是对应该外部窗口在主窗口的显示区域,可通过顶点纹理坐标来配置外部窗口的大小和位置。
[0026] 应用中的实现流程如下:
[0027] 步骤B1、定义本应用需绘制的外部窗口的上下文ID和外部窗口ID,以及上下文的属性和外部窗口的属性,该上下文ID和外部窗口ID需要和主函数中步骤A1的对应;
[0028] 步骤B2、等待主函数通知初始化完成,获取主显示器句柄;
[0029] 步骤B3、完成绘制环境的初始化;
[0030] 步骤B4、开始循环绘制,将主显示器句柄提供给上下文,上下文绘制完外部窗口后按照主函数步骤A3中定义的缓冲区交换策略,把绘制好的内容放到后缓冲区,供主函数调用。
[0031] 本发明的有益效果在于:
[0032] 1)多个应用能独立进行渲染,提高了安全性
[0033] 机载图形显示对安全性有较高要求,在多个应用同时运行时,本方法能提供独立的上下文来为应用提供运行环境和资源,防止应用间的串扰;
[0034] 2)渲染和显示解耦,提高了显示的灵活性
[0035] 渲染的结果能显示在一个或多个窗口中,并且多个窗口的内容能合成并最终显示在显示器上,窗口的位置和大小可灵活变化。
[0036] 本发明不依赖于具体GPU及操作系统,可广泛应用于军民机显示系统,具有良好的经济和社会效益。

附图说明

[0037] 图1为一种适用于机载图形显示的多窗口管理方法的原理示意图。

具体实施方式

[0038] 下面将对本发明实施例中的技术方案进行清楚、完整的描述。当然,所描述的实施例仅仅是本发明的一种实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0039] 参见图1所示,本实施例所示的一种适用于机载图形显示的多窗口管理方法的原理如下:
[0040] 在主函数中,创建若干纹理对象,在主循环中将纹理对象和2D纹理单元绑定,同时将外部窗口ID绑定,绑定后外部窗口的数据将直接渲染到绑定的纹理对象中,此时每个被外部窗口绑定的纹理对象都是一个在主窗口中显示外部窗口的区域,外部窗口的位置即由该纹理对象对应的顶点坐标来确定。
[0041] 对于每个被渲染的功能应用,都会创建绘制的上下文(context)和外部窗口(window),只有最终送显示的主上下文(context)和主外部窗口(window)是可显示的,其余的window(外部窗口)都是使用次上下文创建的,这种window叫离屏window,每个离屏window的句柄被提供给主上下文,以允许在单个显示器上组合所有不可见的window。
[0042] 因此,本方案的实现由两部分组成,包括在主函数中的实现以及在各分区功能应用中的实现
[0043] 主函数中的实现流程如下:
[0044] 步骤A1、为每个应用需绘制的外部窗口创建上下文ID(即context id)和外部窗口ID(即window ID);
[0045] 步骤A2、为每个外部窗口创建纹理单元;
[0046] 步骤A3、初始化主窗口,获取主显示器句柄;
[0047] 步骤A4、在主窗口初始化完成后,初始化各外部窗口。其中,外部窗口的初始化包括设定上下文ID和外部窗口ID的关联、设置外部窗口的属性、上下文的属性、缓冲区的交换策略等;
[0048] 步骤A5、创建纹理对象,并将纹理对象与步骤A2的纹理单元绑定;
[0049] 步骤A6、完成渲染环境初始化,并以全局变量的方式通知各应用主函数初始化已完成,将主显示器句柄提供给各应用;
[0050] 步骤A7、在绘制的循环中,从缓冲中读出各应用的绘制好的外部窗口的内容,将纹理对象设置为2D纹理,并将相应的应用的外部窗口ID绑定到纹理对象,并通过设置纹理对象的顶点坐标和纹理坐标,顶点坐标的区域就是对应该外部窗口在主窗口的显示区域,可通过顶点纹理坐标来配置外部窗口的大小和位置。
[0051] 分区应用中的实现流程如下:
[0052] 步骤B1、定义本应用需绘制的外部窗口的上下文ID和外部窗口ID,以及上下文的属性和外部窗口的属性,该上下文ID和外部窗口ID需要和主函数中步骤A1的对应;
[0053] 步骤B2、等待主函数通知初始化完成,获取主显示器句柄;
[0054] 步骤B3、完成绘制环境的初始化;
[0055] 步骤B4、开始循环绘制,将主显示器句柄提供给上下文,上下文绘制完外部窗口后按照主函数步骤A3中定义的缓冲区交换策略,把绘制好的内容放到后缓冲区,供主函数调用。
[0056] 通过上述过程,各分区渲染好的数据就存放在主函数的纹理对象中了,通过在主函数中绘制纹理即可将各个分区应用绘制的内容进行管理并合成显示。