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

相关推荐
凌云行者10 小时前
OpenGL入门005——使用Shader类管理着色器
c++·cmake·opengl
凌云行者10 小时前
OpenGL入门006——着色器在纹理混合中的应用
c++·cmake·opengl
凌云行者3 天前
OpenGL入门004——使用EBO绘制矩形
c++·cmake·opengl
闲暇部落4 天前
Android OpenGL ES详解——模板Stencil
android·kotlin·opengl·模板测试·stencil·模板缓冲·物体轮廓
凌云行者6 天前
OpenGL入门003——使用Factory设计模式简化渲染流程
c++·cmake·opengl
凌云行者6 天前
OpenGL入门002——顶点着色器和片段着色器
c++·cmake·opengl
闲暇部落7 天前
Android OpenGL ES详解——裁剪Scissor
android·kotlin·opengl·窗口·裁剪·scissor·视口
彭祥.13 天前
点云标注工具开发记录(四)之点云根据类别展示与加速渲染
pyqt·opengl
闲暇部落16 天前
android openGL ES详解——缓冲区VBO/VAO/EBO/FBO
kotlin·opengl·缓冲区·fbo·vbo·vao·ebo
闲暇部落17 天前
android openGL ES详解——混合
android·opengl