如何从 Skia 路径几何体中获取网格?

How to obtain mesh from Skia path geometry?

本文关键字:获取 网格 几何体 路径 Skia      更新时间:2023-10-16

我正在尝试弄清楚如何让 Skia 从路径几何体生成网格。我已经检查了SkPath::dumpSkPath::writeToMemorySkPath::serialize,但是它们似乎都输出路径内容而不是网格。

注意:我所说的网格是指由路径形状的细分产生的三角形网格,以后可以使用非矢量图形 API 渲染,例如 OpenGL/Vulkan。类似于ID2D1Geometry::Tessellate输出的东西.

我提取了这部分代码,公开了三角测量接口,然后在libpag中使用了OpenGL渲染。

// SkPath.h
int toAATriangles(float tolerance, const SkRect& clipBounds, std::vector<float>* vertex) const;
// SkPath.cpp
int SkPath::toAATriangles(float tolerance,
const SkRect& clipBounds,
std::vector<float>* vertex) const {
return GrAATriangulator::PathToAATriangles(*this, tolerance, clipBounds, vertex);
}

https://github.com/libpag/pathkit/blob/5bf0bc2acf8dbd74efb5713627de144a8f1ef2b1/include/core/SkPath.h#L898 https://github.com/libpag/pathkit/blob/5bf0bc2acf8dbd74efb5713627de144a8f1ef2b1/src/core/SkPath.cpp#L2453

当我签入 Skia 时,从路径到三角形的源部分在渲染步骤中自动进行,然后再将视频缓冲区推送到 GPU 管道。所以你不需要担心,图书馆会自己照顾。除非您想显式获取细分步骤的输出,否则我怀疑此 API 是否为用户导出。可能它对库用户是隐藏的。