Почему я получаю «вызов OpenGL ES API без текущего контекста»? - PullRequest
5 голосов
/ 18 августа 2010

Я новичок как в openGL, так и в разработке для Android, поэтому, пожалуйста, простите меня, если мой вопрос очень тривиален.

Я пытаюсь создать простое небольшое приложение, которое получает данные от пользователя в трех EditTexts, представляющих значение 0 - 100% для каждого компонента цвета RGB, который будет отображаться в GLSurfaceView.

Загвоздка в том, что мне нужно это для использования openGL ES 2.0, и мне нужно передать данные в программу затенения, используя единообразное значение, чтобы, как только я начал работать, я мог перейти к тому, что я действительно пытаюсь выполнить.

Запустив то, что я написал, я могу заставить GLSurfaceView правильно отображать первый сплошной цвет, но всякий раз, когда я изменяю любое из значений и выполняю вызовы для восстановления единого слота в программе затенения, я получаю эту ошибку в LogCat:

ОШИБКА / libEGL (14316): вызов API OpenGL ES без текущего контекста (регистрируется один раз для потока)

и, конечно, GLSurfaceView остается исходным цветом.

Я искал решение этой проблемы во всем, и, насколько я могу судить, мне может понадобиться настроить EGLContext где-то перед настройкой моего рендерера. Однако в демоверсиях API я ничего не вижу по этому поводу, и единственная информация, которую я могу найти в Интернете, была написана еще до того, как GLSurfaceView был доступен.

Нужно ли еще настраивать EGLContext или я что-то пропустил?


Дополнительная информация, которая может помочь:

- использовал XML-файл для настройки пользовательского интерфейса (и, насколько я могу судить, делать это в коде не помогает)

- возникают те же проблемы, когда я пытаюсь загрузить новую текстуру с SD-карты в отдельной программе. Я могу заставить первую текстуру работать нормально, но при использовании того же метода для загрузки второй я получаю ту же ошибку, и ничего не меняется.

1 Ответ

11 голосов
/ 18 августа 2010

Вы не вызываете его из потока OpenGL.Если другой поток пытается что-то сделать с OpenGL, поставьте его в очередь и вызовите его во время вашего потока OpenGL.

...