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区域,其他区域不做渲染。

相关推荐
AIminminHu2 天前
((AI篇)OpenGL渲染与几何内核那点事-(二-1-(10):从“搜个大概”到“读懂图纸”:一个 CAD 开发者眼中的 RAG 进化简史)
人工智能·agent·opengl·智能体
雪域迷影4 天前
Windows上使用VS2026和CMake编译LearnOpenGL项目源代码
windows·cmake·opengl·vs2026·gthub
郝学胜-神的一滴10 天前
[简化版 Games 101] 计算机图形学 05:二维变换下
c++·unity·图形渲染·three.js·opengl·unreal
AIminminHu11 天前
OpenGL渲染与几何内核那点事-项目实践理论补充(一-3-(4):你敢说你真的懂OpenGL?一个老师傅眼中的“图形API进化史”)
渲染·opengl·渲染管线
梵尔纳多13 天前
OpenGL 骨骼动画
c++·图形渲染·opengl
AIminminHu13 天前
OpenGL渲染与几何内核那点事-项目实践理论补充(一-3-(2):当你的CAD学会“偷懒”:从“一笔一画”到“一键生成”的OpenGL渲染进化史)
opengl
郝学胜-神的一滴13 天前
中级OpenGL教程 001:从Main函数到相机操控的完整实现
c++·程序人生·unity·图形渲染·unreal engine·opengl
AIminminHu14 天前
OpenGL渲染与几何内核那点事-项目实践理论补充(一-3-(1):你的 CAD 终于能联网协作了,但渲染的“内功心法”到底是什么?)
人工智能·opengl
zhooyu18 天前
利用叉乘判断OpenGL中的左右关系
c++·3d·opengl
zhooyu1 个月前
GLM中lerp实现线性插值
c++·opengl