本篇位置:模块二 · 第 1 篇 | 前置:模块一 · 图形学数学基础 | 预计阅读:25 分钟
你已经在用它了
SurfaceFlinger 回落 GPU 合成时,最后干活的是这个函数(libs/renderengine/skia/SkiaRenderEngine.cpp,删去了调试与厂商分支):
void SkiaRenderEngine::drawLayersInternal(...) {
// ...
for (const auto& layer : layers) {
// 图层自己的变换,作用到画布矩阵上
canvas->concat(getSkM44(layer.geometry.positionTransform).asM33());
const auto [bounds, roundRectClip] =
getBoundsAndClip(layer.geometry.boundaries, layer.geometry.roundedCornersCrop,
layer.geometry.roundedCornersRadii);
// ... 建 shader、设 paint ...
canvas->drawRect(bounds.rect(), paint);
}
auto drawFence = sp<Fence>::make(flushAndSubmit(context, dstSurface));
}