我有一个将多边形绘制到pycairo上下文中的函数,如下所示:
def draw_polygon(context, polygon):
context.move_to(*polygon[0])
for point in polygon:
context.line_to(*point)
context.line_to(*polygon[0])
然后,此循环多次调用此操作(约350k):
for polygon in polygons:
draw_polygon(context, polygon)
context.stroke()
运行cProfiler
是draw_polygon
的主要瓶颈,约占tottime
的60%。
当涉及大量几何图形时,什么是优化此类工程图的好方法?是否可以像openGL一样将几何体组装到顶点列表或其他一些优化的数据结构中?
答案 0 :(得分:0)
是否有类似于openGL的方法将几何体组装到顶点列表或其他一些优化的数据结构中?
有context.append_path()
。在内部,这仅调用其他C函数,没有什么特别的,但是也许可以节省pycairo的一些开销?我不确定这是否真的会更快。
然而,append_path
的文档说以下话,这使我认为您不能真正从纯Python构造此数据结构:
将路径追加到当前路径。路径可以是Context.copy_path()或Context.copy_path_flat()之一的返回值,也可以手动构造(在C中)。