Czy po połączeniu programu i zastanowieniu się nad programowaniem defensywnym powinienem usunąć i odłączyć shadery używane do łączenia tego programu?
Jeśli tak, czy to zwolni jakieś zasoby? Czy te obiekty modułu cieniującego zostaną uwolnione dopiero po wywołaniu glDeleteProgram?
edycja: Tylko dla wyjaśnienia, co robię (co jest zgodne z odpowiedzią):
glCreateShader -> glShaderSource -> glCompileShader -> glCreateProgram -> glAttachShader -> glLinkProgram -> glDetachShader -> glDeleteShader -> rysuj za pomocą tego programu do cieniowania -> a kiedy już go nie potrzebuję glDeleteProgram
Kolejność jest prawidłowa, ale tak naprawdę nie trzeba odłączać modułów cieniujących, ponieważ wywołanie glDeleteProgram robi to dla ciebie ze wszystkimi dołączonymi modułami cieniującymi, a następnie są one automatycznie usuwane (jeśli zostały oznaczone do usunięcia za pomocą funkcji glDeleteShader).
Odniesienie: http://www.opengl.org/sdk/docs/man/xhtml/glDeleteProgram.xml .
źródło