В одном из предыдущих разделов была описана привязка шейдера к программе. Доступны также функции для отвязки шейдера от программы.

Синтаксис OpenGL 2.0:

void glDetachShader(GLuint program, GLuint shader);

// Параметры:

//    program — Программа, от которой отвязывать
//    shader — Шейдер, который отвязывать

 

Синтаксис шейдерных расширений ARB:

void glDetachObjectARB(GLhandleARB program, GLhandleARB shader);

// Параметры:

//    program — Программа, от которой отвязывать
//    shader — Шейдер, который отвязывать

 

Учтите, что только отлинкованные шейдеры могут быть удалены.
Синтаксис удаления шейдеров/программ в OpenGL 2.0:

void glDeleteShader(GLuint id);
void glDeleteProgram(GLuint id);// Параметры:

//    id — Дескриптор удаляемой программы или шейдера

 

В расширениях ARB единая функция для удаления шейдеров и программ:

void glDeleteObjectARB(GLhandleARB id);

// Параметры:

//    id — Дескриптор удаляемой программы или шейдера

 

В случае если удаляемый шейдер прикреплен к программе, он не удаляется, а только помечается для
удаления. Удаление произойдет, когда шейдер будет отлинкован от всех программ.