Quanto velocemente glUseProgram()? C'è qualcosa di meglio (più veloce) ?:Comportamento delle uniformi dopo glUseProgram() e velocità
Qui sono i miei pensieri:
- Usa 1 programma di shader universale, ma con molte impostazioni di input e attributi (impostazioni per ogni classe Graphics)
- utilizzare più di 1 shader per ogni classe di grafica
Quale stato sono uniformi dopo aver modificato il programma shader? Salvano valori (ad esempio, i valori delle matrici)?
Ecco quello che io considero i benefici di 1 # essere:
- Non fa uso di glUseProgram()
E i vantaggi di 2 #:
- No le modifiche alla matrice (ad esempio, se la classe
Menu
e la classeScene3D
hanno matrici di proiezione diverse)
"La scelta delle due opzioni dipende in gran parte da ciò che fanno quegli shader" - Task semplice: rendering con texturing, senza effetti (solo alcuni devono avere effetti shader). –
Se alcuni sono molto semplici e alcuni hanno un effetto, allora avrei un semplice shader con solo texturing (assumendo openg gl 2.x o superiore) e uno per classe effect. Ma è davvero difficile giudicare senza saperne di più. Probabilmente non importa molto nel quadro generale. A meno che tu non abbia problemi di prestazioni e sappia che è a causa di cambiamenti di stato, fai semplicemente ciò che è più conveniente. – haffax
Le uniformi possono essere condivise tra i programmi utilizzando l'oggetto Buffer uniforme (si veda ad esempio [Uniformi condivisi] (http://arcsynthesis.org/gltut/Positioning/Tut07%20Shared%20Uniforms.html)) – stativ