【问题标题】:Why does the 'f' suffix when defining floats sometimes cause GLSL compiler errors?为什么定义浮点数时的“f”后缀有时会导致 GLSL 编译器错误?
【发布时间】:2019-01-03 03:41:52
【问题描述】:

我一直在制作自己的 OpenGL 游戏来学习 C++(来自 Java)。我在另一台计算机上测试它,以便在较弱的系统上测试它的性能,我发现有一个着色器编译器错误。

似乎在我运行英特尔集成显卡的计算机上,以下行会导致语法错误。

float ambientLight = 2f;

错误只是'f' syntax error,所以我自然删除了f,现在它在两台机器上都运行良好。我猜这是某种驱动程序错误,但我不确定为什么会出现这种差异,以及这是否意味着我应该停止将 fs 放在 glsl 中的浮点声明中。

【问题讨论】:

  • 你的目标是什么#version
  • @genpfault 下面的评论者说我没有#version 是正确的 :) 所以我想它默认为 110。

标签: opengl glsl


【解决方案1】:

由于我一直无法理解的原因,GLSL 规范要求浮点文字后缀(flf)仅出现在明确的浮点值之后。 2 是一个 integer 文字,而不是浮点文字,因此不能用 f 修饰。一个字面量不是浮点字面量,除非它的某处明显有小数或指数(例如1e4)。

所以你必须写成2.f

【讨论】:

  • 是否需要'f'后缀?
  • @CCJ:由于 float 是 GLSL 中浮点值的默认值,并且您必须使用 lf 明确要求双精度数(与 C 和 C++ 不同),因此在任何时候都不需要.
猜你喜欢
  • 2016-05-31
  • 2017-12-07
  • 2021-12-29
  • 1970-01-01
  • 2018-04-08
  • 2023-03-03
  • 2012-10-05
  • 2020-04-26
  • 2016-05-13
相关资源
最近更新 更多