C++ SFML将OpenGL绘制到多个窗口的速度非常慢

C++ SFML将OpenGL绘制到多个窗口的速度非常慢,c++,performance,sfml,frame-rate,C++,Performance,Sfml,Frame Rate,情况如下: 我有4个SFML窗口,它们位于我构建的容器中。容器为每个窗口调用独立的重画方法,从第一个窗口开始,以最后一个窗口结束 如果每个窗口的绘图代码都包含行drawMyCube()或glClear(…),则帧速率变慢 drawMyCube()只绘制一个立方体,该立方体根据sf::Clock对象的值旋转 如果一个窗口调用(其中一个)这些函数,帧速率约为60fps。 如果两个窗口调用(其中一个)这些函数,帧速率约为30fps。 如果三个窗口调用(其中一个)这些函数,帧速率约为20fps。 最后,

情况如下:

我有4个SFML窗口,它们位于我构建的容器中。容器为每个窗口调用独立的重画方法,从第一个窗口开始,以最后一个窗口结束

如果每个窗口的绘图代码都包含行
drawMyCube()
glClear(…)
,则帧速率变慢

drawMyCube()
只绘制一个立方体,该立方体根据sf::Clock对象的值旋转

如果一个窗口调用(其中一个)这些函数,帧速率约为60fps。 如果两个窗口调用(其中一个)这些函数,帧速率约为30fps。 如果三个窗口调用(其中一个)这些函数,帧速率约为20fps。 最后,如果四个函数都调用(其中一个),则帧速率为~15fps

这看起来像是一个新出现的模式,所以我尝试从3个窗口中删除函数,并在一个窗口中调用它们10次。我原以为帧速率是~6fps,但仍保持在60

有人知道为什么会这样吗?如果我从窗口绘制方法中删除任何其他函数,似乎不会产生任何效果,例如,
gluLookAt()
似乎不会减慢它的速度


编辑:帧速率限制设置为零,vsync为false。

这听起来和垂直同步完全一样。您的每个窗口都在等待垂直刷新,这就是为什么您的速率不断减半的原因


我知道你说vsync关闭了,但有可能是你的视频驱动程序在强迫它。检查您的驱动程序设置。

事实上,这听起来不错。我不知道如何使用运行在MacBookPro上的UbuntuLinux来实现这一点。我记得在过去,大约一个月前,我遇到过这样的问题,因此我订购了一台装有真正图形处理器的新笔记本电脑。不过还在等着呢。。。但是:有什么方法可以解决这个问题吗?如果驱动程序正在强制vsync,那么您唯一能做的就是在驱动程序中禁用它。从个人经验来看,英伟达Linux驱动程序在这方面似乎有缺陷,默认情况下强制VSYNC。我发现启动和退出nvidia设置应用程序会将其关闭。这对我不起作用-启动时,我收到错误消息“您似乎没有使用nvidia驱动程序”-我猜我使用的是Intel驱动程序?如果不了解您系统的详细信息,很难说。无论哪种方式,这都是用户控制的选项,因此如果您计划向其他人发布此程序,则无法阻止他们启用全局vsync。我能想到的在应用程序级别处理这个问题的唯一方法是为每个窗口指定一个线程,以便它们可以并行同步,但我知道多线程OpenGL可能是一件棘手的事情,我在这方面没有个人经验。是的,我想这是不可能的,因为你在视频内存中绘制了一个曲面。。。只有一个可以吸引你。。。