OpenGL ограничивает количество общих просмотров
Я только что протестировал свое приложение openGL на новом настольном компьютере HP с встроенной картой Intel HDGraphics. Во время тестирования на этой машине я заметил, что после некоторого времени использования многие из моих текстур испортились.
Немного фона: этот проект создан с использованием NSOpenGLViews компании Cocoa и с использованием проекта с открытым исходным кодом Cocotron для достижения межплатформенного опыта. У нас есть закадровый NSOpenGLView, который мы используем для совместного использования текстур между объектами, представлениями и окнами.
После дальнейшего изучения я понял, что моя проблема с текстурой возникала после появления 32 из этих openGLViews. Причина, по которой мы иногда создаем это множество openGlViews в обычном рабочем процессе, заключается в том, что мы используем прозрачные окна с openGLViews для перетаскивания объектов openGl между представлениями и создаем и уничтожаем новое окно при каждом перетаскивании.
Я также заметил, что эта проблема присутствует только с объектами, которые полагаются на совместное использование текстур.
Все эти выводы заставили меня поверить в то, что по какой-либо причине у этой видеокарты есть ограничение на количество просмотров, с которыми можно поделиться одним просмотром, и этот предел составляет 32. Это звучит разумно? Кто-нибудь сталкивался с такой проблемой?
Мне также кажется, что у Cocotron должна быть какая-то проблема, из-за которой он не может должным образом утилизировать glContext, и поэтому даже после закрытия окна openGLView контекст все равно считается с этим теоретическим ограничением общего представления. Есть ли какой-нибудь способ, которым я могу вручную разорвать общий доступ? Какой-то анти-wglShareLists?