Являются ли контексты GL "значимыми"? - PullRequest
0 голосов
/ 17 сентября 2011

В Android рендереру передается объект GL10 в onSurfaceCreated, onSurfaceChanged и onDraw.Действительно ли этот фактический экземпляр GL10 имеет какое-то конкретное значение, или вы можете создать экземпляр любого экземпляра GL10, который вам нужен?

Причина, по которой я спрашиваю, состоит в том, что у меня есть две, казалось бы, противоречивые части информации, которые я почерпнул из разных источников:

  1. Я просматривал исходный код для gl2-android, который представляет собой набор привязок ES 2.0.В примере GL2Test.java пропущенные экземпляры GL10 полностью игнорируются.Средство визуализации просто создает экземпляр AndroidGL20 и использует его вместо этого.

  2. Я работал с кодом Роберта Грина для живых обоев OpenGL.Во многих комментариях, перечисленных в его вступительном сообщении в блоге, некоторые люди указывали, что иногда контекст GL10, который передается onSurfaceCreated, изменяется на другой экземпляр.Если это произойдет, рисование не удастся, если вы сначала не перезагрузите текстуры, используя новый экземпляр.Таким образом, исправление заключается в тестировании в начале onSurfaceCreated, чтобы убедиться, что это тот же экземпляр GL10, и оттуда решить, нужно ли его перезагрузить.(Вы не хотите каждый раз перезагружаться, потому что onSurfaceCreated вызывается при каждом повороте экрана, что должно поддерживаться живыми обоями.)

То, что я пытаюсь сделать, установленоup gl2-android для использования с живыми обоями.Но я хочу быть уверенным, что смогу использовать его таким образом, чтобы избежать проблемы, описанной в пункте 2 выше.

1 Ответ

1 голос
/ 11 октября 2011

GL Контексты - это объекты, которые содержат всю информацию текущего экземпляра OpenGL. Всякий раз, когда вы создаете текстуру, буфер вершин, поверхность, шейдер или изменяете состояние (режим наложения, альфа и т. Д.), Все они сохраняются в context . Уничтожение контекста в конечном итоге уничтожит объекты, созданные в этом контексте, и сбросит состояние OpenGL, в этом смысле они очень «значимы»!

OnSurfaceCreated метод вызывается всякий раз, когда новый контекст создается в первый раз или после уничтожения предыдущего (из-за возврата на начальный экран, выключения дисплея или изменения ориентации). Именно поэтому после этого вам потребуется заново создать / загрузить все свои ресурсы, поскольку предыдущий был уничтожен со всеми прикрепленными к нему ресурсами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...