QNX下多窗口叠加融合方案

目的:QNX下EGL多窗口叠加融合方案

环境:

系统:QNX
环境:8155/8295

问题:

EGL有时候在同一个进程中因为引入不同的功能,在不同的线程中进行窗口的绘制和融合,QNX下的融合方案,实测使用正常。

步骤:

1.屏幕分三个区域进行绘制时,相互融合方案一

在这里插入图片描述
1.1 如上图所示,EGL绘制了A、B、C中绘制了三个窗口。采取的方案是同一个进程中开启三个线程,每个线程创建一个窗口,然后分别在各自的区域进行绘制。A、B的窗口大小是A、B的区域,C窗口大小是整个屏幕,负责整个屏幕底色的刷新。

1.2 销毁窗口时未避免crash及窗口滞留问题,需要每个窗口创建各自的egl_context,然后退出时需要保证A和B窗口销毁,context回收以后,再进行C窗口的资源回收,最终C中调用egl_terminal进行所有资源的清理。实测可以让三个窗口都各自正常渲染。

1.3 为保证三个窗口能相互不受干涉的各自渲染。需要把A、B窗口设置zorder为1, C窗口zorder设置为0,这样C在最底层。同时需要把A、B、C的透明属性都设置为SCREEN_TRANSPARENCY_NONE。pipeline设置为同一个,即可实现互不干涉的渲染了。

2.屏幕分三个区域进行绘制时,相互融合方案二

在这里插入图片描述
1.1 如上图所示,EGL绘制了A、B、C中绘制了三个窗口。采取的方案是同一个进程中开启两个线程,一个线程创建一个全屏窗口,主渲染C区域,另一个线程创建全屏窗口,主渲染A、B区域。

1.2 销毁窗口时未避免crash及窗口滞留问题,需要每个窗口创建各自的egl_context,然后退出时需要保证AB的窗口销毁,context回收以后,再进行C的窗口的资源回收,最终C中调用egl_terminal进行所有资源的清理。实测可以让三个窗口都各自正常渲染。

1.3 为保证两个窗口能相互不受干涉的各自渲染。需要把AB窗口设置zorder为1, C窗口zorder设置为0,这样C在底层。此时AB的窗口会覆盖住C窗口,然后将AB的窗口的透明属性设置为SCREEN_TRANSPARENCY_SOURCE_OVER。此时AB的窗口仍然会覆盖住C窗口,原因是C的区域还没办法透出来。此时在AB窗口渲染之前或者资源初始化完成以后,将全屏的底色设置为 glClearColor(0.0f, 0.0f, 0.0f, 0.0f);。C窗口的可绘制区域就会透出来了。此时A、B、C区域渲染显示都正常。

1.4 需要注意的是AB的窗口在渲染时,渲染A区域时把viewport设置为A区域,渲染B区域的时候需要把viewport设置为B区域,其他区域不做渲染。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值