开罗在中风/填充/涂料方面的性能洞察力

时间:2015-08-24 12:45:12

标签: performance cairo

这是一个关于如何为Cairo编写代码并考虑到性能的更一般性问题。

什么能带来更好的效果

  1. 制作你的线条/区域/ ...而不是笔画/填充/绘画
  2. 制作1个项目,例如盒子笔划/填充/涂料,然后执行下一个框,直到它们全部完成。
  3. 或者没有显着差异?或者也许只是油漆而不是中风/填充?它取决于绘制项目的数量吗?

    一个真实世界的例子(高级代码),计算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。

    这是一个更普遍的问题,给出的示例只是说明我的示例场景清晰。请不要犹豫,深入/技术性地回答。

1 个答案:

答案 0 :(得分:0)

当您在窗口上绘图时,大多数绘图操作都在GPU上进行,我想您在CPU上的计算。取决于操作,每个处理单元具有吞吐量和处理时间。为了避免等待同步,您应该混合计算和绘图以使单元并行工作。

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

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