В одном из предыдущих разделов была описана привязка шейдера к программе. Доступны также функции для отвязки шейдера от программы.
Синтаксис OpenGL 2.0:
void glDetachShader(GLuint program, GLuint shader);
// Параметры:
// program — Программа, от которой отвязывать
// shader — Шейдер, который отвязывать
Синтаксис шейдерных расширений ARB:
void glDetachObjectARB(GLhandleARB program, GLhandleARB shader);
// Параметры:
// program — Программа, от которой отвязывать
// shader — Шейдер, который отвязывать
Учтите, что только отлинкованные шейдеры могут быть удалены.
Синтаксис удаления шейдеров/программ в OpenGL 2.0:
void glDeleteProgram(GLuint id);// Параметры:
// id — Дескриптор удаляемой программы или шейдера
В расширениях ARB единая функция для удаления шейдеров и программ:
void glDeleteObjectARB(GLhandleARB id);
// Параметры:
// id — Дескриптор удаляемой программы или шейдера
В случае если удаляемый шейдер прикреплен к программе, он не удаляется, а только помечается для
удаления. Удаление произойдет, когда шейдер будет отлинкован от всех программ.