Estoy experimentando con la escritura de un motor de juegos pequeños para Android con OpenGL ES. Creé un Game Thread que actualiza los objetos del juego y el GLThread dibuja la escena. Leí que necesita cargar las texturas en el método de GLSurfaceView en SurfaceFreated. Estoy siguiendo eso, pero con algún propósito de depuración intenté cargar texturas de mi hilo de juego en lugar del hilo GLT. No recibí ningún error y la textura no aparecía en la pantalla. Pasé todo el día tratando de resolver el problema y finalmente leí el siguiente herePor qué no se pueden llamar las funciones de OpenGL ES desde otro hilo
"Solo asegúrese de usar OpenGL únicamente en el hilo principal". Muy importante. No puede invocar su Motor de juego (que puede estar en otro hilo) una función de carga de textura que no está sincronizada con el hilo gl. Establezca una bandera para señalar su hilo gl para cargar una nueva textura (por ejemplo, puede colocar una función en OnDrawFrame (GL gl) que comprueba si debe haber una nueva textura cargada.
Voy a modificar mi código para que las texturas se carguen desde el subproceso GL. Simplemente no pude entender por qué es así? ¿Por qué las funciones OpenGL no funcionan desde otro subproceso?
Sé cómo crear subprocesos, pero no sé qué El extracto anterior menciona: "No puedes invocar tu Game Engine (que puede estar en otro hilo) una función de carga de textura que no está sincronizada con el hilo gl." Así que supongo que mi Game Thread podría no estar sincronizado. con el hilo GL. ¿Es posible crear otro hilo que esté sincronizado con el hilo GL? para que las funciones GL puedan ser llamadas desde allí? ¿Qué debo aprender al enhebrar para comprender estos conceptos?
No soy un tipo de Android, pero en iOS hay dos razones para advertencias similares: una es que el contexto de GL actual es específico de subproceso, por lo que necesitaría transferir la moneda de contexto a través de subprocesos, y segundo (más importante) es que jugar con el estado GL desde múltiples hilos sin sincronización acaba por corromper el estado del contexto GL. HTH. –
Creo que es solo para evitar el acceso concurent –