GLSL 1.3中的数组属性

时间:2013-09-11 05:25:03

标签: opengl glsl

我正在尝试为骨骼动画编写着色器。它在我的桌面上编译并运行良好,它有一个GeForce 560Ti。但是,在我的笔记本电脑(650M)上,任何带有该行的着色器:

in vec4 boneWeight[4];

无法编译,错误: Vertex/perfragskel.vert: ERROR: 4:1: 'attribute 4-component vector of float' : cannot declare arrays of this qualifier

我已经看到它写在不同的地方,数组属性是和不允许的。 代码应该编译,还是我的旧编译器过于宽松?我需要设置什么才能使它工作?我正在使用opengl 3.0渲染上下文。下面是一个最小的例子。

#version 130

in vec4 boneWeight[4];//MAX_BONES/4];    

void main(void)
{
    gl_Position = vec4(0,0,0,0);
}

1 个答案:

答案 0 :(得分:3)

我为你做了一些挖掘,发现了这个方便的信息......

第4.3.4节输入​​(GLSL 1.3)

  

顶点着色器输入变量(或属性)接收每顶点数据。它们在顶点着色器中使用in限定符或不推荐使用的属性限定符声明。在顶点着色器中使用质心是一个错误。复制的值由OpenGL API建立。在非顶点着色器中使用属性是错误的。顶点着色器输入只能是浮点,浮点矢量,矩阵,有符号和无符号整数以及整数向量。 它们不能是数组或结构。

第4.3.4节输入​​(GLSL 1.5)

  

顶点着色器输入变量(或属性)接收每顶点数据。它们在顶点着色器中使用in限定符或不推荐使用的属性限定符声明。在顶点着色器输入中使用质心或插值限定符是错误的。复制的值由OpenGL API建立。在非顶点着色器中使用属性是错误的。顶点着色器输入只能是浮点,浮点矢量,矩阵,有符号和无符号整数以及整数向量。顶点着色器输入 也可以构成这些类型的数组 但不是结构。

需要拍摄桌面的GLSL编译器。它没有正确地遵守#version 130指令。要在您的笔记本电脑上修复此问题,该笔记本电脑似乎具有符合标准的编译器,您只需将着色器从130升级到#version 150