【问题标题】:OpenGL shader language; how to specify precision for vec4?OpenGL着色器语言;如何指定 vec4 的精度?
【发布时间】:2019-06-01 00:16:20
【问题描述】:

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

#version 320 es
out vec4 fColor;

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

但是当尝试从源代码添加这个着色器时,我从 Qt 的addShaderFromSourceFile() 收到这个错误消息:

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

为vec4 类型声明精度的正确语法是什么?
我似乎找不到如何为vec4 执行此操作的示例,并尝试这样的事情:

precision mediump vec4;

...导致语法错误。

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

【问题讨论】:

    标签: qt opengl-es shader glsles


    【解决方案1】:

    vec4 不是默认精度限定符的有效类型。
    默认精度限定符中的类型必须是 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      相关资源
      最近更新 更多