Ho difficoltà a distinguere la differenza pratica tra chiamata glFlush()
e glFinish()
.
I documenti lo dicono glFlush()
e glFinish()
invieranno tutte le operazioni memorizzate nel buffer a OpenGL in modo che si possa essere certi che verranno eseguite tutte, con la differenza che glFlush()
restituisce immediatamente dove come glFinish()
blocchi fino al completamento di tutte le operazioni.
Dopo aver letto le definizioni, ho pensato che se dovessi usarle glFlush()
probabilmente mi sarei imbattuto nel problema di inviare più operazioni a OpenGL di quante ne potesse eseguire. Quindi, solo per provare, ho scambiato il mio glFinish()
con a glFlush()
ed ecco, il mio programma ha funzionato (per quanto ho potuto vedere), esattamente lo stesso; frame rate, utilizzo delle risorse, tutto era uguale.
Quindi mi chiedo se ci sia molta differenza tra le due chiamate o se il mio codice non le fa funzionare in modo diverso. O dove dovrebbe essere usato uno rispetto all'altro. Ho anche pensato che OpenGL avrebbe avuto qualche chiamata come glIsDone()
controllare se tutti i comandi memorizzati nel buffer per a glFlush()
sono completi o meno (quindi non si inviano operazioni a OpenGL più velocemente di quanto possano essere eseguite), ma non sono riuscito a trovare tale funzione .
Il mio codice è il tipico loop di gioco:
while (running) {
process_stuff();
render_stuff();
}