Я экспериментирую с написанием небольшого игрового движка для Android с использованием OpenGL ES. Я создал игровой поток, который обновляет игровые объекты и GLThread, рисует сцену. Я прочитал, что вам нужно загрузить текстуры в методе onSurfaceCreated GLSurfaceView. Я следую за этим, но для некоторой цели отладки я пытался загрузить текстуры из моей игровой темы вместо GLThread. У меня не было ошибок, и текстура не показывалась на экране. Я потратил весь свой день, пытаясь понять проблему, и, наконец, я прочитал ниже здесь
"Просто обязательно используйте OpenGL в основном потоке". Очень важно. Вы не можете вызвать в своем игровом движке (который может быть в другом потоке) функцию текстурной загрузки, которая не синхронизируется с gl-нитью. Установите флаг, чтобы сигнализировать gl-thread для загрузки новой текстуры (например, вы можете поместить функцию в OnDrawFrame (GL gl), которая проверяет, должна ли быть загружена новая текстура.
Я изменю свой код так, чтобы текстуры загружались из GL Thread. Я просто не мог понять, почему это так? Почему функции OpenGL не работают из другого потока?
Я знаю, как создавать потоки, но я не знаю, что такое синхронизация. В приведенном выше изложении упоминается: "Вы не можете вызывать в своем игровом движке (который может быть в другом потоке) функцию текстурной загрузки, которая не синхронизируется с gl-нитью". Поэтому я думаю, что мой игровой поток не может быть синхронизирован с GL Thread. Возможно ли создать другой поток, который синхронизирован с GL Thread, чтобы функции GL могли быть вызваны из него? Чему я должен научиться в потоковом понимании этих понятий?