Dopo un glLinkProgram riuscito, devo cancellare / scollegare i miei shader?


45

Dopo che ho un programma collegato e pensando alla programmazione difensiva, devo eliminare e scollegare gli shader utilizzati per collegare questo programma?

Se sì, libererà risorse? O questi oggetti shader verranno liberati solo dopo una chiamata glDeleteProgram?

modifica: solo per chiarire che cosa sto facendo (che è coerente con la risposta):

glCreateShader -> glShaderSource -> glCompileShader -> glCreateProgram -> glAttachShader -> glLinkProgram -> glDetachShader -> glDeleteShader -> disegna usando questo programma shader -> e quando non ho più bisogno di questo shader glDeleteProgram

Risposte:


46

Sì, dovresti sempre farlo. Non l'ho scoperto fino a poco tempo fa, ma uno shader non verrà effettivamente eliminato glDeleteShaderfino a quando non viene rimosso. È menzionato nella pagina man diglDetachShader

EDIT : Quasi perso un po 'di eliminare anche gli shader. Sì, dovresti farlo poiché libera la memoria utilizzata per archiviare l'origine shader e il codice oggetto non collegato. Questo è spiegato in modo più dettagliato in questa domanda StackOverflow .


+1 e semplifica anche la pulizia poiché hai solo un oggetto da tracciare e glDelete.
Maximus Minimus,

2

L'ordine è giusto, ma in realtà non è necessario rimuovere nuovamente gli shader, perché chiamare glDeleteProgram lo fa per te con tutti gli shader collegati e quindi vengono eliminati automaticamente (se sono stati contrassegnati per l'eliminazione con glDeleteShader func).

Riferimento: http://www.opengl.org/sdk/docs/man/xhtml/glDeleteProgram.xml .


Gli oggetti shader occupano molta memoria rispetto a ciascun programma. È meglio eliminarli dopo aver compilato i programmi e avere più memoria disponibile per cose più importanti.
Robert Rouhani,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.