2017-10-29 7 views
0

シェーダをコンパイルしようとしていますが、別のPCのAMDドライバではなく、1台のPC上でIntel HD上でコンパイルしています。GLSLエラー:「タイプが浮動小数点またはint型である必要があります」

バーテックスシェーダ:

#version 330 
precision mediump float; 
precision lowp sampler2D; 

uniform mat4 ProjectionMatrix; 
uniform mat4 ModelViewMatrix; 
uniform mat4 WorldViewMatrix; 
in vec3 position; 
in vec2 TexCoord; 
out vec2 texCoord; 

void main() { 
    texCoord = TexCoord; 
    gl_Position = ProjectionMatrix * ModelViewMatrix * WorldViewMatrix * vec4(position, 1); 
} 

フラグメントシェーダ:AMDのドライバで

#version 330 
precision mediump float; 
precision lowp sampler2D; 

uniform vec4 TextureHueColor; 
uniform sampler2D TextureUnit; 
in vec2 texCoord; 
out vec4 gl_FragColor; 

void main() { 
    gl_FragColor = texture(TextureUnit, texCoord) * TextureHueColor; 
} 

、私は取得しています:

Vertex shader failed to compile with the following errors: 
ERROR: 0:3: error(#228) Type should be float or int 
ERROR: error(#273) 1 compilation errors. No code generated 

私は初心者です、と持っています何が間違っているのかわからないシェイダー、私にはうまく見える。誰が何が間違っているのスポット?

+1

'precision lowp sampler2D;'を削除してください。 – HolyBlackCat

+0

@ MathuSumMut:おそらくそれを正しく削除しなかったでしょう。そうした場合、3行目は空白またはコメントになり、どちらも同じエラーが発生する可能性があります。だからあなたは*別の*エラーを持っているか、あなたがそのステートメントを削除したと思うだけです。 –

+1

@ MathuSumMut:デバッグのスキルを使いましょう。その行番号の前にファイルにエラーを作成し、何が起こるかを見てください。または、コードにデバッグし、 'glShaderSource'に渡す前に文字列を読み込んでください。あなたが本当に文字列を変更したことを証明してください。今のところ、すべての証拠があなたにそうしていないことを指摘しているからです。 –

答えて

5

デフォルトprecision GLSL 3.30の修飾子は、サンプラタイプには適用できません。または、intまたはfloat以外のタイプ。

また、FYI:デスクトップGLSL(GLSL ESとは対照的に)を使用する場合、precision修飾子は何も行いません。彼らは無視されます。 GLSL ESシェーダとの互換性のためだけに存在します。

+0

明らかに、https://stackoverflow.com/a/6336285/5007383によると、 'precision lowp sampler2D;'は有効なステートメントですが、OpenGL ESでは、通常のOpenGLではなく、のみです。ご協力いただきありがとうございます。 :) –

+1

@MathuSumMut:もう少し掘り下げて、GLSL 3.30での私の記述が真実だが、最終的に4.40で変更され、サンプラーの型(および後で不透明な型)が可能になった。だから、AMDのドライバは正しい。 –

関連する問題