Sto lavorando a un progetto con SDL e OpenGL. Il gioco funziona perfettamente su Windows, Linux, OS X e iOS. Tuttavia, la versione di Android mostra un problema sul mio telefono in particolare. Ho testato un altro dispositivo e lì funziona anche alla grande.
Il problema che sto affrontando è un problema visivo. Succede a raffiche: per esempio: 90 fotogrammi ok e poi 40 fotogrammi il problema tecnico. Lo stesso problema tecnico è difficile da descrivere, ma ci proverò. Lo schermo viene aggiornato in parte corretto (dalla parte superiore del mio telefono a circa metà circa) e parzialmente sfarfallio. L'effetto tremolante è una sorta di salto avanti e indietro. Sto pensando che sia legato al doppio buffering. Penso che perché quello che vedo sullo schermo sta saltando avanti e indietro in ogni fotogramma. È come se metà dello schermo fosse un fotogramma nel tempo e il fotogramma successivo 2 fotogrammi in ritardo. Praticamente come una processione di Echternach, immagino che si possa dire. Se lo traccia in un diagramma in cui il tempo passa quando si sposta verso il basso del grafico, penso di '
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
Quindi la metà destra è un fotogramma nel tempo e il fotogramma successivo mostra il fotogramma precedente. Questo supporta la mia teoria secondo cui esiste un problema con il doppio buffering. Sembra che in qualche modo non riesca ad aggiornare completamente il backbuffer prima che venga messo sullo schermo o qualcosa del genere.
Inoltre, la suddivisione tra buono e glitch sullo schermo è diversa da fotogramma a fotogramma, il che ritengo che dimostri che si tratta di un problema di sincronizzazione e dipende fortemente dal tempismo di ciò che sta accadendo. L'aggiunta glFinish();
prima della SDL_GL_SwapWindow();
chiamata non aiuta.
Informazioni sulla versione: SDL riporta vsync da attivare. Tuttavia, credo che questo non stia lacerando. Il mio telefono è un Samsung Galaxy S3 mini con Android 5.1.1 (CM12) e la GPU (Mali-400) supporta OpenGL ES 2.0. Altri giochi funzionano bene sul mio telefono.