gpt4 book ai didi

windows - Windows 的 CVDisplayLink 替代品?

转载 作者:可可西里 更新时间:2023-11-01 13:27:25 24 4
gpt4 key购买 nike

在 Mac OS X 上,CVDisplayLink提供了一种可靠地更新屏幕以实现 60 fps 动画而不会撕裂的好方法。 Windows上有没有类似的界面,兼容OpenGL?

当然可以在等待 vsync 时进行阻塞,但这不适用于需要同时设置动画的多个窗口。在 Windows 上,它们会互相等待(因此每个等待 vsync 的两个窗口将下降到 30 fps),这与 OS X 不同。

例如如何视频播放器实现平滑的屏幕更新?

最佳答案

Windows 的典型架构与 Mac 不同,因为您可以控制主循环而不是 OS 库 - 不需要等效的 CVDisplayLink(当然,如果 API 更好,您就不需要知道很多具体信息来实现这一目标)。

如果您正在使用一个无限循环的循环,那么在循环结束时等待 vsync 就可以了。如果您有多个窗口,则需要相应地安排渲染,以便在提交所有渲染后,您的“主更新循环”以等待 vsync 结束。

通常我有这样的东西:

while(!toldToQuit)
{
Render();
Update();

WaitForVsync();
}

它允许 CPU 更新(下一帧)工作与 GPU 渲染工作一起发生...

如果驱动程序将此作为其默认行为,SwapBuffers( HDC ) 将等待 vsync,否则有用于设置 vsync 的 wgl 扩展 - wglSwapIntervalEXT( int ):

http://www.opengl.org/registry/specs/EXT/wgl_swap_control.txt

我一直实现“不垂直同步”的方法是渲染单缓冲而不调用 SwapBuffers...因为 wglSwapIntervalEXT(0) 在我测试过的任何硬件上都没有实现这一点。

关于windows - Windows 的 CVDisplayLink 替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10584882/

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