我刚刚在一台配备板载Intel HDGraphics卡的新HP桌面上测试了我的openGL应用程序。在这台机器上进行测试时,我注意到在使用它一段时间后,我的许多纹理都搞砸了。
一个小小的背景:这个项目是使用Cocoa的NSOpenGLViews创建的,并使用一个名为Cocotron的开源项目来实现跨平台体验。我们有一个屏幕外的NSOpenGLView,用于对象,视图和窗口之间的纹理共享。
经过进一步调查后,我意识到我的纹理问题是在调出32个这样的openGLView之后发生的。我们有时在正常工作流程中创建这么多openGlViews的原因是我们使用内部带有openGLViews的透明窗口来完成视图之间的openGl对象的拖放,我们使用每次拖放创建和销毁一个新窗口。
我还观察到这个问题只出现在依赖于纹理共享的对象上。
所有这些调查结果让我相信,无论出于何种原因,这个视频卡限制了任何一个视图可以共享的视图数量,并且该限制恰好是32.这听起来合理吗?有没有人遇到过这类问题?
在我看来,Cocotron必须有一些问题,它没有正确处理glContext,这就是为什么即使在openGLView的窗口关闭之后,上下文仍然在计算这个理论上的共享视图限制。有什么方法可以手动切断共享吗?某种反wglShareLists?