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

相关推荐
onthewaying14 天前
详解 Android GLSurfaceView 与 Renderer:开启你的 OpenGL ES 之旅
android·opengl
灿烂阳光g18 天前
OpenGL Camera
opengl
用户6195333341719 天前
为ChatGPT和API集成构建MCP服务器
openai·opengl
哈市雪花24 天前
添加捕捉吸附标识(使用QT+OpenGL开发三维CAD)
qt·教程·opengl·cad·绘制·工业软件·捕捉吸附
爱看书的小沐1 个月前
【小沐学GIS】基于Rust绘制三维数字地球Earth(Rust、OpenGL、GIS)
3d·rust·gis·opengl·cargo·earth·3d earth
爱看书的小沐1 个月前
【小沐杂货铺】基于Three.JS绘制汽车展示Car(WebGL、vue、react、autoshow、提供全部源代码)
汽车·vue3·react·webgl·three.js·opengl·autoshow
哈市雪花1 个月前
相机:以鼠标点为中心缩放(使用OpenGL+QT开发三维CAD)
qt·相机·opengl·cad·缩放·工业软件·渲染效果
灿烂阳光g1 个月前
OpenGL 2. 着色器
c++·opengl
菠萝加点糖2 个月前
Android Camera2 + OpenGL离屏渲染示例
android·opengl·camera
用户472961486692 个月前
关于openGL的一些学习记录
opengl