2021-05-11 22:07:39
Skia的渲染架构主要分为三个层级:指令层、解析层和渲染层。每个层级都有其特定的功能和职责,共同协作以实现高效的图形渲染。以下是对每个层级的详细解析:
指令层:
功能:这一层主要负责决定执行哪些绘图操作,包括绘图操作的预变换矩阵、当前裁剪区域,以及绘图操作产生在哪些layer上。它还涉及layer的生成与合并。
关键组件:SkPicture和SkDeferredCanvas是这一层的主要组件,它们最终会输出到SkCanvas。SkCanvas是Skia中用于执行绘图指令的核心类,它接收绘图命令并管理绘图状态。
工作流程:在这一层,绘图指令被记录并可能被延迟执行(通过SkDeferredCanvas),以便进行优化。预变换矩阵和裁剪区域被应用于绘图指令,以确定最终的绘图效果。同时,根据需要生成和管理layer,以实现复杂的图形效果。
解析层:
功能:解析层负责决定绘制方式,完成坐标变换,解析出需要绘制的形体(如点、线、规整矩形),并做好抗锯齿处理。此外,它还进行相关资源解析并设置好shader。
关键组件:SkBitmapDevice、SkDraw、SkScan以及SkDraw1Glyph::proc是这一层的主要组件。它们协同工作,将绘图指令转换为具体的绘制操作。
工作流程:在这一层,绘图指令被解析为具体的绘制操作。坐标变换被应用于绘制对象,以确定它们在屏幕上的最终位置。同时,抗锯齿处理被应用于绘制对象,以提高图形质量。此外,相关的资源(如纹理、着色器等)被解析并设置好,以便在渲染层中使用。
渲染层:
功能:渲染层负责进行采样(如果需要),产生实际的绘制效果。它完成颜色格式适配,进行透明度混合和抖动处理(如果需要)。
关键组件:SkBlitter、SkBlitRow::proc以及SkShader::shadeSpan等是这一层的主要组件。它们负责将解析层生成的绘制操作转换为实际的像素数据。
工作流程:在这一层,解析层生成的绘制操作被转换为实际的像素数据。采样操作被执行(如果需要),以确定每个像素的颜色值。颜色格式适配被执行,以确保像素数据与目标表面的颜色格式相匹配。同时,透明度混合和抖动处理被应用于像素数据,以产生最终的绘制效果。
综上所述,Skia的渲染架构通过指令层、解析层和渲染层的协同工作,实现了高效的图形渲染。每个层级都有其特定的功能和职责,共同协作以完成复杂的图形绘制任务。