我需要向着色器发送一组数据。
//Application OpenGL
uniform vec3 *variable;
variable = (uniform vec3 *)malloc(80 * sizeof(uniform vec3));
//or
uniform vec3 variable[80];
我需要发送诸如索引之类的数据以及许多其他数据。
后一种情况是正确的。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。