车载-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));
}
相关推荐
ImTryCatchException14 天前
车载多 App 同屏渲染(三):RemoteCompose 序列化 UI
aaos·车载
老猿讲编程18 天前
【Eclipse OpenSOVD学习之十四】差距清单与演进建议
学习·rust·eclipse·车载·sovd
老猿讲编程18 天前
【Eclipse OpenSOVD学习之十】客户端 SDK
学习·eclipse·嵌入式软件·车载·sovd
老猿讲编程19 天前
【Eclipse OpenSOVD学习之六】 数据访问层(DataProvider)
学习·eclipse·嵌入式软件·车载·sovd
老猿讲编程21 天前
【Eclipse OpenSOVD学习之二】 SOVD 协议原理与标准背景
学习·eclipse·嵌入式软件·车载·sovd
千里马学框架1 个月前
安卓开机性能优化:如何安全高效地裁剪 SystemService
android·智能手机·framework·wms·手机·性能·车载
青草地溪水旁4 个月前
ComM:整车通信的“总开关”——AUTOSAR CP通信管理器深度解析
车载·autosar cp·comm
STCNXPARM8 个月前
Android camera子系统概述
android·图像处理·摄像头·车载
无线图像传输研究探索8 个月前
硬盘录像机(NVR)+ 车载设备:车载图传监控解决方案,重塑移动监控新生态
车载系统·监控·无线图传·车载·车载监控·车载图传
千里马学框架9 个月前
安卓14-16车机手机仿小米su7三分屏实战项目专题
android·智能手机·framework·分屏·车载·小米汽车·三分屏