存储片段着色器的每个对象数据

时间:2011-09-05 03:05:04

标签: opengl glsl vertex-buffer

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

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

2 个答案:

答案 0 :(得分:2)

在OpenGL http://www.opengl.org/wiki/Uniform_Buffer_Object

的更高版本中确实存在统一缓冲区对象

答案 1 :(得分:1)

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

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

相关问题