问题标签 [vsync]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
72515 浏览

opengl - 如何在opengl中启用垂直同步?

如何启用垂直同步?

是不是很简单glEnable(GL_VSYNC)?(尽管在 glEnable 接受的选项中没有 GL_VSYNC 或类似的东西)。

或者在opengl中没有标准的方法来做到这一点?

0 投票
3 回答
7283 浏览

apache-flex - Flex/Flash/AS3 中的垂直同步?

我在一个 2D 射击游戏上工作,屏幕上有很多移动的物体(子弹等)。

我使用 BitmapData.copyPixels(...) 将整个屏幕渲染到缓冲区:BitmapData。然后我从“缓冲区”“复制像素”到屏幕:BitmapData。帧率为60。

问题是精灵正在撕裂:精灵的某些部分水平移动。

看起来像是关闭了 VSYNC 的 PC 游戏。

有没有人解决这个问题?

更新:问题不在于性能,而在于摆脱屏幕撕裂

[!] 更新:我创建了另一个问题,在这里您可以尝试两种实现方式:使用 Flash 方式或 BitmapData+copyPixels()

0 投票
3 回答
6021 浏览

graphics - 如何避免在 Linux/X11 上使用 pygame 撕裂

我一直在玩 pygame(在 Debian/Lenny 上)。它似乎工作得很好,除了烦人的 blit 撕裂(全屏或窗口模式)。

我正在使用默认的 SDL X11 驱动程序。谷歌搜索表明 X11 不提供垂直同步功能(即使使用FULLSCREEN|DOUBLEBUF|HWSURFACE标志创建的显示)是 SDL 的一个已知问题,我应该改用“dga”驱动程序。

然而,运行

引发 pygame 初始化

(尽管xdpyinfo显示了 XFree86-DGA 扩展)。

那么:获得无撕裂垂直同步翻转的诀窍是什么?通过让这个 dga 工作或其他机制工作?

0 投票
4 回答
790 浏览

vb6 - VB6 垂直同步模拟器

这可能是一个倾斜的问题:

我正在用 VB6 编写一个模拟器(我很傻)。为了在模拟器本身中平滑窗口刷新,我想获取监视器的垂直同步。我可以使用任何 Windows API 调用吗?或者这是一个不可能的要求?

0 投票
3 回答
10818 浏览

c++ - 如何在 OpenGL 中启用 VSYNC

WGL_EXT_swap_control 扩展允许在 Windows 上执行此操作,但我什至无法找到任何远程跨平台执行相同操作的内容,即将我的缓冲区交换与屏幕刷新同步。我的应用程序使用 GLEW,所以由它提供的东西会更好。对 Linux、Mac 和 Windows 的跨平台支持是必要的,但如果无法设置同步(例如,用户在他的图形驱动程序中强制关闭),我的应用程序不会中断。

我将接受在许多平台上使用 GLEW 执行此操作的程序代码作为有效答案。

0 投票
2 回答
630 浏览

iphone - 哪些硬件可以支持 CADisplayLink 类?

我正在用 iPhone 制作游戏。我发现 iPhone OS 3.1 支持带有 CADisplayLink 类的垂直同步。我相信垂直同步是游戏图形的理想解决方案,我只会使用它。(没有回退到 NSTimer)但是 SDK 文档也这么说;CADisplayLink 仅在 OS 3.1 中受支持。

是否有不支持 CADisplayLink 类的硬件模型?

0 投票
1 回答
2214 浏览

windows-7 - 快速截屏和丢失 Vsync

我想用自制的应用程序实时生成一部电影,该应用程序通过正在运行的 3D 应用程序占用部分屏幕进行快速屏幕捕获。

我知道已经存在几个应用程序(如 FRAPS 或 Taksi),甚至专用的 DirectShow 过滤器(如 UScreenCapture),但我真的需要用我自己的外部应用程序来实现。

正确设置 (UScreenCapture + ffdshow) 时,捕获压缩全屏不会像您预期的那样消耗 CPU(大约 15%),并且不会影响 3D 应用程序的性能。

