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

问题描述 投票:0回答:2

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

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

float ambientLight = 2f;

错误只是

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

opengl glsl
2个回答
11
投票

由于我一直不明白的原因,GLSL 规范要求浮点文字后缀(

f
lf
)仅出现在明确的浮点值之后。
2
是一个 integer 文字,而不是浮点文字,因此它不能用
f
修饰。文字不是浮点文字,除非它在其中的某处明显有小数或指数(例如,
1e4
)。

所以你必须写成

2.f


0
投票

此外,供您参考,似乎在 GLSL 代码中使用 f 后缀表示浮点数仅在 OpenGL/GLSL ES 版本 3.0、3.1、3.2 中可用

#version 300 // or 310, 320 at the beginning of GLSL shaders

因此对于早期的 GLSL ES 版本也会出现如下编译错误
ERROR: '0.5f' : Floating-point suffix unsupported prior to GLSL ES 3.00

ERROR: '0.5f' : syntax error

© www.soinside.com 2019 - 2024. All rights reserved.