1

我有一个片段着色器,它使用一些基于每个对象设置的制服。有没有办法以某种方式将这些制服存储在显卡上?我听说过(但找不到关于)顶点缓冲区对象的教程——是否有将信息存储在其中的技巧,这样我每次绘制新对象时都不需要重新设置变量?

每个对象都有很少的顶点,但它们是完全静态的。

4

2 回答 2

2

There are indeed Uniform Buffer Objects in later versions of OpenGL http://www.opengl.org/wiki/Uniform_Buffer_Object

于 2011-09-05T09:11:18.973 回答
1

如果您对所有对象使用相同的着色器程序 ID,那么您可以在渲染对象之前设置一次制服,因为它们的值将保持不变,直到您再次设置它们。因此,例如在您加载和编译着色器源的代码中,设置所有对象通用的统一变量,然后渲染您的对象,仅设置每个对象的统一。

如果您对不同的对象有不同的着色器但您想在它们之间共享一些数据,则可以使用其中一个答案中的统一缓冲区思想。在您提到单个着色器时,这在您的情况下不是必需的。

于 2011-09-05T09:52:54.770 回答