这两个选项中的哪一个更好地取决于这些着色器的作用,它们的不同程度以及您设置的属性/制服数量以及它们的更改频率.所有案件都没有正确的答案.
这就是说:请记住,不仅有状态更改的成本,还有着色器运行时成本,并且每个顶点和每个片段都支付.因此,将着色器的复杂性保持在低水平始终是一个好主意,并且通用着色器比专用着色器更复杂.
尽量减少状态变化.如果你有使用程序X的对象A,C,E,使用程序Y的D,F,那么在其他条件相同的情况下,按照ACEBDF而不是ABCDEF进行渲染.
关于最后一个问题:除非你重新安排,否则程序会在其一生中保留其状态,从而保持制服的价值.但是制服是按照程序状态进行的,这意味着如果你有两个在不同程序中具有相同名称和类型的制服,则值不会从一个程序转移到另一个程序.