skia的结构及具体实现

1. Skia:skia是个2D向量图形处理函数库,包含字型、座标转换,以及点阵图都有高效能且简洁的表现。
2. 在chrome里,skia的具体实现:
   a. 在chrome刚启动的时候,会去调用字型的处理函数去读取所有的字体配置,然后去配置默认的字型。具体实现在:SkFontHost_android.cpp  init_system_fonts()

   b. SkBitmap是skia中很重要的一个类,很多画图动作涉及到SkBitmap,它封装了与位图相关的一系列操作。
      Allocator是SkBitmap的内嵌类,其实只有一个成员函数:allocPixelRef(),所以把它理解为一个接口更合适,SkBitmap使用Allocator的派生类–HeapAllocator作为它的默认分配器。
      allocPixelRef 的实现是在  src/core/SkBitmap.cpp
      SkBitmap和Allocator的定义是在 include/core/SkBitmap.h

   c. 可以看到,在进行绘制的过程中,Bitmap起了很大的作用. 所以在进行fish ie tank进行测试的时候,首先会进行的是:判断bitmap是不是会返回成功。
      这部分的具体实现是在chrome/content/public/common/common_param_traits.cc中的Read函数中进行,Read()会去调用InitSkBitmapFromData去进行具体的判断。

   d. 绘制时几个重要的类:
      SkDevice:设备类包含一个SkBitmap作为后端,用于软件绘制方案. (SkDevice类的初始化和内部实现是在SkDevice.cpp)

      SkGpuDevice:设备类,包含一个绘制的目标对象,通过GrContext来绘制,其利用硬件加速的GL库来绘制2D图形.SkGpuDevice类的初始化和实现是在SkGpuDevice.cpp

      SkDraw应该就是绘制细节的实现

      SkCanvas更像是接口的提供者,SkCanvas会调用SkDevice里面的绘制方法,而这些方法是由SkDraw具体承担的。


3. 代码的实现"
      skcanvas.cpp    SkCanvas::internalDrawBitmap(const SkBitmap& bitmap, const SkIRect* srcRect,const SkMatrix& matrix, const SkPaint* paint)
                                     |
                                    \|/
      skcanvas.cpp    SkCanvas::commonDrawBitmap(const SkBitmap& bitmap, const SkIRect* srcRect,const SkMatrix& matrix, const SkPaint& paint)
                      (在SkCanvas::commonDrawBitmap函数中,有个while (iter.next())循环.  在这个循中,有个函数为iter.fDevice->drawBitmap(iter, bitmap, matrix, paint),这里的iter为:skdrawiter; fDevice即为skDevice)

                      然后就会由此进入到到skdevice的实现部分.

      SkDevice.cpp,  SkDevice::drawBitmap  (const SkDraw& draw, const SkBitmap& bitmap, const SkIRect* srcRect, const SkMatrix& matrix, const SkPaint& paint)
                     在这个函数中,会调用draw.drawBitmap(*bitmapPtr, matrix, paint);

      SkDraw.cpp,    SkDraw::drawBitmap(const SkBitmap& bitmap, const SkMatrix& prematrix,const SkPaint& origPaint)
                     在整个函数中,会进行ChooseSprite,drawRect,drawBitmapAsMask等函数着色,颜色设置,绘画等等的具体判断和操作.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值