写在前面
Screen图形子系统基于客户端/服务器模型,其中应用程序是请求图形服务的客户端(Screen)。它包括一个合成窗口系统作为这些服务之一,这意味着所有应用程序渲染都是在离屏缓冲区上执行的,然后可以在稍后用于更新显示。
一,Screen架构
Screen支持硬件加速的应用程序渲染和硬件加速的合成。Screen还设计为支持执行软件渲染的应用程序。
Screen有一个插件架构。它加载特定于硬件的模块以获得对资源(如显示控制器、2D和3D加速器(GPU)和输入设备)的访问权限。
二,ScreenAPI
Screen API主要通过不同的组件提供对图形功能的访问。这些组件每个都为应用程序提供特定的功能。
除了event之外,所有Screen API组件都必须与上下文相关联。所有Screen应用程序的第一步是创建Screen上下文。例如:
screen_context_t screen_ctx;
screen_create_context(&screen_ctx, SCREEN_APPLICATION_CONTEXT);
此上下文在应用程序和Screen之间建立连接。没有此连接,应用程序无法与Screen通信以访问任何功能。
2.1Buffer 缓冲区
缓冲区是存储像素数据的内存区域。尽管可以在上下文的范围内创建缓冲区,但除非将其附加到窗口、流或位图,否则Screen无法使用它。
多个缓冲区可以与窗口或流关联,但只有一个缓冲区可以与位图关联。
2.2 Context 上下文
上下文为窗口环境中的图形操作提供设置。
除event外,所有其他API对象都是在上下文的范围内创建的,对这些对象的访问总是相对于与该对象关联的上下文进行的。你可以识别和访问对象(例如,窗口、组、显示器、位图)以设置或更改它们的属性和特性。
设备、显示器和窗口依赖于与事件、组和位图直接相关的上下文。
2.3 Device 设备
设备指的是输入设备。此输入设备(例如,键盘、鼠标、游戏杆、游戏手柄和多点触控)可以与特定显示器关联。
2.4 Display 显示器
显示器指的是向用户呈现图像的物理设备,如触摸屏或物理Screen。使用特定于显示器的API组件,你可以访问显示属性。这些属性包括诸如供应商、显示技术和视频模式之类的信息。
2.5 Event 事件
事件包括窗口创建、设置属性、键盘事件和触摸事件等操作。Screen API管理每个上下文的一个事件队列。但是,可以创建与上下文无任何关联的事件。
2.6 Group 组
组用于在你的应用程序中组织和管理多个窗口。组在属于同一组的窗口的属性之间建立继承关系;因此,对窗口组的某些属性进行更改会影响属于该组的所有窗口。父窗口创建一个组,以便子窗口可以加入。子窗口继承其父级的属性,但也具有可以独立于其父级设置和检索的属性。
2.7 Pixmap位图
位图是离屏渲染目标。其内容只有通过将其复制到窗口缓冲区才能可见。这可以通过使用本机blit Screen API函数来完成,也可以通过将位图用作OpenGL ES纹理来完成。
2.8 Session会话
输入会话允许应用程序控制如何将原始事件处理为更高级别的事件。会话允许您的应用程序捕获特定于某个区域、设备或Screen事件类型的事件;它提供了比仅通过窗口实现的对输入事件分派的更多控制。
2.9 Stream流
流允许组件生成和处理图形内容。使用流,不必将图形内容与显示器关联。内容可以被除Screen外的其他组件使用。但是,这些组件仍然可以使用Screen来显示内容。
2.10 Window 窗口
窗口代表绘图表面,其内容针对显示器而定位。有多种类型的窗口(应用程序窗口、子窗口和嵌入式窗口)以适应内容的显示组织。
三,Screen应用程序示例
QNX提供了一些native应用程序示例来演示如何Screen API。下面是使用QNX Screen API的示例应用程序,这些示例应用程序被打包在你的host上的每个特定目标目录下,路径是$QNX_TARGET。
这些示例应用程序包括:
/usr/bin/gles1-vsync
:此应用程序使用软件渲染来绘制齿轮。/usr/bin/gles2-gears
:此应用程序显示的齿轮使用OpenGL ES 2.X作为渲染API。/usr/bin/vg-tiger
:此应用程序使用OpenVG作为渲染API。