OpenGL: Frame salta parzialmente avanti e indietro [chiuso]


8

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.


Qual è il modello di telefono?
concept3d

Samsung Galaxy S3 mini. Esecuzione di CyanogenMod 12.
Martijn Courteaux,

Ho scoperto che è ovunque nel mio telefono, ma più sottile. Anche nell'interfaccia utente del sistema scorrendo i menu.
Martijn Courteaux,

2
Sembra più un bug nel tuo telefono. La mia ipotesi è che un aggiornamento del firmware sia il modo più probabile per risolverlo.
rolobo,

@rolobo: Sì, davvero. Tuttavia, sono molto contento di tutto il resto e il mio telefono è solo un dispositivo di prova per questo progetto e non fa parte del mio processo di sviluppo principale.
Martijn Courteaux,

Risposte:


0

Una sezione del readme ne parla:

Una nota sull'uso della tecnica di rendering "rettangoli sporchi"

[...] dove aggiorni solo una parte dello schermo su ciascun fotogramma, potresti notare una varietà di problemi visivi su Android, che non sono presenti su altre piattaforme. Ciò è causato dall'uso di EGL da parte di SDL come sistema di supporto per gestire contesti OpenGL ES / ES2, in particolare l'uso della funzione eglSwapBuffers. Come indicato nella documentazione per la funzione "Il contenuto dei buffer ausiliari è sempre indefinito dopo aver chiamato eglSwapBuffers".

L'impostazione dell'attributo EGL_SWAP_BEHAVIOR della superficie su EGL_BUFFER_PRESERVED non è possibile per SDL in quanto richiede EGL 1.4, disponibile solo a livello di API, quindi l'unica soluzione disponibile su questa piattaforma è ridisegnare l'intero schermo ogni frame.


Si prega di includere un riepilogo delle informazioni rilevanti da quel link e una spiegazione di come le informazioni rispondono alla domanda.
tyjkenn,

... la domanda originale non diceva nulla sul rendering di "rettangoli sporchi"?
Trevor Powell,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.