1

我正在尝试为骨骼动画编写着色器。它在我拥有 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);
}
4

1 回答 1

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

于 2013-09-11T23:22:36.160 回答