我有一个片段着色器,它使用一些基于每个对象设置的制服。有没有办法以某种方式将这些制服存放在显卡上?我听说过(但是找不到教程)顶点缓冲区对象 - 是否存在将信息存储在那里的技巧,这样我每次绘制新对象时都不需要重新设置变量?
每个对象都有很少的顶点,但它们是完全静态的。
答案 0 :(得分:2)
答案 1 :(得分:1)
如果对所有对象使用相同的着色器程序ID,则可以在渲染对象之前设置一次制服,因为它们的值将保持不变,直到再次设置它们为止。所以例如在您加载和编译着色器源的代码中,设置所有对象通用的统一变量,然后渲染对象,仅设置每个对象的制服。
如果您为不同的对象设置了不同的着色器,但想要在它们之间共享一些数据,则可以使用其中一个答案中的统一缓冲区构思。在您提及单个着色器的情况下,这不是必需的。