3

次の単純なフラグメントシェーダーコードは失敗し、ログに情報のないメッセージが残ります。 ERROR: 0:1: 'gl_Color' : syntax error syntax error

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

次のものが機能している間:

void main()
{
  glFragColor = gl_Color;
}

Lighthouse3Dのチュートリアルでgl_Colorがvec4であると言われているように、これは私の頭を悩ませます。別のvec4に割り当てられないのはなぜですか?

4

2 に答える 2

7

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

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

編集:

2番目の答えは実際には同じように正しいですが、vec4()コンストラクターを使用する必要はありません。これは、両方が同じタイプであるためです。(r、g、b、w)タプルと言えば、次のように書くことができます。

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

また

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

于 2009-05-19T13:15:45.447 に答える
4

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

OpenGLシェーディング言語仕様を参照)

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

これは、サンプルとは異なり、私のmashine(Windows、Nvidiaカード)で正常にコンパイルされます。

于 2009-05-19T13:37:30.970 に答える