什么是正确的做法?
我正在执行以下步骤:
- 创建着色器(Shader)
- 编译着色器(Shader)
- 创建程序(Program)
- 将着色器(Shader)附加到程序(Program)
- 链接程序(Program)
- 删除着色器(Shader)
在http://www.opengl.org/wiki/GLSL_Object中,它说:即使在链接程序之后,您也不必显式分离着色器对象。但是,一旦链接完成,最好这样做,否则程序对象将在尝试删除它们时保持其附加的着色器对象处于活动状态。
而且从Proper way to delete GLSL shader?也说如果我不删除着色器,它会增加内存。
我查看了http://www.opengl.org/sdk/docs/man/xhtml/glDetachShader.xml,它说:如果着色器已经被调用glDeleteShader标记为删除,并且它没有附加到任何其他程序对象,那么它将在分离后被删除。
所以,我的#6除非我在正确分离它之后否则无用,对吗?
我应该在程序编译正确后分离和删除(以节省内存),还是只有在我的应用程序关闭时分离/删除?
glBindAttribLocation
来更改属性绑定,那么你需要调用glLinkProgram
才能使更改生效。因此,如果你从已链接的程序中删除或分离着色器,则属性绑定将无法在重新绑定着色器之前进行更改。 - PeterT