OpenGL ограничивает количество общих просмотров - PullRequest
0 голосов
/ 14 октября 2011

Я только что протестировал свое приложение openGL на новом настольном компьютере HP с встроенной платой Intel HDGraphics. Во время тестирования на этой машине я заметил, что после использования ее на некоторое время многие из моих текстур испортились.

Небольшой фон: этот проект создан с использованием NSOpenGLView от Cocoa и проекта с открытым исходным кодом под названием Cocotron для достижения кроссплатформенного опыта. У нас есть закадровый NSOpenGLView, который мы используем для совместного использования текстур между объектами, представлениями и окнами.

После дальнейшего изучения я понял, что моя проблема с текстурой возникала после вызова 32 из этих openGLViews. Причина, по которой мы иногда создаем такое большое количество openGlViews в обычном рабочем процессе, заключается в том, что мы используем прозрачные окна с openGLViews для перетаскивания объектов openGl между представлениями, а также создаем и уничтожаем новое окно при каждом перетаскивании.

Я также заметил, что эта проблема присутствует только с объектами, которые полагаются на совместное использование текстур.

Все эти выводы заставили меня поверить в то, что по какой-либо причине у этой видеокарты есть ограничение на количество просмотров, с которыми можно поделиться одним просмотром, и этот предел составляет 32. Это звучит разумно? Кто-нибудь сталкивался с такой проблемой?

Мне также кажется, что у Cocotron должна быть какая-то проблема, из-за которой он не может должным образом утилизировать glContext, и поэтому даже после закрытия окна openGLView контекст все равно считается с этим теоретическим ограничением общего вида. Есть ли способ, которым я мог бы вручную разорвать общий доступ? Какой-то анти-wglShareLists?

...