Ошибка синтаксиса фрагмента GLSL - PullRequest
3 голосов
/ 19 мая 2009

следующий простой фрагментный шейдерный код завершается ошибкой, оставляя мне неинформативное сообщение в журнале: 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?

Ответы [ 2 ]

7 голосов
/ 19 мая 2009

Попробуйте нормальное назначение. Как это:

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

Edit:

Второй ответ на самом деле так же корректен, но нет необходимости использовать конструктор vec4 (), поскольку оба они одного типа. Если бы у вас был, скажем, кортеж (r, g, b, w), вы могли бы написать:

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

или

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

и т.д.

4 голосов
/ 19 мая 2009

В некоторых случаях вы должны использовать немного другой синтаксис

(см. Спецификация языка затенения OpenGL )

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

это в отличие от вашего примера отлично компилируется на моем компьютере (Windows, карта Nvidia)

...