关联程序后,我可以删除附加的着色器吗?
答案 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/
(虽然没有直接解释)。