Язык шейдеров OpenGL;Как указать точность для VEC4? - PullRequest
1 голос
/ 01 июня 2019

Я пишу приложение Qt OpenGL, только что начав с GLSL, и пытаюсь скомпилировать «простой» фрагментный шейдер, который я нашел в примере в Интернете:

#version 320 es
out vec4 fColor;

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

Но при попытке добавить этот шейдер из источника я получаю это сообщение об ошибке от addShaderFromSourceFile() Qt's:

QOpenGLShader :: компиляции (фрагмент):
0: 3 (12): предупреждение: расширение GL_ARB_fragment_coord_conventions не поддерживается во фрагментном шейдере
0: 1 (1): ошибка: в этой области не указана точность для типа vec4

Каков правильный синтаксис для объявления точности для типа vec4?
Я не могу найти пример того, как это сделать для vec4, и попробовать что-то вроде этого:

precision mediump vec4;

... приводит к синтаксической ошибке.

Обратите внимание, что я хочу, чтобы шейдер работал во встроенной системе, поэтому в начале строки "#version 320 es".

1 Ответ

2 голосов
/ 01 июня 2019

vec4 не является vaild-типом для квалификатора точности по умолчанию.
Тип по умолчанию для Precision Qualifiers должен быть либо int, float, либо любого непрозрачного типа (например, сэмплер является непрозрачным типом),

Оператор точности

precision mediump float;

влияет на все плавающие точки (например, float, vec2, vec3, vec4, mat3, ...)

Для прецизионного квалификатора также может быть задана одна переменная:

out mediump vec4 fColor;

это перезаписывает квалификатор точности по умолчанию.

Подробнее см. OpenGL ES Shading Language 3.20 Спецификация - 4.7.Точность и прецизионность квалификации .

...