OpenGL:为了绘制多个对象,我可以为同一个片段着色器输入一系列数据用于不同的实例吗?

时间:2016-05-25 18:59:18

标签: opengl fragment-shader vertex-shader

当前方法是将一系列数据输入到同一顶点着色器以用于不同的实例。 请参阅文章" Instancing"

但是对于许多实例来说,它们共享相同的顶点着色器,相同的片段着色器, 但在顶点着色器和片段着色器中都有一些不同的统一参数([Update]统一变量)。 例如,顶点着色器具有:

position

片段着色器有10个参数,其中只有3个会随实例而改变:

7 other uniform parameters ([Update] uniform variables)  (keep the same for different instances)
colorFrequency    
lightnessAttenuationLinearParameter    
lightnessAttenuationQuadraticParameter   

解决方案1:一个解决方法是: 将所有数据输入顶点着色器,然后让顶点着色器将一些参数传递给片段着色器。

但我恐怕实际上这很慢。 从编程的角度来看,这没有很好的可读性。

解决方案2 :(它不是opengl实例化。但我使用相同的顶点着色器和片段着色器绘制类似的对象) 第一次设置opengl程序并使用片段着色器将其与10个参数([Update]统一变量)绑定。 然后每次绘制一个新实例,只在顶点着色器中更新1个位置参数([Update]统一变量),在片段着色器中更新3个参数([Update]统一变量)。 这样,即使每次发出绘图元素命令,至少它在第一次绘制后都不会绑定和取消绑定。

我的问题: 在两个解决方案中哪个更快?

除了两种解决方案之外还有其他更好的方法吗?

0 个答案:

没有答案