2009-05-19 4 views
3

следующий простой фрагмент кода шейдера не удается, оставив меня с малоинформативным сообщением в журнале: ERROR: 0:1: 'gl_Color' : syntax error syntax errorGLSL ошибка синтаксиса пиксельный шейдер

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

в то время как следующие один работает:

void main() 
{ 
    glFragColor = gl_Color; 
} 

This испуг мой разум, как и в Lighthouse3D's tutorial gl_Color, называется vec4. Почему я не могу назначить его другому vec4?

+0

Действительно ли сообщение об ошибке действительно подлинное? Нормально ли/ожидалось, что он пропустит номер столбца/строки и дважды включит текст «синтаксическая ошибка»? – unwind

+0

Да, сообщение об ошибке является подлинным (я опустил подчеркивание в примерах, следовательно, редактирование). Я не знаю, что нормально/ожидалось с журналами информации GLSL; в большинстве случаев местоположение ошибки не отображалось, а просто проблемное имя переменной/функции. (Среда - OS X, xcode, OpenGL 2.0 с драйвером ATI v1.5) – zyndor

+0

* bump * bump * Hey slacker! Это сработало? ;) – ralphtheninja

ответ

7

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

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

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

(см. OpenGL Shading Language Specification)

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

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

Смежные вопросы