Синтаксическая ошибка шейдера фрагмента GLSL

StackOverflow https://stackoverflow.com/questions/882527

  •  22-08-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Попробуйте обычное задание.Вот так:

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);

и т.д.

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top