问题标签 [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.
qt - Qt 5:禁用垂直同步
我想禁用vsync
QOpenGLContext 格式,以便于集成第三方渲染系统。
QSurfaceFormat::swapInterval
似乎是 Qt 中唯一相关的参数。
我尝试了几种方法来实现这一点,但即使我QSurfaceFormat::swapInterval(0)
在早期阶段(在QMainWindow
构造之前)设置了,那么QOpenGLContext::create()
调用正在恢复它。
有没有办法强制禁用 vsync?
python - 在 Raspberry Pi 上使用 pygame 进行屏幕撕裂
我被困在屏幕撕裂问题上大约一个星期了。
这是我的问题:我想制作一个可以非常快速地显示一系列 PNG 图片的程序(以 30 fps 或更高的速度)。为此,我使用 pygame 库,尤其pygame.display.blit
是pygame.display.flip
.
这是代码示例(带有自制延迟功能):
计时器允许我在屏幕上拥有相同的刷新率。我的问题是人们可以亲眼看到存在屏幕撕裂问题(https://en.wikipedia.org/wiki/Screen_tearing)。在 pygame 文档中,他们建议对屏幕初始化使用其他标志(pygame.HWSURFACE and pygame.DOUBLEBUF
,http://www.pygame.org/docs/ref/display,y.set_mode
)。显然,这些可以帮助纠正屏幕撕裂问题。但是当我使用这些标志时,我看不到屏幕撕裂校正。
我在某处看到 pygame 无法在 X11 上处理 vsync,这可以解释为什么我认为 HWSURFACE 和 DOUBLEBUF 标志没有区别。
有人在 Raspberry Pi 上遇到过这个 vsync 问题吗?是否有要放入“config.txt”文件的参数?有没有人有办法获得真正的 vsync 信息来避免这些屏幕撕裂效果?
我已经看到 pyglet 可以在创建的窗口中处理 vsync,但由于未知原因,我无法在 pyglet 窗口中显示图像,而且我真的不确定它是否能解决问题,特别是如果 Raspberry 无法处理现在vsync。
c++ - 如何在 Linux 中查询 Vsync 相位
我需要创建一个 C++ 函数,它将在下一个 Vsync 间隔之前的秒数作为浮点值返回。
为什么?
我正在创建显示跟随鼠标光标的矩形的程序。表面上,OpenGL 在 glXSwapBuffers 函数中提供了一个 vsync 机制,但我发现这并不可靠。使用一些卡驱动程序,您可以获得 vsync;与其他你没有的人。在某些情况下,您会获得垂直同步,但您也会获得额外的 2 帧延迟。
但这不是 OpenGL 中的错误。规范故意含糊不清:“后台缓冲区的内容然后变得未定义。更新通常发生在监视器的垂直回溯期间,而不是在调用 glXSwapBuffers 之后立即发生。” 关键字是“典型地”......基本上glXSwapBuffers 不承诺squat wrt vsync。去搞清楚。
在我目前解决这个基本问题的尝试中,我目前猜测初始 vsync 时间,然后假设相位等于经过时间 MOD 1/(59.85Hz),这似乎与我当前的监视器同步。但这并不好用,因为我实际上并不知道初始阶段。所以我得到一滴眼泪。至少它不会四处走动。但我真正需要的是以某种方式测量当前的垂直同步阶段。
不,我不想依赖一些 OpenGL 调用来为我做垂直同步。由于规范中的模糊性,这使得 OpenGL 实现可以根据需要添加尽可能多的延迟。
不,我不想依赖某些 SGI 扩展或必须安装的其他东西才能使其工作。这是图形 101。垂直同步。只需要一种查询其状态的方法。某些内置的、始终安装的 API 必须具有此功能。
也许我可以创建一个辅助线程以某种方式等待 Vsync,并记录发生这种情况的时间?但请注意以下顺序:
在 Debian 中不起作用。结果:
必须有某种方法可以从设备或其他 OpenGL 调用中读取相位。OpenGL是图形的东西。Vsync 是图形 101。
请帮忙。
opengl - 如何禁用 SDL2 FPS 限制
我正在使用 SDL 2.0.4 和 GLEW 1.13.0,似乎 SDL2 中存在某种 fps 限制。我知道这一点,因为我做了一些时间测量。
更具体地说,我什么都不画,但如果我在主循环中调用 SDL_GL_SwapWindow(),每个循环大约需要 16 毫秒。如果没有这个电话,几乎不需要任何时间。当 SDL_GL_SwapWindow 是主循环中唯一的函数调用时,它甚至需要 16 毫秒。这意味着,必须在 SDL2 中启用某种 fps 限制或垂直同步。所以我的问题是:如何禁用上述限制?
我发现的唯一一个与我的问题有点相似的线程如下:SDL_GL_SwapWindow bad performance。但是这个线程中的答案对我并没有真正的帮助。此外,这似乎不是由我的计算机引起的,因为使用 FreeGLUT 完成的类似代码不会出现此问题。
所有文件的简要概述:
我的代码:
主文件
显示.cpp
显示.h
jtime.h
颜色.h
rendering - 使用 HaxeFlixel c++ 目标在运行时切换垂直同步
是否可以在运行时vsync
为我的HaxeFlixel
项目打开/关闭?或者我是否必须创建不同的可执行文件(一个启用 vsync,另一个vsync
禁用)
在处理了一个IntelHD 错误之后,我不得不为我的 C++ 目标禁用 vsync
,使用这个构建设置:
从游戏菜单中切换它会很好,所以我想知道是否有一个 API 可以vsync
在运行时启用/禁用。
java - java - GC应用程序运行缓慢后
我有一个在 JVM 上运行的应用程序(游戏)。
游戏的更新逻辑(运行 60 次/秒)以大约 25% 的“时间片”(1/60 秒)使用完成,然后在剩余的 75% 中休眠。但是当 GC 收集器开始运行时,它会上升到 75-200% 并在其余的执行过程中停留在那里。
游戏使用大约 70Mb 的堆并增长大约 1-2mb/s。当 GC 运行时,它会回到 70Mb,因此没有真正的内存泄漏。我将来会尝试降低这个数字,但在这个范围内应该不是问题。
我正在使用没有运行时参数或标志的 JVM 8,不确定哪个 GC 会给我。
我尝试将堆设置为不同的大小,但这不会影响这种现象。
关于为什么会这样,我有两种理论:
GC 无意中将我的堆碎片化,导致更新循环中的缓存垃圾。我的逻辑从数据接近性中受益匪浅,因为它循环并更新它。会不会是把一些数据洗牌到老区,而把一些数据留在年轻区(托儿所)?
突然的 GC 处理触发了我的操作系统,使其意识到我的主要更新进程不需要像当前那样多的 CPU 资源,从而降低了它的优先级。(但是,即使我跳过 thread.sleep() 以休眠未使用的 CPU 使用率,这种现象仍然存在。
你怎么看。我的理论是否合理,可以对它们做些什么,还是我需要切换到 C 语言?我对GC的了解有限。
PS 作为旁注,通常 update() 在 GC 后完成 75%。当我得到像 200% 这样的数字时,它是在使用 VSync 时。
c++ - SDL/OpenGL 游戏在 144Hz 屏幕上运行太快;无法使用垂直同步
这就是我处理游戏循环的方式:
它旨在成为一个锁定到 60FPS 的固定时间步长游戏(它是对 SNES 游戏的重新模拟),但是它在我的 144hz 屏幕上以 144 个时间步长运行,这让它太快了。Vsync 不能解决这个问题,那有什么办法呢?
qt - QGraphicsView 与 QOpenGL 在英特尔集成显卡上闪烁
我有自己的类,它继承自 Qt5.6 QGraphcisView。
我还有一个 QGraphicsPixmapItem 在现场。(忘了说) ANGLE 已启用!
我经常更新像素图以制作像视频一样的动画。实际上它是视频,因为我为 QMediaPlayer 实现了自己的 QAbstractVideoSurface,并且我收到了在场景中更新的视频帧。
问题是在英特尔集成视频卡上,我看到动画闪烁,就像更新与显示 VSYNC 不同步。
在 NVIDIA 卡上似乎一切正常,没有问题。
我从 Qt 文档中读到,制作 fmt.setSwapInterval(2) 应该允许我在每 2 次 VSYNC 刷新时更新屏幕,所以我希望在 60Hz 显示器上有平滑的 30fps 动画。除此之外,似乎 setSwapInterval() 对英特尔和英伟达都没有任何作用:
在 Intel 卡上它总是闪烁,而在 NVIDIA 卡上它总是很流畅,不依赖于 swapInterval() 或任何其他 QGLFormat 选项。
我也尝试过,fmt.setDoubleBuffer(true);
但在英特尔卡的情况下也无济于事。如何解决闪烁问题?
当然,我可以直接在场景中放置 QGraphicsVideoItem - 然后没关系,但我不能使用此选项,因为稍后我需要动态修改帧像素 - 为此我需要 QAbstractVideoSurface。
c++ - Display image with qt & opengl, timing accuracy and vsync issues, c++
I'm building a module that is supposed to display images at a certain rate (not pre defined, but not very high - 10Hz max for the swapping of images).
From my research I got to the conclusion that QGLWidget is the right tool for this task, after enabling vsync with openGL calls(SwapInterval family).
Yet, I am not sure how to actually implement the swapping mechanisem - should I use a timer? If I set a timer for 333.3 ms(3 Hz), when the refresh rate is 60 Hz (16.67 per cycle, thus the timer is 20 cycles), and I be sure that timing will be fine? And if the rate should be 9Hz, I need to set the timer for 100+16.67 because this is the best I can get? And if a timer is ok, should I just call paintGL() when it sends me the timeout event?
Thanks
algorithm - 保持两个进程的内存数据结构同步
如何使内存中的数据结构在两个进程之间保持同步。两个进程是同一个进程(服务器)——一个是活动的,另一个是备用的。在活动的崩溃/或类似情况下,备用需要接管。为了让备用服务器接管活动服务器,内存中的数据结构需要保持同步。我可以使用虚拟同步吗?会有帮助吗?如果有我可以使用的图书馆吗?我在 Windows(Visual Studio)上使用 C++ 进行编码。
如果这不是解决方案,我可以参考什么好的解决方案?
TIA