SFML RenderWindow 需要很长时间才能打开 window
SFML RenderWindow taking a long time to open a window
我知道这本质上是重复的,但是 this wasn't ever answered. I'd like to mention that I have followed the tutorial 将 SFML 与 Visual Studio 一起使用,我正在 运行 使用 64 位 SFML 创建一个 64 位项目. window 立即加载了几次,现在在新的 builds/debugs 上始终需要 40 秒才能打开。我还关闭了调试符号的下载。我的图形驱动程序是最新的,我的硬盘也很好。这是代码:
#include <SFML/Graphics.hpp>
int main()
{
sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");//This one
sf::CircleShape shape(100.f);
shape.setFillColor(sf::Color::Green);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
window.draw(shape);
window.display();
}
return 0;
}
一切都以正常速度 运行s 进行,除了 RenderWindow,每次都恰好需要 40 秒。有谁知道我该如何解决这个问题?这个问题我已经有几个星期了。
e:难道是我的CPU?它不是最好的,但我仍然可以 运行 大多数游戏,因为我有 1050ti。我目前的 CPU 是 i5-2500k,尽管我相信我在 A10-5800k 上遇到了同样的问题。
SFML discord 上的一位贡献者通过查看并向我展示了如何查看调用堆栈帮助我解决了问题,结果发现冻结是在轮询 dx 输入时发生的,经过一些试验我们发现我的 k55 键盘是罪魁祸首。我会在今晚晚些时候尝试找到修复方法,但在短期情况下,拔掉它会使一切正常。
编辑:在您求助于以下解决方案之前,请尝试更新您的键盘固件!您很可能使用的是 Corsair 键盘,因此请下载 Corsair 的 iCue 并更新您的键盘驱动程序。这很可能会解决这些问题。如果它不起作用,请尝试以下操作:
由于OP没有进一步回复,我试图自己寻找解决方法,因为这个问题在2020年仍然存在。此解决方法需要您自己编译库。所以下载源码,修改如下:
- 在
WindowImpl.cpp
中,导航到函数 WindowImp::WindowImp
并注释掉整个函数体。
- 在
WindowImpl.cpp
中,导航至 WindowImp::popEvent
并注释掉对 processJoystickEvents
的调用
只要您不使用 SFML 的操纵杆部分,这应该没有问题。
我有同样的键盘(Corsair K55)。我的问题是 Corsair 的 iCue 软件,退出它完全解决了我的问题,而无需拔下我的键盘。
我知道这本质上是重复的,但是 this wasn't ever answered. I'd like to mention that I have followed the tutorial 将 SFML 与 Visual Studio 一起使用,我正在 运行 使用 64 位 SFML 创建一个 64 位项目. window 立即加载了几次,现在在新的 builds/debugs 上始终需要 40 秒才能打开。我还关闭了调试符号的下载。我的图形驱动程序是最新的,我的硬盘也很好。这是代码:
#include <SFML/Graphics.hpp>
int main()
{
sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");//This one
sf::CircleShape shape(100.f);
shape.setFillColor(sf::Color::Green);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
window.draw(shape);
window.display();
}
return 0;
}
一切都以正常速度 运行s 进行,除了 RenderWindow,每次都恰好需要 40 秒。有谁知道我该如何解决这个问题?这个问题我已经有几个星期了。
e:难道是我的CPU?它不是最好的,但我仍然可以 运行 大多数游戏,因为我有 1050ti。我目前的 CPU 是 i5-2500k,尽管我相信我在 A10-5800k 上遇到了同样的问题。
SFML discord 上的一位贡献者通过查看并向我展示了如何查看调用堆栈帮助我解决了问题,结果发现冻结是在轮询 dx 输入时发生的,经过一些试验我们发现我的 k55 键盘是罪魁祸首。我会在今晚晚些时候尝试找到修复方法,但在短期情况下,拔掉它会使一切正常。
编辑:在您求助于以下解决方案之前,请尝试更新您的键盘固件!您很可能使用的是 Corsair 键盘,因此请下载 Corsair 的 iCue 并更新您的键盘驱动程序。这很可能会解决这些问题。如果它不起作用,请尝试以下操作:
由于OP没有进一步回复,我试图自己寻找解决方法,因为这个问题在2020年仍然存在。此解决方法需要您自己编译库。所以下载源码,修改如下:
- 在
WindowImpl.cpp
中,导航到函数WindowImp::WindowImp
并注释掉整个函数体。 - 在
WindowImpl.cpp
中,导航至WindowImp::popEvent
并注释掉对processJoystickEvents
的调用
只要您不使用 SFML 的操纵杆部分,这应该没有问题。
我有同样的键盘(Corsair K55)。我的问题是 Corsair 的 iCue 软件,退出它完全解决了我的问题,而无需拔下我的键盘。