开罗表面仅冲洗1 fps

时间:2014-05-18 03:51:16

标签: graphics 2d flush cairo frame-rate

我构建了cairo(v1.12.16)图像表面,其中包含:

surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, size.width, size.height);

和60 fps;清理它,画出东西,然后用:#/ p>

cairo_surface_flush(surface);

然后,得到结果画布:

unsigned char * data = cairo_image_surface_get_data(surface);

但结果数据变量仅每秒修改(大约),而不是每秒修改60次。即使使用cairo的石英后端,我也得到了相同(意外)的结果...... cairo中是否有任何冲洗/刷新率设置,我还没有(还)知道?

编辑:我只是想绘制一些填充(随机和/或计算)的矩形;每帧测试100到10K的数量。所有相关代码都在相同的(显示?)线程中运行。我没有缓存'data'变量。我甚至修改它的一个角落闪烁,我可以看到60fps(100个rects)和2-3个fps(10K rects)的闪烁;意味着返回的'data'变量没有刷新!?在使用cairo石英后端的另一个项目中,我获得了相同的1 fps结果!??

Edit2:罪魁祸首证明是time()函数;当在srand(time(NULL))中使用时,它在同一秒内产生相同的随机变量;使用srand(std::clock())代替。感谢快速回复/回复(它仍然回答我的问题!!)..

1 个答案:

答案 0 :(得分:0)

没有这样的刷新/刷新率设置。开罗画出你告诉它的所有东西然后只是回归控制。

我有两个想法:

  • 要么cairo绘制得足够快,而其他东西正在减慢速度(例如你在某处复制绘图的结果)。您应该衡量开始绘制和调用cairo_surface_flush()之间经过的时间。
  • 你正在绘制一些非常非常复杂的东西,而cairo确实需要一秒钟来渲染它(但是,我不知道怎么会意外地导致如此复杂的渲染)。