1

我需要向着色器发送一组数据。

//Application OpenGL

uniform vec3 *variable; 
variable = (uniform vec3 *)malloc(80 * sizeof(uniform vec3));  

//or    
uniform vec3 variable[80];

我需要发送诸如索引之类的数据以及许多其他数据。

4

1 回答 1

3

后一种情况是正确的。GLSL 建立在尽可能简单直接的执行之上。您不能在着色器中分配内存,迭代很昂贵。编写良好的 GLSL 或 HLSL 着色器接收一组固定的数据,并输出一组固定的数据。这使得并行执行非常快。这是我的骨骼顶点着色器。

 #version 110

uniform mat4 transform[ 32 ];

in int boneID;

void main()
{

    gl_FrontColor = gl_Color;
    gl_Position = transform[ boneID ] * gl_Vertex;

}

在 C/++ 端,当调用 glUniformMatrix4fv 时,将它指向一个由多个矩阵组成的数组并告诉它有多少,然后它将它们作为单独的值带入 GLSL。

请注意,我的代码是基于旧版本的 GLSL 构建的,并且使用了许多现已弃用的元素,例如 gl_Vertex。

于 2013-06-03T09:28:43.943 回答