成功执行glLinkProgram之后,是否应该删除/分离着色器?


45

在拥有链接的程序并考虑防御性编程之后,是否应该删除和分离用于链接该程序的着色器?

如果是,那将释放任何资源吗?还是仅在glDeleteProgram调用之后才释放这些着色器对象?

编辑:只是为了澄清我在做什么(与答案一致):

glCreateShader-> glShaderSource-> glCompileShader-> glCreateProgram-> glAttachShader-> glLinkProgram-> glDetachShader-> glDeleteShader->使用此着色器程序绘制->当我不再需要此着色器时,glDeleteProgram

Answers:


46

是的,您应该始终这样做。直到最近我才发现有关此问题的信息,但是着色器glDeleteShader在被分离之前并不会被删除。在手册页中提到glDetachShader

编辑:几乎也错过了有关删除着色器的位。是的,您应该这样做,因为它会释放用于存储着色器源和未链接目标代码的内存。有关此StackOverflow问题的详细说明。


+1,这也使清理更容易,因为您只需要跟踪和glDelete一个对象。
Maximus Minimus

2

顺序是正确的,但是您实际上不需要拆下着色器,因为调用glDeleteProgram会对所有连接的着色器执行此操作,然后将它们自动删除(如果使用glDeleteShader func将其标记为删除)。

参考:http : //www.opengl.org/sdk/docs/man/xhtml/glDeleteProgram.xml


与每个程序相比,着色器对象占用大量内存。最好在完成程序编译后删除它们,并为更多重要的事情提供更多的内存。
罗伯特·鲁哈尼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.