从外部应用程序进行捕获的问题是 3D 应用程序失去了 Vsync 并创建了一个毛茸茸的、难以使用的 3D 应用程序(3D 应用程序只呈现在屏幕的一小部分,其余的是 GDI、DirectX)

FRAPS 通过允许您一次仅捕获一个应用程序(具有焦点的应用程序)来解决此问题。根据所使用的技术(OpenGl、DirectX、GDI),它会挂接 Vsync 并进行捕获(使用 glReadPixels,...),而不会干扰它。这样做并不能解决我的问题,因为我想要完整的合成屏幕图像(包括 3D 和其余部分)和流畅的 3D 应用程序。

UScreenCapture 似乎使用快速 DirectX 调用来捕获整个屏幕,但 openGL 3D 应用程序仍然不同步。

执行 BitBlt 太慢并且 CPU 消耗以进行实时 30 fps 采集(至少在 windows XP 下,不确定 7)

我的问题是知道是否有办法使用 Windows 7 实现我的目标,它是全新的 DirectX 合成引擎?

Windows 7 成功地显示每个应用程序的实时 VSynced 重复预览(在任务栏中),因此必须有一种方法可以访问当前显示的屏幕缓冲区,而不会干扰 3D OpenGL 应用程序的渲染?

任何其他建议,技术?谢谢你

0 投票
5 回答
16984 浏览

directx - 如何在 D3D 窗口应用程序中启用 VSYNC?

所以,我在窗口应用程序中使用 D3D。

我使用以下参数启动了 D3D:

每次调用 OnPaint 时,我都会将图像渲染到后缓冲区并将其呈现到前面。

据我所知(MSDN 也是这么说的),一旦我设置了D3DPRESENT_INTERVAL_ONE,vsync 就可以工作了。

但在这种情况下,水平拖动时图像会撕裂。

(似乎图像上有一条线,线下方的图像显示在监视器上,然后是上面的部分。)

一些网站说 D3DPRESENT_INTERVAL_ONE 在窗口应用程序中不起作用。

无论如何,我怎样才能启用垂直同步?

ps 我终于发现 D3D vsync 是启用的,而有些窗口设置不正确,可能是窗口本身没有同步。不过,我还没有查看设置。

0 投票
1 回答
593 浏览

visual-c++ - MFC 和 GDI+ 中的垂直同步

嗨,我正在为我的中期项目使用 MFC SDI 应用程序。但每次我绘制场景(使用 GDI)和“invalidate()”时,它都会发生闪烁。

我使用 DWM 进行双重缓冲和消除闪烁,但它很少发生。我认为问题在于垂直同步。我可以做些什么来启用虚拟同步

0 投票
2 回答
3195 浏览

opengl - 轻量级 OpenGL 游戏的完美 V-sync 实现:需要一点信息

在我们的互联网组装团队正在编程的游戏中,我们假设我们的观众中的每个人都将在游戏中全速前进。

因此,为了节省视频 RAM,并希望给显卡多一点空闲时间,使用没有双缓冲的垂直同步将是我们的最佳选择。因此,在 OpenGL 中,我们需要知道如何做到这一点。

根据我的理解,垂直同步是指显卡在完成渲染单个帧后暂停,直到该帧完成发送到显示设备。双缓冲不会暂停渲染操作(或者它可能会暂停,或者它可能是特定于实现的;不确定),因为它会在复制到帧缓冲区之前绘制到第二个缓冲区,以便监视器获得完整帧或没有完全新的帧(特别是帧缓冲区中最后存储的图像)。好吧,我们不需要这个功能,只要显卡只在它该死的需要时才写入帧缓冲区。

这是一个相当慢的网络游戏(但它很有创意^_^)。很少有实时动作。因此,非常精确的用户输入不是必需的;在渲染帧之前,它可以随时从操作系统作为一个单元被捕获。

因此,为了做到这一点,我需要能够从 OpenGL 获得“帧已完成发送到监视器”的消息。是否可以?如果没有,最好的选择是什么?

该游戏目前仅针对 Windows 进行编程,但应该在几个月内完成针对 Linux 的工作。