Symbian OS 9.5 版本中引入了ScreenPlay技术。ScreenPlay是一个新的图形架构,它可以使智能手机制造商充分利用软件性能的提升、硬件的加速及第三方的图形引擎。ScreenPlay就是所谓的新图形架构(New Graphics Architecture,简写为NGA)和GCE(Graphics Composition Engine)功能。
ScreenPlay的引入源自于手机硬件开发模型的需求,例如ScreenPlay可以支持图形加速、图形处理单元(GPU)和非均匀存储访问型(NUMA:Non-Uniform Memory Access)以及均匀存储访问型(UMA:Uniform Memory Access)。 非均匀存储型是GPU中的一个架构,它可以区分GPU与CUP的处理过程,GPU不能访问CPU内存,反之亦然。ScreenPlay可以在不同处理区域间不复制缓冲区的情况下处理非均匀存储型。
ScreenPlay重点概念
l 当有硬件图形加速设备时,基于硬件加速,异步渲染和组合图形,这通过硬件适配层(HAL)来实现。
l 合成半透明的动态内容UI缓冲区,这些动态内容来自于OpenGL ES游戏、视频、或摄像头取景器。
l 提供屏幕内容的安全保障和数字版权管理(DRM)。应用程序不再直接访问屏幕(DSA),屏幕读写操作有Window Server来控制。
l DSA的支持仅仅是为了兼容性。
ScreenPlay架构
下图是ScreenPlay图形架构的概况。
在讲述ScreenPlay中新添加及更新的模块前,先做以下名词解释:
l 合成(Composition):将各种不同显示元素合在一起并呈现到屏幕设备上的过程。
l GPU:图形处理器单元,专注于图形的显示处理。
l Graphics surface:通常称为Surface,它是独立于硬件用来存放图片或部分场景的场所。可以理解为是一个存储区域。
l 硬件加速(Hardware acceleration):用硬件来实现诸如图形显示的功能,比在CUP中用软件实现要快。
l 图层(Layer):由GCE维护在图像合成时的一个显示元素。
l 场景结构(Scene structure):拥有特定大小、可见区域和显示顺序(Z order)的一系列图层,合成后成为一整个场景。
l 场景内容(Scene content):与场景结构相关的图层绑定的一系列surface。
图形合成引擎(Graphics Composition Engine, GCE)及GCE 后台(backend)
GCE在将图像显示到屏幕之前,合成自于不同的图像源的图形。合成有两个重要的概念,即图层和Surface。其中图层描述了被显示元素的几何位置、大小及方向,而Surface是存放图像或部分场景的一些像素缓冲区。
GCE维护图层堆栈并计算显示内容。例如,选择不可见区域和维护需重画区域的列表。GCE后台在另外的线程中进行实际的合成工作,GEC后台在需要时进行像素混合和转换,如伸缩、旋转。GCE后台是一个适配组件,意味着手机制造商可以替换它,从而实现手机硬件自定义功能。GCE后台还可以利用GPU硬件合成和LCD硬件旋转。
这是Symbian OS 9.5 及ScreenPlay中新增的模块。
Surface管理器和Surface更新服务器
Surface管理器创建和管理Surface。Surface在实现时其实是一个共享的内存块,因为它必须能够被用户进程、内核进程及硬件合成器来访问。Surface可以分为多个缓冲区,分别用128位的数字ID来标识,称为Surface ID。Surface可以被Symbian OS中其他组件使用如多媒体框架(MMF)和摄像取景器,以及OpenGL ES 游戏等应用程序。Surface管理器是一个适配组件,可以被替换和定制。
Surface更新组件提供了一个GCE和其客户端的通信机制,这对客户端在快速更新和使用多缓冲Surface时非常有用。
这也是Symbian OS 9.5 及ScreenPlay中新增的模块。
Window Server
Window Server用一个渲染框架(render stage framwork)进行了扩展,允许Window Server在渲染图形的最后阶段通过插件自定义图形的渲染。这个过程称为“延迟渲染”,通过终端Window Server的输出,然后决定这些输出如何被渲染,例如,这些输出可以硬件加速,也可以被送到第三方的图形引擎。渲染框架(render stage framwork)允许手机制造商集成不同的UI和运行时环境(如Flash 或Silverlight),从而达到诸如缩放、渐变等效果。Symbian用DirectGDI技术提供了一个渲染插件,这意味着现在的Window Server程序可以利用硬件加速功能而不用重新编译代码。
在ScreenPlay中,内容渲染插件(Content-Rendering Plug-ins, CRP)可以将一个Surface呈现到屏幕上,这个技术可以被用来在一个窗体中显示多个小视频,其中每个视频对应一个特定的Surface。 ScreenPlay提供了Window Server 客户端API的扩展,允许手机设备相应指针事件,包括接近(Proximity)和压力(Pressure)事件。
DirectGDI
DirectGDI 提供了一个可以硬件加速的图形上下文和一个异步接口,DirectGDI有两部分,通用层和适配层。手机制造商可以用一个图形加速硬件或软件替换适配层。目前,DirectGDI主要用于Window Server的渲染插件中,客户端应用程序还不能直接使用。
DirectGDI也是Symbian OS 9.5 及ScreenPlay中新增的模块。
图形资源(Graphics Resource)
在ScreenPlay中,一个图形资源是指硬件图形加速所使用的数据缓冲区。例如,一个图片就是一个数据缓冲,它是一个二维的像素缓冲区。和DirectGDI一样,图形资源组件提供了通用部分和适配部分。
Non-ScreenPlay架构
虽然Symbian OS 9.5中引入了ScreenPlay, 但它还同时提供了Non-ScreenPlay,即通过配置可以不使用ScreenPlay技术。下图显示了Non-ScreenPlay的架构:
可以看出,在Non-ScreenPlay中没有了渲染框架及GCE的概念,而是用HAL来访问帧缓冲(Frame Buffer),并由屏幕驱动(Screen Driver)提供简单的像素、扫描行和位图操作,硬件制造商通过Screen Driver来适配不同的硬件。上层的图形及文本处理有BitGDI来提供。下图是Non-ScreenPlay中的渲染堆栈图: