- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用GdkFrameClock
将小部件的更新与屏幕刷新率同步。这是为了在 LCD 屏幕上进行视觉刺激响应测量(因此需要尽可能接近精确的帧同步以保证信号的纯度)。
我已经阅读了该类的文档,但其范围有限;我缺少对 GdkFrameClock 在 GTK 世界中的地位的一些总体理解。仔细阅读 GitHub 上 GTK 源代码树中的演示对我来说毫无结果。
假设我可以,我如何使用GdkFrameClock
来同步更新GtkDrawingArea
(假设开罗)屏幕刷新率?
如果我不能,GdkFrameClock
的用途是什么?
最佳答案
我没有愤怒地使用过GdkFrameClock
,只是为了进行一点测试,但以下内容似乎很简单并且对我有用:
gtk_widget_add_tick_callback()
,传递您想要在每次刷新时运行的函数gtk_widget_remove_tick_callback()
或从回调中返回 FALSE
以停止接收更新。在第 2 步中,您将传递正在使用的 GdkFrameClock
,因此您可以调用 gdk_frame_clock_get_frame_time()
来获取准确的帧时间戳,或使用 gdk_frame_clock_get_timings( )
和 GdkFrameTimings
API 可以做更多有趣的事情。
以下 Vala 代码(我确信可以轻松转换为 D :-))显示了这一点:
private static bool on_frame_tick(Gtk.Widget widget, Gdk.FrameClock frame_clock)
{
print("Got frame tick with timestamp %lld\n", frame_clock.get_frame_time());
return true; // Keep going
}
void main(string[] args)
{
Gtk.init(ref args);
var w = new Gtk.Window(Gtk.WindowType.TOPLEVEL);
w.add_tick_callback(on_frame_tick, null);
w.show_all();
Gtk.main();
}
请注意,根据 the docs ,您需要在处理程序中调用 gtk_widget_queue_draw()
(或 queue_draw_area()
),让 GTK 实际执行重绘。这将依次调用相关小部件的 draw()
函数。
因此,我要做的就是将帧计时信息保存在我的刻度回调中,调用 queue_redraw()
,然后在 draw()< 中使用保存的计时信息
我的 GtkDrawingArea
的实现。
关于gtk - 使用 GdkFrameClock 将 GtkDrawingArea 与屏幕刷新率同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19342087/
背景 我想使用GdkFrameClock将小部件的更新与屏幕刷新率同步。这是为了在 LCD 屏幕上进行视觉刺激响应测量(因此需要尽可能接近精确的帧同步以保证信号的纯度)。 我已经阅读了该类的文档,但其
我是一名优秀的程序员,十分优秀!