stroke/fill/paint 中的开罗性能洞察

Cairo performance insight in stroke/fill/paint

这是一个更普遍的问题,关于如何在考虑性能的情况下为 Cairo 编写代码。

什么能提供更好的性能:

  1. 让你的 lines/area/... 比 stroke/fill/paint
  2. 制作 1 个项目,例如一个盒子 stroke/fill/paint 并制作下一个盒子,直到全部完成。

或者没有显着差异?或者可能只用于油漆而不是 stroke/fill?是否取决于抽取物品的数量?

一个真实世界的例子(高级代码),计算abc很简单:

save cr
set_source_color cr rgb1
loop 100 times
   do calculations abc
   draw box
end loop
fill cr
restore cr

set_source_color cr rgb2
loop 100 times
   do calculations abc
   draw arc
end loop
fill cr
restore cr

set_source_color cr rgb3
loop 100 times
   do calculations abc
   draw rectangle
end loop
fill cr
restore cr

loop 100 times
   do calculations abc

   set_source_color cr rgb1
   draw box
   fill cr

   set_source_color cr rgb2
   draw arc
   fill cr

   set_source_color cr rgb3
   draw rectangle
   fill cr
end loop

当然,这只有在所有框等都具有相同颜色的情况下才有效。否则必须使用选项 2。

这是一个更笼统的问题,给出的示例只是为了让我的示例场景更加清晰的说明。请毫不犹豫地在 depth/technical 中回答。

当您在 window 上绘图时,大多数绘图操作都发生在 GPU and i guess your calculations on CPU 上。根据操作,每个处理单元具有吞吐量和处理时间。为避免同步等待太久,您应该混合计算和绘图,让单元并行工作。

在图像表面作为目标的情况下,一切都会在 CPU 上发生,但内部多线程也可能导致并行渲染管道。

我建议使用您的第一种方法。