如何在GLSL中使用指针

时间:2013-06-03 00:23:56

标签: c opengl glsl

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

//Application OpenGL

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

//or    
uniform vec3 variable[80];

我需要发送索引等数据以及许多其他数据。

1 个答案:

答案 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。