Wenn ich ein verknüpftes Programm habe und über defensive Programmierung nachdenke, sollte ich die Shader löschen und entfernen, die zum Verknüpfen dieses Programms verwendet wurden?
Wenn ja, werden dadurch Ressourcen freigesetzt? Oder werden diese Shader-Objekte erst nach einem glDeleteProgram-Aufruf freigegeben?
edit: Nur zur Verdeutlichung was ich tue ist (was mit der Antwort übereinstimmt):
glCreateShader -> glShaderSource -> glCompileShader -> glCreateProgram -> glAttachShader -> glLinkProgram -> glDetachShader -> glDeleteShader -> mit diesem Shaderprogramm zeichnen -> und wenn ich diesen Shader nicht mehr benötige glDeleteProgram
Die Reihenfolge ist richtig, aber Sie müssen die Shader nicht wirklich anhängen, da der Aufruf von glDeleteProgram dies für Sie mit allen angehängten Shadern erledigt und sie dann automatisch gelöscht werden (wenn sie mit glDeleteShader func zum Löschen markiert wurden).
Referenz: http://www.opengl.org/sdk/docs/man/xhtml/glDeleteProgram.xml .
quelle