将数组作为属性

时间:2015-07-30 21:01:41

标签: opengl glsl vertex-shader skinning

我正在做一些LBS,我需要使用超过4个权重和索引(假设我需要60个float值和60个int值。)

我正在使用GLSL version 1.30,因此我无法使用Shader Storage Buffer Object。由于这个权重和索引信息对于每个顶点都是不同的,所以不能使用uniform,我想如果你不是,就没有办法定义一个固定大小的数组(例如float arr[16])使用uniform。此外,对于attribute输入,我只能使用vec/mat 234

那么,你知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

第一种方法是将它们作为普通顶点属性传递。尽管有一个驱动程序特定的最大顶点属性数。

一个更好的方法,应该适用于每个驱动程序和任意数量的属性(不是无限的,但很多),将顶点属性存储在纹理中。

一个简单的设置是创建一个NxM纹理,其中N =#vertex_attributes,M = #peceices。然后每个顶点只有一个属性,表示纹理的一条线。在顶点着色器中,您可以读取每个顶点纹理的一行并拥有所有属性。

相关问题