В Android рендеринг получает объект GL10 в onSurfaceCreated, onSurfaceChanged и onDraw. Действительно ли этот фактический экземпляр GL10 имеет какое-то особое значение, или вы можете создать экземпляр любого экземпляра GL10, который вы хотите?Являются ли контексты GL «значительными»?
Я спрашиваю, что у меня есть два, казалось бы, противоречивых частей информации, которую я почерпнутые из различных источников:
Я искал через исходный код для gl2-андроида, который представляет собой набор ES 2.0. В этом примере GL2Test.java, пройденные экземпляры GL10 полностью игнорируются. Средство визуализации просто создает экземпляр AndroidGL20 и использует это вместо этого.
Я работал с кодом Роберта Грина для живых обоев OpenGL. В многочисленных комментариях, перечисленных в его вводном сообщении в блоге, некоторые люди указали, что иногда контекст GL10, который передается в onSurfaceCreated, изменяется на другой экземпляр. Если это произойдет, рисование завершится неудачно, если вы не перезагрузите свои текстуры с помощью нового экземпляра. Таким образом, исправление заключается в том, чтобы протестировать в начале onSurfaceCreated, чтобы убедиться, что это тот же самый экземпляр GL10 и решает оттуда перезагрузить. (Вы не хотите, чтобы перезагрузить каждый раз, потому что onSurfaceCreated вызывается с каждым поворотом экрана, который должен поддерживаться живыми обоями.)
То, что я пытаюсь сделать, это создать gl2-андроид для используйте живые обои. Но я хочу быть уверенным, что могу использовать его таким образом, чтобы это было безопасно от проблемы, описанной выше в номере 2.
Спасибо за ваш ответ - это полезно. Я просто хочу добавить эту информацию, которую я получил от автора «Начало игр для Android», что более конкретно для информации, которую я искал. Это хорошо сработало для меня: – Tenfour04
Фактический экземпляр GL10, который передается в onSurfaceCreated() и onDrawFrame(), не содержит никакой информации, специфичной для контекста GL, которая назначается при вызове функции onSurfaceCreated(). Вы можете использовать любой экземпляр GL10, который вам нравится делать в любом потоке рендеринга. Просто используйте onSurfaceCreated() в качестве сигнала, что вам нужно перезагрузить шейдеры и текстуры и т. Д. – Tenfour04