Qual è il modo corretto per farlo?OpenGL programma/shader non inizializzazione
sto facendo questi passaggi:
- Create Shader (s)
- Compile Shader (s)
- Crea Programma
- Fissare Shader (s) per programmare
- Il link
- Elimina Shader (s)
In http://www.opengl.org/wiki/GLSL_Object dice: Non è necessario separare esplicitamente gli oggetti shader, anche dopo aver collegato il programma. Tuttavia, è consigliabile farlo una volta completato il collegamento, altrimenti l'oggetto programma manterrà vivi gli oggetti shader associati quando si tenta di eliminarli.
E anche da Proper way to delete GLSL shader? dice che aumenterà la memoria se non elimini gli shader.
Quindi il controllo su http://www.opengl.org/sdk/docs/man/xhtml/glDetachShader.xml, si dice Se lo shader è già stato contrassegnato per l'eliminazione da una chiamata al glDeleteShader e non è collegato a qualsiasi altro oggetto programma, esso verrà cancellato dopo che è stato staccato.
Quindi il mio numero 6 è inutile a meno che non lo stacchi dopo giusto?
Devo staccare e cancellare dopo che il programma è stato compilato correttamente (per salvare la memoria) o dovrei staccare/eliminare solo quando la mia applicazione si sta chiudendo?
sidenote: è necessario richiamare 'glLinkProgram' per le modifiche apportate all'attributo bind con' glBindAttribLocation' per avere effetto.Quindi, se elimini e scolleghi gli shader da un programma collegato, il binding dell'attributo non può essere modificato in modo efficace senza associare gli shader ad esso. – PeterT