当前方法是将一系列数据输入到同一顶点着色器以用于不同的实例。 请参阅文章" 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]统一变量)。 这样,即使每次发出绘图元素命令,至少它在第一次绘制后都不会绑定和取消绑定。
我的问题: 在两个解决方案中哪个更快?
除了两种解决方案之外还有其他更好的方法吗?