为什么在OpenGL上创建着色器后需要分离和删除着色器?

Mai*_*tor 7 c++ opengl

我正在按照本教程(链接)进行操作,该教程表示您必须在链接后从程序中分离着色器,并且必须在此之后删除它们.

直观地说,并行编译C++,我认为"链接"是实际创建程序的行为(如同,制作可执行文件), - 分离意味着以某种方式删除指向着色器对象的指针(我想象它是类似的)到.o),在程序(这仍然不是很清楚-是不是该方案在这一点上编译的可执行文件它是如何仍持有指针的东西)? -这是删除像真正删除那些.o从的文件夹.

但这些都是猜测,那么实际发生了什么?

Mar*_*Łoś 9

glDeleteShader上的OpenGL文档:

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

因此,它更像是递减参考计数器而不是实际删除.