我读到可以将多个着色器附加到 OpenGL 程序的同一阶段,以创建辅助函数的“库”。我试过了,它在我的机器上运行良好。但是,OpenGL Wiki 警告
话虽如此,虽然这种力量是可用的,但最好不要使用它。它通常可以工作,但因为大多数 OpenGL 应用程序不这样做,所以它没有像 OpenGL API 的其他部分那样经过彻底的测试。因此,您可能会以这种方式遇到更多驱动程序错误。通常坚持每个着色器阶段有一个着色器对象。
本节写于 2013 年。对于相当现代的硬件/驱动程序,这仍然适用吗?
恕我直言,维基注释是完全可以修改的。因为可能会遇到错误而限制 API?来吧,那就放弃编码吧:没有 main(),没有 bug。
就我个人而言,我从未遇到过在多个对象中分割着色器的问题,主要是在 Nvidia、Amd 和 Intel 上。也许其他平台的驱动程序有限,但这可以通过处理多个源文本来解决。
就我个人而言,我没有看到任何避免多个对象的有效理由,但是我想说,很少需要缓存对象来将其链接到多个程序。