Ho eseguito lo strumento di analisi ES OpenGL da Instruments nella mia app e ho dichiarato che dopo aver compilato lo shader, dovrei effettuare una chiamata a glDrawArrays in una passata di pre-riscaldamento. Quindi ho controllato l'ora di alcuni shader che ho scritto, e in effetti la prima volta che il programma viene eseguito è molto più lento.Come correggere il ritardo nel primo utilizzo di uno shader?
Nel mio codice ho un caricatore di shader generico, che non conosce le uniformi/attributi dello shader, lo compila semplicemente. E sembra che il posto migliore per prewarmare lo shader sia lì (quindi non ho bisogno di aggiungere glDrawArrays ovunque). Ho provato l'aggiunta di questo nel mio Shader caricatore:
glUseProgram(prog);
glDrawArrays(GL_TRIANGLES, 0, 0);
E 'fissato il ritardo, ma dal momento che non sto impostando qualsiasi uniformi/attributi non sono sicuro se è sicuro. Inoltre sembra in qualche modo una soluzione alternativa. Qual è il modo migliore per pre-riscaldare il programma?
Un'eccellente informazione, anche se questa è la prima volta che leggo degli ombreggiatori pre-riscaldamento. Hai qualche letteratura su questo? Sarebbe molto utile. Cheers –
Bene, perché tutti i dettagli dell'implementazione relativi alla GPU sono specifici del fornitore e per lo più riservati, direi che non ci sono informazioni solide su questo (perché nessuno lo sa e cambia sempre). Ma i concetti rimangono gli stessi, se c'è una risorsa che viene memorizzata nella cache o caricata pigramente, è sufficiente eseguire alcuni frame per riempire la cache e far caricare la risorsa. Non c'è molto altro ... –