Contrariamente a molte risposte qui e altrove, glUseProgram (0) non è sicuro. È possibile utilizzarlo per impostare lo stato di rendering su un oggetto programma non valido, ma se è ancora associato a questo quando si esegue il rendering, il comportamento è non definito.
Questo può essere utile per evitare di utilizzare il programma errato per errore, ma non dovresti usarlo per indicare "usa la modalità funzione fissa". Nella maggior parte dei casi questo è ciò che accade, ma non è definito dalle specifiche e non dovrebbe essere invocato.
Dal doc:
"Se il programma è zero, allora la corrente stato di rendering si riferisce ad un oggetto programma valido ei risultati dell'esecuzione Shader sono undefined
"
Pertanto la i risultati sono interamente specifici per OS, driver e scheda grafica. In molti casi sembra tornare alla modalità a funzione fissa. Tuttavia, potrebbe altrettanto facilmente mantenere l'ultimo shader, rendere la spazzatura o causare un segfault (ho visto accadere questo).
Quindi, in altre parole, non dovrei chiamare 'glUseProgram (0)'? – user11171
@ user11171: No. Dovresti chiamarlo quando non vuoi che un programma sia associato. In tal modo, previeni il rendering accidentale con un programma che non era previsto (ad esempio: hai dimenticato di chiamare 'glUseProgram' con il programma che desideri). Normalmente lo chiamerai quando hai finito il rendering. –