我构建了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())
代替。感谢快速回复/回复(它仍然回答我的问题!!)..
答案 0 :(得分:0)
没有这样的刷新/刷新率设置。开罗画出你告诉它的所有东西然后只是回归控制。
我有两个想法:
cairo_surface_flush()
之间经过的时间。