我正在编写一个从GLSL开始的Qt OpenGL应用程序,并尝试编译在网络示例中找到的“简单”片段着色器:
=IF(O7>0,(concatenate=(H7,J7,K7,L7,M7,N7)),H7)
但是当尝试从源代码添加此着色器时,我从Qt的#version 320 es
out vec4 fColor;
void main()
{
fColor = vec4 (0.0, 0.0, 1.0, 1.0);
}
收到了此错误消息:
QOpenGLShader :: compile(Fragment):
指定精度
0:3(12):警告:片段着色器不支持扩展名addShaderFromSourceFile()
0:1(1):错误:在此范围中没有为类型GL_ARB_fragment_coord_conventions
声明类型vec4
的精度的正确语法是什么?
我似乎找不到用于vec4
的示例,并尝试如下操作:
vec4
...导致语法错误。
请注意,我希望着色器在嵌入式系统上运行,因此开头应为“ precision mediump vec4;
”行。
答案 0 :(得分:2)
vec4
不是默认精度限定符的有效类型。
默认Precision Qualifiers中的类型必须为int
,float
或任何不透明类型(例如,采样器为不透明类型)。
精度声明
precision mediump float;
影响所有浮点(例如float
,vec2
,vec3
,vec4
,mat3
等)
还可以将精度限定符设置为单个变量:
out mediump vec4 fColor;
这将覆盖默认的精度限定符。
有关详细信息,请参见OpenGL ES Shading Language 3.20 Specification - 4.7. Precision and Precision Qualifiers。