我正在做一些LBS,我需要使用超过4个权重和索引(假设我需要60个float
值和60个int
值。)
我正在使用GLSL version 1.30
,因此我无法使用Shader Storage Buffer Object
。由于这个权重和索引信息对于每个顶点都是不同的,所以不能使用uniform
,我想如果你不是,就没有办法定义一个固定大小的数组(例如float arr[16]
)使用uniform
。此外,对于attribute
输入,我只能使用vec/mat
2
,3
或4
。
那么,你知道如何解决这个问题吗?
答案 0 :(得分:2)
第一种方法是将它们作为普通顶点属性传递。尽管有一个驱动程序特定的最大顶点属性数。
一个更好的方法,应该适用于每个驱动程序和任意数量的属性(不是无限的,但很多),将顶点属性存储在纹理中。
一个简单的设置是创建一个NxM纹理,其中N =#vertex_attributes,M = #peceices。然后每个顶点只有一个属性,表示纹理的一条线。在顶点着色器中,您可以读取每个顶点纹理的一行并拥有所有属性。