gpt4 book ai didi

c - GDK3/GTK3 窗口更新的精确计时

转载 作者:太空宇宙 更新时间:2023-11-03 23:40:04 29 4
gpt4 key购买 nike

我有一个使用 GTK 用 C 语言编写的应用程序(尽管语言对于这个问题可能并不重要)。

此应用程序有一个全屏gtk_window 和一个gtk_drawing_area。对于绘图区域,我已经通过 gtk_widget_add_tick_callback 注册了一个滴答回调,它每次滴答调用 gtk_widget_queue_draw。在绘图区域 draw 回调中,我定期更改整个窗口的颜色(例如,以 1Hz 的频率从黑色变为白色)。

假设在调用绘制回调函数时我想将窗口从黑色更改为白色。我想知道实际在屏幕上绘制更改的精确时间(精确到毫秒)(最好与 CLOCK_MONOTONIC 单位相同)。我不认为这与 tick 回调中可用的 GdkFrameClock 是一回事,据我了解,它是关于帧的时间,而不是帧实际显示的时间屏幕上。

如果我只是测量绘图回调中的 CLOCK_MONOTONIC 时间,然后使用光电二极管测量实际变化是通过附加的 A2D 进行的,实际变化是显示延迟是可以理解的通过多个刷新间隔(在我的例子中,3 次屏幕刷新)。

作为一个总结:如果我在 GTK 小部件绘制回调中,有没有办法知道显示器实际显示在 CLOCK_MONOTONIC 单位的时间?或者,有没有一种方法可以阻止一个单独的线程,直到我关心的特定重绘实际显示在屏幕上(一个我可以编写的函数,如 wait_for_screen_flip())?

更新:理想情况下,相同的解决方案适用于任何 Linux 合成器(X11 或 Wayland),这就是为什么我希望有一个 GTK/GDK 解决方案,其中合成器被抽象掉了。

最佳答案

类似于 Uli 对 Present 扩展和 PresentCompleteNotify for X11 的回答,Wayland 有一个类似的协议(protocol),称为 wp_presentation_feedback:

https://cgit.freedesktop.org/wayland/wayland-protocols/tree/stable/presentation-time/presentation-time.xml

此协议(protocol)允许 Wayland 合成器在其内容实际显示(变亮)时通知客户。它独立于实际使用的缓冲机制(EGL/SHM/等)。要使用它,您可以在 wl_surface_commit 之前调用 wp_presentation_get_feedback;提交完成后,presented 事件将从新的 wp_presentation_feedback 对象发送到客户端,如果从未显示,则discarded

演示反馈目前在韦斯顿实现;它还没有在 Mutter 中实现,我也不认为它在 KWin 中实现了。 GTK+ 计划在它在 Mutter 中可用时支持它,但我对如何通过 GTK+ API 公开它没有任何深刻见解。

话虽这么说,如果您可以访问 Wayland 显示,您就可以自己直接使用该界面。

关于c - GDK3/GTK3 窗口更新的精确计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48424320/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com