Ho difficoltà a distinguere la differenza pratica tra chiamare glFlush()
e glFinish()
.opengl: glFlush() vs. glFinish()
I documenti dicono che glFlush()
e glFinish()
spingerà tutte le operazioni bufferizzati OpenGL in modo che si può essere certi che saranno tutti eseguiti, con la differenza che glFlush()
ritorna immediatamente dove come glFinish()
blocca finché tutte le operazioni sono completate.
Avendo letto le definizioni, ho pensato che se dovessi usare glFlush()
mi verrebbe probabilmente in mente il problema di inviare più operazioni ad OpenGL di quanto non possa eseguire. Quindi, solo per provare, ho scambiato il mio glFinish()
per un glFlush()
ed ecco, il mio programma ha funzionato (per quanto ho potuto dire), esattamente lo stesso; frame rate, utilizzo delle risorse, tutto era lo stesso.
Quindi mi chiedo se c'è molta differenza tra le due chiamate, o se il mio codice le fa funzionare in modo diverso. O dove uno dovrebbe essere usato contro l'altro. Ho anche pensato che OpenGL avrebbe qualche chiamata come glIsDone()
per verificare se tutti i comandi bufferizzati per un sono completi o meno (quindi non si inviano le operazioni a OpenGL più velocemente di quanto possano essere eseguiti), ma ho potuto trovare nessuna di queste funzioni.
mio codice è il tipico ciclo di gioco:
while (running) {
process_stuff();
render_stuff();
}
Cosa vuoi dire che glFlush "deve completare in FINITE time" e poi dire che glFlush non soffocare perché "può richiedere un po 'di tempo per elaborare i comandi"? (Caps mine) Non sono quelli che si escludono a vicenda? – Praxiteles
Finché finisce, ad un certo punto, soddisfa i criteri temporali FINITE. Alcuni driver no-op questa chiamata interamente. – chrisvarnz
SwapBuffers è specifico per il contesto e deve solo svuotare il contesto del thread chiamante. Se si esegue il rendering di più contesti, ciascuno deve essere svuotato manualmente poiché non è garantito che ciò accada quando si scambiano i buffer attraverso un altro contesto. – Andreas