QNX screen使用介绍 第一章

5 篇文章 14 订阅

一、screen介绍

  1. QNX screen系统是一个图形框架,提供开发时图像显示功能,抽象对外统一接口,屏蔽底层硬件差异
  2. screen是基于client/server模型,screen进程server程序,libscreen/libEGL/libGLESv2提供了对外的API函数
  3. screen支持应用程序渲染和硬件加速
  4. screen支持插件,加载特定的硬件模块,例如显示硬件模块,2D/3D加速器(GPU)和输入设备等资源

二、 screen API组件架构

 

  1. Context: context为窗口化环境中的图形操作提供了设置。除Event外,所有screen对象的访问都是相对于该对象关联的上下文而言。通过它可以获取到对对象(比如windows,groups,displays,pixmaps)的访问权限,用于设置或者更改其属性。
  2. Buffer: buffer是存储像素数据的内存区域,将buffer关联到WindowsStreamsPixmaps后,screen将可以使用它。多个buffers可以与一个windowsstream关联,但是一个buffer只能与一个pixmap关联。
  3. Device: device指的是输入设备,例如键盘,鼠标,触摸屏等,可以与指定的显示关联
  4. Displays: display是指呈现图像的物理设备,例如触摸屏或者显示屏,使用相关接口可以获取其属性,包括供应商,显示技术,视频模式等。
  5. Event: event包含窗口的创建,属性设置,键盘、鼠标、触摸事件之类的动作。event可独立于context关联创建事件
  6. Groups: groups用于组织和管理应用程序中的多个窗口。同一组的窗口属性具有继承关系。因此,对窗口组的某些属性更改会对所有属于改组的窗口产生影响。父窗口创建一个组,子窗口可以加入,子窗口继承其父窗口的属性,但也可以独立于父窗口进行设置和检索属性
  7. Pixmaps: pixmap是用于在screen之外进行目标渲染, 然后将目标和screen buffer关联后进行显示。
  8. Sessions: session允许应用程序将原始的Event事件转成更高级的事件。session允许应用程序捕获特定区域,设备或者screen事件,与通过windows相比,它可以提供对于输入事件的更多控制
  9. Streams: stream允许图形内容由组件生成和处理,使用stream,无需将图像内容和显示器关联,内容可以由screen以外的组件使用,同时,也可以使用screen来关联显示。
  10. Windows: window代表一个绘图界面,其内容用于显示。有多种类型的窗口(应用程序窗口,子窗口和嵌入式窗口)可以容纳要显示的内容。
  • 6
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个简单的 QNX Screen 使用范例,用于创建一个窗口并显示一段文本: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <screen/screen.h> int main(int argc, char **argv) { // 创建屏幕上下文 screen_context_t context; screen_create_context(&context, 0); // 创建屏幕窗口 screen_window_t window; screen_create_window(&window, context); // 设置窗口大小和位置 int size[2] = {640, 480}; int pos[2] = {0, 0}; screen_set_window_property_iv(window, SCREEN_PROPERTY_SIZE, size); screen_set_window_property_iv(window, SCREEN_PROPERTY_POSITION, pos); // 将窗口提交到屏幕显示 screen_post_window(window, context, 0); // 显示文本 char *text = "Hello, QNX Screen!"; int len = strlen(text); int font_size = 24; int text_color[4] = {255, 255, 255, 255}; int bg_color[4] = {0, 0, 0, 255}; int text_pos[2] = {100, 100}; screen_buffer_t buf; screen_create_window_buffers(window, 1); screen_get_window_property_pv(window, SCREEN_PROPERTY_RENDER_BUFFERS, (void **)&buf); screen_fill(ctx, buf, bg_color); screen_draw_text(ctx, buf, text, len, text_pos[0], text_pos[1], SCREEN_TEXT_ALIGNMENT_LEFT, font_size, text_color); // 将绘制的内容提交到屏幕显示 int rect[4] = {0, 0, size[0], size[1]}; screen_post_window(window, buf, 1, rect, 0); // 等待用户输入 getchar(); // 销毁窗口和上下文 screen_destroy_window(window); screen_destroy_context(context); return 0; } ``` 以上代码中,首先使用 `screen_create_context()` 函数创建一个屏幕上下文,然后使用 `screen_create_window()` 函数创建一个窗口,并设置窗口大小和位置。接下来,使用 `screen_post_window()` 函数将窗口提交到屏幕显示。 然后,使用 `screen_draw_text()` 函数在窗口中绘制一段文本,并使用 `screen_post_window()` 函数将绘制的内容提交到屏幕显示。最后,使用 `getchar()` 函数等待用户输入,销毁窗口和上下文后返回。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值