2009-05-19 9 views
3

次のような単純なフラグメントシェーダコードは、ログに情報価値のメッセージを私に残して、失敗した次の1作品ながら ERROR: 0:1: 'gl_Color' : syntax error syntax errorGLSLフラグメントシェーダ構文エラー

void main() 
{ 
    vec4 myOutputColor(gl_Color); 
    gl_FragColor = myOutputColor; 
} 

void main() 
{ 
    glFragColor = gl_Color; 
} 

このboggles私の心はLighthouse3D's tutorialのようにgl_Colorはvec4と言われています。なぜ他のvec4に割り当てることができないのですか?

+0

エラーメッセージは本当に本物ですか?列/行番号を見落として「構文エラー」テキストを2回挿入するのは正常/予想ですか? – unwind

+0

はい、エラーメッセージは本物です(例ではアンダースコアが省略されています)。私はGLSLの情報ログで何が正常であるか予想されているのかどうかは分かりません。ほとんどの場合、エラーの場所は表示されず、問題のある変数/関数名が表示されます。 (環境はOS X、xcode、ATIドライバv1.5のOpenGL 2.0です) – zyndor

+0

*バンプ*バンプ*ちょっと怖い!それは動作しましたか? ;) – ralphtheninja

答えて

7

通常の割り当てを試してください。このように:

void main() 
{ 
    vec4 myOutputColor = gl_Color; 
    gl_FragColor = myOutputColor; 
} 

編集:

第二の答えは本当に同じように正しいですが、両方とも同じタイプであることから、vec4()コンストラクタを使用する必要はありません。あなたが(R、G、B、W)を言うことができますしていた場合、あなたが書くことができタプル:

vec4 myOutputColor = vec4(r, g, b, w); 

または

// assuming myRgbColor is a vec3 
vec4 myOutputColor = vec4(myRgbColor, w); 

などAparrently

4

あなたは少し異なる構文を使用する必要があります

OpenGL Shading Language Specification参照)

vec4 myOutputColor = vec4(gl_Color); 
gl_FragColor = myOutputColor; 

これは私のmashine(Windows、Nvidiaカード)であなたのサンプルをうまくコンパイルできない

関連する問題