为什么定义浮点数时的“f”后缀有时会导致 GLSL 编译器错误?

Rob*_*ert 4 opengl glsl

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

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

float ambientLight = 2f;
Run Code Online (Sandbox Code Playgroud)

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

Nic*_*las 7

出于我仍然无法理解的原因,GLSL 规范要求浮点文字后缀 ( f, lf) 仅出现在明确的浮点值之后。2整数文字,而不是浮点文字,因此不能用f. 文字不是浮点文字,除非它1e4在某处清楚地有小数或指数(例如)。

所以你必须把它写成2.f.

  • @CCJ:由于 float 是 GLSL 中浮点值的默认值,并且您必须使用“lf”显式请求双精度(与 C 和 C++ 不同),因此在任何时候都不需要它。 (3认同)