Инициализация ресурса и контексты OpenGL - PullRequest
1 голос
/ 02 февраля 2011

У нас есть приложение OpenGL (использующее Ogre3d и SDL, напрямую не вызывающее OpenGL), и мы пытаемся изменить разрешение во время выполнения.Кажется, что нам нужно повторно инициализировать наш OpenGL-контекст с новым Resolution, но некоторые элементы ломаются на этом пути.В Linux это работает некоторое время, а затем мы видим графическое искажение на экране.В Windows он просто падает, когда мы в следующий раз пытаемся сделать кадр.Мы принудительно перезагрузили текстуры в Ogre, и если мы рендерим только текстуры (без 3d-моделей), то это работает нормально, но любые 3d-модели вызывают сбой, и перезагрузка перед их рендерингом не имеет никакого эффекта.ссылка на подробное объяснение вызовов Ogre3d, которые мы делаем: http://www.ogre3d.org/forums/viewtopic.php?f=2&t=62825

Все, что нам действительно нужно знать, это то, что при повторной инициализации контекста Opengl какие ресурсы необходимо восстановить?1007 * Почему настройка контекста OpenGL влияет на другие ресурсы?Так работает OpenGL или одна из библиотек, которую мы используем, представляет эту проблему?Могли бы мы добавить эту проблему, не зная об этом?

Ответы [ 2 ]

1 голос
/ 03 февраля 2011

Поддержка OpenGL была добавлена ​​SDL после того, как ее поверхностный код был установлен.Вот почему изменение размера окна SDL разрушительно.Вам указали на совместное использование контекста OpenGL и его предостережения.Однако я бы полностью избежал этой проблемы, не используя SDL для создания окна OpenGL.Вы можете использовать все другие средства, предоставляемые SDL, без окна, управляемого SDL, поэтому единственное, что может измениться, - это обработка входных событий и способ создания окна.Вместо SDL я бы использовал GLFW, который, как и SDL, требует от вас реализации собственного цикла обработки событий, поэтому использование GLFW в качестве замены для OpenGL-окна и создания контекста не вызывает затруднений.

1 голос
/ 03 февраля 2011

Вы смотрели на эту ветку форума ?

SDL разрушает OpenGL при изменении разрешения. В этом случае все ваши ресурсы GL уничтожаются в контексте.

Одним из возможных решений было бы создание другого «фиктивного» контекста GL, совместное использование ресурсов с вашим «реальным» контекстом GL, и сохранение его с помощью SDL разрушает «основной» контекст. Таким образом, большинство ваших ресурсов должно выжить.

Обратите внимание, что некоторые ресурсы не могут быть разделены, текстуры и VBO в порядке, но VAO не может.

...