我需要向着色器发送一组数据,如。
//Application OpenGL
uniform vec3 *variable;
variable = (uniform vec3 *)malloc(80 * sizeof(uniform vec3));
//or
uniform vec3 variable[80];
我需要发送索引等数据以及许多其他数据。
答案 0 :(得分: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。