freeRdp -----GDI加速扩展相关介绍
1.1.1 GDI简介
Remote Desktop Protocol:
Graphics Device Interface (GDI)Acceleration Extensions
GDI加速扩展:
Gdi加速扩展是为了减少带宽,通过编码动态的绘制操作来生成一个图像代替原始图像的编解码。
1.1.2 GDI相关内容1、 Caches
GDI定义了一些数量的缓存提供给客户端和服务器使用:
? 位图缓存(存储位图图像)
? 颜色表缓存:存储调色板。
? 字形高速缓存:存储字符图像。
? 片段缓存:存储收藏的字形。
? 刷缓存:商店使用的8×8像素的位图来填充区域。
? 屏幕外位图缓存:存储可写位图。
? GDI+缓存:用于缓存GDI+1.1原语:
图形缓存、 刷缓存、Pen缓存、图像属性缓存、图像缓存。
? NineGrid位图缓存:
2、 绘图命令相关
? 绘图命令来进行执行以下操作:
1、传输位图数据
2、编码图形渲染实体
3、控制数据缓存
4、管理渲染表面
5、支持远程应用
6、支持桌面合成
? 有三类绘图命令:
1、 主要
每个主要命令都是使用压缩算法组成一个区域集合。这些算法的实际是为了排除发送上次没有改变的命令和当他们能被小区域代替时以减少编码区域的大小。
下面是几大类主要编码命令的绘图操作:
1、使用光栅操作的位图模式组合
2、绘图对象 矩形,线,行,多边形,椭圆等
3、显示文本片段
4、点对点发送屏幕区域
5、暂时保存屏幕模糊区域
6、渲染缓存的位图
7、渲染九个位图
主要绘图操作需要渲染的时候必须出现在特定的缓存,比如:为了呈现一个九宫图,他必须出现一个九宫图缓存。这就是说ige主要的绘图才做命令依赖于二次操作命令先传输数据完成绘图操作到客户端。这段的理解应该是服务器首先会PUDS会调用二级操作指令,将图形数据保存到缓存,然后调用主要绘图指令将数据绘制到屏幕上。
2、 二级操作指令
二次绘图命令:主要用来管理添加和删除下面的缓存条目:
位图缓存
颜色表缓存
图形缓存
刷缓存
通过使用被二级绘图命令指定的能力。如果四个缓存其中一个被指定存在,被支持的缓存和二级绘图指令是相关联的。
3、 辅助绘图指令
备用辅助绘图指令:
是上面2中绘图指令的扩展。在本文档中被用来管理屏幕以外和NINEGrid位图缓存和传送 XXX实体。
使用这些指令,位图可以创建屏幕外位图缓存。并能设置客户端目标绘图表面。也能够使创建和使NineGrid位图缓存在NineGrid更高效。除了创建和更新功能外,还有删除功能。