2017-08-14 49 views
-2

突然之间(尽管我可能错过了一些自动更新),flip()方法pyglet在我的电脑上慢了约100倍(我的脚本从大约20到0.2 FPS,分析表明,flip()是责怪)。Pyglet在Windows上交换前后缓冲区的方法(`flip()`,用于OpenGL的wglSwapLayerBuffers的包装)可能是100倍太慢

我不完全理解这一点,但由于我的操作系统是Windows 10,该方法似乎只是一种在python中运行wglSwapLayerBuffers OpenGL双缓冲循环的方式。其他一切似乎都有正常的速度,包括使用OpenGL的程序。这是以前发生的,并在重新启动后自行修复,所以当时我没有真正考虑它。

现在,重新启动不会改变任何东西。我更新了我的GPU驱动程序,我尝试禁用vsync,我查找可能使用大量内存和/或GPU内存的无关进程。我重新安装了pyglet的最新稳定版本。

现在我不知道如何甚至开始排除此...

下面是我打印0.2秒,而不是20多岁的小例子。

from pyglet.gl import * 

def timing(dt): 
    print(1/dt) 

game_window = pyglet.window.Window(1,1) 

if __name__ == '__main__': 
    pyglet.clock.schedule_interval(timing, 1/20.0) 
    pyglet.app.run() 

(在pyglet.app.run(),分析表明我它是flip()方法,它基本上所有的时间)。我使用pyglet显示经常更新的图像,但不会增加GPU的使用(我还检查了随机程序(即Minecraft)的效果,以确保GPU监视工具使用的是作品,它确实会增加)。我认为这排除了由于一些不相关的问题而导致计算能力不足的可能性。

回答

0

OK,我找到了一种方法来解决我的问题在这个谷歌组谈话约一个不同的问题,用同样的方法:https://groups.google.com/forum/#!topic/pyglet-users/7yQ9viOu75Y(在克劳迪奥·卡内帕的答复建议的修改,即使flip()链接的的GDI版本相同的功能,而不是wglSwapLayerBuffers,使事情恢复正常)。

我还不确定为什么wglSwapLayerBuffers在我的情况下表现得如此奇怪。我猜像我这样的问题是GDI版本“推荐”的原因之一。然而,理解为什么我的问题甚至可能仍然是好的,如果有人得到了正在发生的事情...并且不得不干涉一个相对可靠和受人尊敬的图书馆来执行其最基本的任务之一感觉真的很脏,必须是一个更明智的解决方案。

相关问题