前一小节展示了函数,用于将着色器对象与着色器程序相关联。相对地,也存在一个函数,用于删除着色器对象和着色器程序的关联。
在OpenGL2.0中,该函数是:
void
glDetachShader(GLuint program, GLuint shader);
Parameter:
program - The program to detach from.
shader - The shader to detach.
在ARB扩展中,该函数如下:
void
glDetachObjectARB(GLhandleARB program, GLhandleARB shader);
Parameter:
program - The program to detach from.
shader - The shader to detach.
只有那些没有任何关联的着色器才能够被删除,因此这个函数与本节的主题也极为相关。想要删除一个着色器对象或者着色器程序对象,在OpenGL2.0中。使用如下函数:
void
glDeleteShader(GLuint id);
void
glDeleteProgram(GLuint id);
Parameter:
id - The handler of the shader or program to delete.
如果使用ARB扩展,则只需要一个函数就可以达到同样的目的:
void
glDeleteObjectARB(GLhandleARB id);
Parameter:
id - The handler of the shader or program to delete.
当一个着色器与多个程序相关联时,该着色器不是被真正删除,而是被标记为删除。只有当该着色器不再与任何程序相关联时,才将该着色器删除。