我可以在调用glLinkProgram后调用glDeleteShader吗?

时间:2012-01-12 02:09:26

标签: opengl opengl-es

关联程序后,我可以删除附加的着色器吗?

2 个答案:

答案 0 :(得分:11)

http://www.opengl.org/sdk/docs/man/xhtml/glDeleteShader.xml

  

如果要删除的着色器对象附加到程序对象,则为   将被标记为删除,但在它被删除之前不会被删除   对于任何渲染上下文,不再附加到任何程序对象   (即,它必须脱离它之前的任何地方   将被删除)。

答案 1 :(得分:1)

是的,根据文件:https://www.opengl.org/sdk/docs/man/html/glLinkProgram.xhtml

  

更新程序对象的信息日志,程序为   在链接操作时生成。链接操作后,   应用程序可以自由修改附加的着色器对象,编译   附加的着色器对象,分离着色器对象,删除着色器对象,   并附加其他着色器对象。这些操作都不会影响   信息日志或程序对象的一部分程序。

总结:"在链接操作之后,应用程序可以自由...删除着色器对象。这些操作都不会影响...作为程序对象一部分的程序。"

根据BuzzSaw的回复,这为您提供了比您想象的更多选项。特别是,您可以自由删除着色器,正如BuzzSaw所说,在着色器分离之前,它不会实际删除着色器。但是在链接之后,您还可以分离着色器,这将允许您完全删除它 - 并且链接的程序不会受到影响。

本教程使用了这种早期删除着色器:

http://www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/

(虽然没有直接解释)。