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

голоса
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?

Задан 19/05/2009 в 11:43
источник пользователем
На других языках...                            


2 ответов

голоса
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);

и т.д

Ответил 19/05/2009 в 12:15
источник пользователем

голоса
4

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

(см OpenGL Shading Language Specification )

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

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

Ответил 19/05/2009 в 12:37
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more