我有一个OpenGL (4.3)应用程序运行在Ubuntu14.04上,使用的是nvidia-355驱动程序。一切运行正常,但当我连接第二个显示器(或移除第二个显示器)时,主显示器将变黑并返回。当它返回时,应用程序会显著减慢(计时显示减慢2-3倍)。现在,如果我删除并重新创建所有的GL资源,同时保持相同的上下文,一切都会恢复正常。问题是,在这种情况下,为什么会出现减速?
我检查了前后的上下文指针,它总是一样的。授权的上下文可能仍然丢失并重新创建,因为我使用的是GLEW的早期版本,所以我不能使用glGetGraphicsResetStatusARB检查状态。有没有想过是否有其他方法来做类似的事情?
更新:我已经找到了我的vao/vbo的原因。它是一个使用点的绘制调用的缓冲区,它包含相当多的顶点(以百万为单位)。如果我保持所有内容不变,但重新上传vbo,性能就会很好。2个问题:你知道为什么会发生这种情况吗?有没有办法检测在glx/gl/glut中添加/删除了显示?谢谢
发布于 2015-09-30 15:11:45
与可能会丢失上下文的Direct3D不同,GPU契约断言,上下文永远不会丢失;任何内务管理,如重新初始化OpenGL和所有关联的对象,都必须在幕后透明地发生。
有几个可能的原因导致你体验到速度减慢。我最好的选择是,Ubuntu的一些便利的自动化可能会抛出GPU驱动程序的内部状态管理,导致性能低于平均水平。如果没有这些自动化,新连接的显示器将不会自动激活,但需要用户交互。
另一种可能性是,使用新的显示器,您将只获得刷新频率的最低公分母,并且在启用V-Sync的情况下,因此会体验到速度减慢。
然而,我在这里只是猜测,如果不用分析器深入查看您的特定系统,就很难判断发生了什么。
https://stackoverflow.com/questions/32858374
复制相似问题