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 によって確立されます。非頂点シェーダーで属性を使用するとエラーになります。頂点シェーダー入力は、float、浮動小数点ベクトル、行列、符号付きおよび符号なし整数、および整数ベクトルのみにすることができます。配列または構造体にすることはできません。

セクション 4.3.4 入力(GLSL 1.5)

頂点シェーダーの入力変数 (または属性) は、頂点ごとのデータを受け取ります。これらは、in 修飾子または非推奨の属性修飾子を使用して頂点シェーダーで宣言されます。頂点シェーダー入力でセントロイドまたは補間修飾子を使用するとエラーになります。コピーされた値は、OpenGL API によって確立されます。非頂点シェーダで属性を使用するとエラーになります。頂点シェーダー入力は、float、浮動小数点ベクトル、行列、符号付きおよび符号なし整数、および整数ベクトルのみにすることができます。頂点シェーダー入力これらの型の配列を形成できますが、構造体は形成できません。

デスクトップの GLSL コンパイラを撃つ必要があります。#version 130指令をきちんと守っていない。適合するコンパイラを搭載しているように見えるラップトップでこれを修正するには、シェーダーを 130 から#version 150

于 2013-09-11T23:22:36.160 に答える