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

时间:2019-06-01 00:16:21

标签: qt opengl-es glsles

我正在编写一个从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; ”行。

1 个答案:

答案 0 :(得分:2)

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

精度声明

precision mediump float;

影响所有浮点(例如floatvec2vec3vec4mat3等)

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

out mediump vec4 fColor;

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

有关详细信息,请参见OpenGL ES Shading Language 3.20 Specification - 4.7. Precision and Precision Qualifiers