kvm虚拟机图形性能的优化

GraphicsImage destination字段指向当前Graphics对象的目标绘制区域。

当目标区域为屏幕时,该字段为空,否则指向一个Image的子类MutableImage类型的对象。

无论目标绘制区域是屏幕或者是缓冲区,都是用SCREEN_INFO保存其信息。不同的是wndID,屏幕时wndID指向的是一个窗体,否则是一个pixmap

 

目前对于设置GraphicssetColorsetClipsetFont等接口只是将相关属性保存在Graphics对象当中,并没有对绘图目标区域SCREEN_INFO中对应的gc进行设定,而是当调用drawLinedrawChars等具体操作时,调用GRAPHICS_SETUP(FALSE)gc的剪切区和线条等属性进行设置,有一些如颜色属性在调用LCDUIdrawLine等接口时设定,字体是在LCDUIdrawChars中进行设定的。

由于每个目标设备都有自己的gc,其实设定Graphics绘图属性时,可以直接设置相应CREEN_INFO中的gcID进行设置,从而避免每次绘图操作时,都需要设置gc

根据上述方法优化后的sun的kvm虚拟机,jbeanchmark的测试成绩提升了200%以上。看来图形还是最消耗资源的。

 

Graphics.rgbColor

// 用来替代myBitmapStruct,表示屏幕信息或者一个缓冲区

typedef struct screen_info {

    struct _gvt *vtable;     // 对应的基本图形绘制函数表

    int prop;    // 表示是否有alpha混合,mask等信息

    int width;

    int aligned_width;     // image的宽度数值是为偶数的,类似填充位

    int height;

    //int cl, ct, cr, cb;// 取消于20070628,使用底层microwindow剪切区

    // 该绘图区域中的gc,其实只有屏幕和MutableImage对象时,gc才有效

    GR_GC_ID  gcID;  

    GR_WINDOW_ID  wndID; // Image对象对应得pixmapid或者屏幕窗体id

    GR_REGION_ID regionID;// 用来设置对应的剪切区

    // unsigned char *alpha;    // alpha混合时所用的数据

    int strokeStyle;   // 所画线条的类型

    int mutable;    // 窗体id对应的区域是否是可变的。

    // alpha 通道,当SCREEN_INFO表示屏幕或者没有alpha通道的图像时

    // alphaChannel的值等于0

    int alphaChannel ;

 

       /* 原系统只使用一个全局变量,在多线程情况下可能会出现问题,

    * 其实该font并没有什么用处,每次进行绘图操作时,

    * 将获取Graphics对象当中font

    */

       LOG_FONT font;

} SCREEN_INFO;   // screenInfo包含窗体id和大部分得gc信息。

 

 


当要载入一副图片时,先调用Image.createImage接口将其载入一个Image的子类ImmutableImage类型的对象当中。

然后再调用Graphics.drawImage方法将其绘制到屏幕或者另一个绘图缓冲区(MutableImage类型的对象)当中。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值