2014-11-02 5 views

ответ

7

Современные версии GLSL делают фрагменты шейдерных выходов просто объявляя их как значения out, а gl_FragColor больше не поддерживается, следовательно, ваша ошибка. Попробуйте это:

out vec4 fragColor; 
void main() 
{ 
    fragColor = vec4(1.0, 0.0, 0.0, 1.0); 
} 

Обратите внимание, что gl_FragDepth не изменился и по-прежнему доступен.

Для получения дополнительной информации см https://www.opengl.org/wiki/Fragment_Shader

3

предопределенная переменная gl_FragColor больше не существует в GLSL ES 3.00. Вам нужно определить свою собственную переменную out для вывода шейдера фрагмента. Вы можете использовать любое имя, которое вы хотите, например:

out vec4 FragColor; 

void main() { 
    ... 
    FragColor = ...; 
} 

Это следует за основным профилем полного OpenGL. Причина того, что не имеет предварительно определенного вывода шейдера фрагмента, заключается в том, что он недостаточно масштабируется для нескольких целей рендеринга и для целей рендеринга, которым нужны типы, отличные от векторов float.