Skia深入分析
文章平均质量分 83
Android系统、Webkit内核所使用的2D图形引擎Skia的深入分析
夕阳叹
The best way to predict the future is to create it.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Skia深入分析10——Skia库的性能与优化潜力
Skia库性能分析图形/渲染作为图形渲染引擎,性能上是非常重要的,按通常Android手机60帧的刷新率,绘制一帧的总时间只有16ms,可谓是毫厘必争。提升性能到最后,就必然跟硬件打交道,适配CPU,毕竟一个SIMD做下去,好做的提升5、6倍,不那么好做的也达到2、3倍,收益极其可观。 使用SIMD,需要代码架构是满足内存连续性要求的,否则需要重构,Skia作为正常的图形渲染引擎,采用行渲染方式,原创 2015-03-06 22:03:03 · 6090 阅读 · 0 评论 -
Skia深入分析9——延迟渲染和显示列表
概念Android的硬件加速,是先将绘制命令存储起来,然后回放,作为软件绘制的引擎Skia中同样有这样的机制。在Android 4.4的版本中又加入了延迟渲染的Canvas,它相当于默认使用显示列表的Canvas。 先得到显示列表,再进行渲染,便有机会基于绘制API的整体情况做优化调度。比如使用GPU加速,裁剪过度绘制等。从原理上看,很可能在这一层级做比较大的效率提升,不过,由于Android既定原创 2015-03-05 01:33:33 · 4669 阅读 · 2 评论 -
Skia深入分析8——Skia的GPU绘图
Skia的GPU绘图一、Skia-GPU概述在Android4.2到Android5.0的过程中,skia中开发较频繁的部分莫过于GPU加速部分和延迟渲染机制,尽管目前来看几乎没有用到,但后续很可能会在Frameworks层引入。 在Android上面,只可能使用OpenGL,因此作为使用OpenGL的绘图引擎,关注如下要点即可: 1、OpenGL上下文如何建立(关系到如何显示绘制结果) 2、原创 2015-03-01 21:56:45 · 14417 阅读 · 3 评论 -
Skia深入分析7——区域解码
Skia深入分析7——区域解码1、概述 -当图片很大时,解码速度缓慢,占用内存很高,并且,当图片超过一定尺寸时,无法做纹理上传和显示(这跟GPU能力有关,一般的GPU是8192*8192)。这时只好做下采样,但会牺牲图片显示的质量。 -对于图库等需要清晰浏览图片的应用,不可能设置一个下采样率去解决这一问题,因此,Google加入了区域解码这个功能,使我们可以从原始的图片文件中,解出一部分区域完整原创 2015-02-27 22:49:26 · 3972 阅读 · 1 评论 -
Skia深入分析6——skia中图像编解码代码概述
1、API和自注册机制Skia中编码解码图片都只需要一行代码:解码:SkBitmap bitmap;SkImageDecoder::DecodeFile("test.xxx", &bitmap);//由文件名解码,自动推断图片类型//或者由流解码SkFILEStream stream("test.xxx");SkImageDecoder::DecodeStream(stream原创 2015-02-26 23:39:11 · 6777 阅读 · 13 评论 -
Skia深入分析5——skia文字绘制的实现
文字绘制主要包括编码转换(主要是中文)、字形解析(点线或image)和实际渲染三个步骤。在这个过程中,字形解析和实际渲染均是耗时步骤。Skia对文字解析的结果做了一套缓存机制。在中文字较多,使用多种字体,绘制的样式(粗/斜体)有变化时,这个缓存会变得很大,因此Skia文字缓存做了内存上的限制。1、SkPaint文字绘制与SkPaint的属性相关很大,先回头看下SkPaint相关的属性原创 2015-02-18 19:55:05 · 7180 阅读 · 9 评论 -
Skia深入分析4——skia路径绘制的实现
Skia路径绘制代码分析路径绘制尽管使用频率相对于图像绘制、文本绘制低,但却是非常重要的一个基本特性。所有不规则图形(椭圆、圆角矩形、三角形、简单的文字),最后都避不开路径绘制。而且,若自己实现一个2D引擎,这块内容是很具有参考意义的,用OpenGL的话,图像采样等都很少关注了,对对坐标就好。但菱角、圆弧、曲线等如何绘制仍然是一个难题,这时就可以参考Skia中drawPath的实现。由原创 2015-02-10 00:06:16 · 6387 阅读 · 0 评论 -
Skia深入分析3——skia图片绘制的实现(2)
此篇讲图像采样一、采样流程在上一节里的流程图有写到,图像绘制的实际渲染发生在某个blitter的blitRect函数中,我们先看一个具体的blitRect实现。void SkARGB32_Shader_Blitter::blitRect(int x, int y, int width, int height) { SkASSERT(x >= 0 && y >= 0 &&原创 2015-02-02 22:17:46 · 4581 阅读 · 0 评论 -
Skia深入分析3——skia图片绘制的实现(1)
此篇讲Skia绘制图片的流程,在下一篇讲图像采样原理、混合和抖动技术1、API用法(1)drawBitmapvoid drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, const SkPaint* paint = NULL);将bitmap画到x,y的位置(这本身是一个平移,需要和SkCanvas中的矩阵原创 2015-01-24 01:33:43 · 7965 阅读 · 0 评论 -
Skia深入分析2——skia渲染架构
一、渲染层级从渲染流程上分,Skia可分为如下三个层级:1、指令层:SkPicture、SkDeferredCanvas->SkCanvas这一层决定需要执行哪些绘图操作,绘图操作的预变换矩阵,当前裁剪区域,绘图操作产生在哪些layer上,Layer的生成与合并。2、解析层:SkBitmapDevice->SkDraw->SkScan、SkDraw1Glyph::Proc这一层原创 2015-01-17 01:38:20 · 10610 阅读 · 2 评论 -
Skia深入分析1——skia上下文
前言: 断断续续跟Android的skia库打了两年交道,如今交接掉了,便写写关于skia的一些知识,也算了结一段职业生涯。找了找网上关于skia的文章,基本上都过时了,讲得也不怎么深入。虽然Skia只是一个2D引擎,但其深度优化的算法、完善的渲染体系和精炼的代码框架,还是很值得借鉴的。 PS:文章所依据的代码为目前最新的Android 5.0.2。原创 2015-01-10 01:21:56 · 13201 阅读 · 2 评论
分享