车载-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));
}
相关推荐
lucy153027510797 个月前
智能网联汽车终端T-BOX应用方案——主控芯片ACM32F403、安全芯片S6A/S6B
单片机·嵌入式硬件·安全·车载系统·汽车·车载·t-box
青牛科技-Allen9 个月前
音频接口选型可应用于安防 音响 车载等产品中 高性能国产芯片
车载系统·安防·车载·音响
zmybiealex9 个月前
车载 Android之 核心服务 - CarPropertyService 的VehicleHAL
车载·fwk·vehiclehal
青牛科技-Allen9 个月前
车载V2X方案的选型分享
驱动开发·51单片机·车载·1024程序员节
十六宿舍1 年前
雷达编程实战之提高探测速度
物联网·嵌入式开发·车载
千里马学框架1 年前
android studio platform使用体验分享(as无法跳转c/c++等native源码的福音,强烈推荐)
android·c++·ide·android studio·车载·车机·aosp代码工具
千里马学框架1 年前
android 车载widget小部件部分详细源码实战开发-千里马车载车机framework开发实战课程
android·framework·widget·车载·车机·手机开发·系统开发