车载-QNX渲染

简介

QNX屏幕图形子系统基于客户机/服务器模型,其中应用程序是向服务器(屏幕)请求图形服务的客户机。目前QNX自身的渲染支持Software、Hardware acceleration、Hybrid、Cloning四种。由于QNX官方提供的screen渲染相关的文档,几乎没有提供有用的代码。因此,本文主要是为了记录自己在qnx screen渲染调试上的一些痕迹。

本文主要介绍QNX侧的Software渲染,其余渲染方案将在其他的文章中介绍。

Software

software渲染即使用cpu的方式对buffer进行渲染。通常流程如下:

  1. 创建render的目标
  2. 创建需要render的buffer
  3. 在buffer上绘制内容
  4. post上屏

以自身的项目为例,对上述render的步骤做详细的解释

1、创建render目标,QNX侧官方文档上,提供的样例,解释支持window、pixmap、stream三种形式,本文主要以screen window为例,按如下流程创建和初始化screen win

cpp 复制代码
ret = screen_create_context(&pstCtx->screen_ctx, SCREEN_APPLICATION_CONTEXT | SCREEN_BUFFER_PROVIDER_CONTEXT);
ret = screen_create_window(&pstCtx->screen_win, pstCtx->screen_ctx);
/设置windows各种属性
ret = screen_set_window_property_iv(pstCtx->screen_win, SCREEN_PROPERTY_USAGE, &pstCtx->usage);
......
//选择要显示的物理屏///
pstCtx->screen_dpy = (screen_display_t *)calloc(pstCtx->ndisplays, sizeof(screen_display_t));
ret = screen_get_context_property_pv(pstCtx->screen_ctx, SCREEN_PROPERTY_DISPLAYS, (void **)pstCtx->screen_dpy);
......
ret = screen_set_window_property_pv(pstCtx->screen_win, SCREEN_PROPERTY_DISPLAY, (void **)&pstCtx->target_disp);

2、创建需要render的buffer

cpp 复制代码
//创建一个screen的通用buffer
ret = screen_create_buffer(&pstCtx->screen_buf);
/设置各种buffer属性
ret = screen_set_buffer_property_iv(pstCtx->screen_buf, SCREEN_PROPERTY_FORMAT, &fmt);
......
创建完buffer,设置完buffer属性后,attach到windowbuffer上
ret = screen_attach_window_buffers(pstCtx->screen_win, 1, &pstCtx->screen_buf);

3、在buffer上绘制你的内容,绘制(渲染)到与渲染目标关联的缓冲区。渲染buffer到缓冲区中有各种方案,本文在此不做详细解释,在项目中,主要使用同OpenGL来绘制该buffer

4、post上屏

cpp 复制代码
ret = screen_get_window_property_pv(pstCtx->screen_win, SCREEN_PROPERTY_RENDER_BUFFERS, (void **)&pstCtx->screen_renderbuf);
if(ret != 0){
    LOGE( "screen_get_window_property_pv SCREEN_PROPERTY_RENDER_BUFFERS error:%s\n", strerror(errno));
    return 0;
}
/// post上屏
ret = screen_post_window(pstCtx->screen_win, pstCtx->screen_renderbuf, 0, nullptr, 0);
if(ret != 0){
    LOGE( "screen_post_window error:%s\n", strerror(errno));
}
相关推荐
声光界3 天前
《立足中国,面向全球,打造面向全球车载与音频设备的下一代互联音频》
audio·车载·音频设备·vehicle·audio devices·音频互联
ImTryCatchException1 个月前
车载多 App 同屏渲染(三):RemoteCompose 序列化 UI
aaos·车载
老猿讲编程1 个月前
【Eclipse OpenSOVD学习之十四】差距清单与演进建议
学习·rust·eclipse·车载·sovd
老猿讲编程1 个月前
【Eclipse OpenSOVD学习之十】客户端 SDK
学习·eclipse·嵌入式软件·车载·sovd
老猿讲编程1 个月前
【Eclipse OpenSOVD学习之六】 数据访问层(DataProvider)
学习·eclipse·嵌入式软件·车载·sovd
老猿讲编程1 个月前
【Eclipse OpenSOVD学习之二】 SOVD 协议原理与标准背景
学习·eclipse·嵌入式软件·车载·sovd
千里马学框架2 个月前
安卓开机性能优化:如何安全高效地裁剪 SystemService
android·智能手机·framework·wms·手机·性能·车载
青草地溪水旁5 个月前
ComM:整车通信的“总开关”——AUTOSAR CP通信管理器深度解析
车载·autosar cp·comm
STCNXPARM9 个月前
Android camera子系统概述
android·图像处理·摄像头·车载
无线图像传输研究探索9 个月前
硬盘录像机(NVR)+ 车载设备:车载图传监控解决方案,重塑移动监控新生态
车载系统·监控·无线图传·车载·车载监控·车载图传