OpenGL着色器语言;如何指定 vec4 的精度?

Tom*_*sso 4 shader qt opengl-es glsles

我正在编写一个 Qt OpenGL 应用程序,刚刚从 GLSL 开始,并尝试编译一个我在网络上的示例中找到的“简单”片段着色器:

#version 320 es
out vec4 fColor;

void main()
{
    fColor = vec4 (0.0, 0.0, 1.0, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

但是当尝试从源添加此着色器时,我从 Qt 收到此错误消息addShaderFromSourceFile()

QOpenGLShader::compile(Fragment):
0:3(12): 警告:GL_ARB_fragment_coord_conventions片段着色器中不支持扩展
0:1(1): 错误: 在此范围内没有为类型指定精度vec4

声明 type 精度的正确语法是什么vec4
我似乎找不到如何做到这一点的示例vec4,并尝试这样的事情:

precision mediump vec4;
Run Code Online (Sandbox Code Playgroud)

...导致语法错误。

请注意,我希望着色器在嵌入式系统上运行,因此#version 320 es开头有“”行。

Rab*_*d76 6

vec4不是默认精度限定符的有效类型。
默认精度限定符中的类型必须是int,float或任何不透明类型(例如采样器是不透明类型)。

精度声明

precision mediump float;
Run Code Online (Sandbox Code Playgroud)

影响所有浮点数(例如float, vec2, vec3, vec4, mat3, ...)

精度限定符也可以设置为单个变量:

out mediump vec4 fColor;
Run Code Online (Sandbox Code Playgroud)

这将覆盖默认的精度限定符。

有关详细信息,请参阅OpenGL ES 着色语言 3.20 规范 - 4.7。精度和精度限定符