Estoy trabajando en un proyecto con SDL y OpenGL. El juego funciona muy bien en Windows, Linux, OS X e iOS. Sin embargo, la versión de Android muestra un problema en mi teléfono en particular. He probado otro dispositivo y allí funciona muy bien también.
El problema que estoy enfrentando es una falla visual. Sucede en ráfagas: por ejemplo: 90 cuadros están bien y luego 40 cuadros el fallo. La falla en sí es un poco difícil de describir, pero lo intentaré. La pantalla se actualiza parcialmente correcta (desde la parte superior de mi teléfono hasta aproximadamente la mitad) y parpadea parcialmente. El efecto de parpadeo es una especie de salto de ida y vuelta. Estoy pensando que está relacionado con el doble buffer. Creo que porque lo que veo en la pantalla es saltar de un lado a otro de cada fotograma. Es como si la mitad de la pantalla tuviera un cuadro en el tiempo y el siguiente cuadro 2 cuadros tarde. Más o menos como una procesión de Echternach, supongo que se podría decir. Si lo trazo en un gráfico en el que pasa el tiempo al bajar el gráfico, creo que '
left half | right half (phone is in landscape)
------------------------
time 1 | 1 1
time 2 | 2 2
time 3 | 3 1
time 4 | 4 4
time 5 | 5 3
time 6 | 6 6
time 7 | 7 5
time 8 | 8 8
time 9 | 9 7
Entonces, la mitad derecha es un cuadro en el tiempo, y el siguiente cuadro, muestra el cuadro anterior. Esto es compatible con mi teoría de que hay un problema con el doble búfer. Parece que de alguna manera no puede actualizar por completo el backbuffer antes de que aparezca en la pantalla, o algo así.
Además, la división entre bueno y falla en la pantalla es diferente de un cuadro a otro, lo que creo que prueba que es un problema de sincronización y depende en gran medida del tiempo de lo que está sucediendo. Agregar glFinish();
antes de la SDL_GL_SwapWindow();
llamada no ayuda.
Información de la versión: SDL informa que vsync se activará. Sin embargo, creo que esto no es desgarrador. Mi teléfono es un Samsung Galaxy S3 mini y ejecuta Android 5.1.1 (CM12) y la GPU (Mali-400) es compatible con OpenGL ES 2.0. Otros juegos funcionan bien en mi teléfono.
Respuestas:
Una sección del archivo Léame habla de ello:
fuente