为什么';f';定义浮点时的后缀有时会导致GLSL编译器错误? 我一直在制作自己的OpenGL游戏,学习C++(来自java)。我在另一台计算机上测试它,以便在较弱的系统上测试它的性能,我发现有一个着色器编译器错误

为什么';f';定义浮点时的后缀有时会导致GLSL编译器错误? 我一直在制作自己的OpenGL游戏,学习C++(来自java)。我在另一台计算机上测试它,以便在较弱的系统上测试它的性能,我发现有一个着色器编译器错误,opengl,glsl,Opengl,Glsl,似乎在我运行英特尔集成图形的计算机上,以下行导致语法错误 float ambientLight = 2f; 这个错误只是'f'语法错误,所以我很自然地删除了f,现在它在两台机器上都可以正常运行。我猜这是某种类型的驱动程序错误,但我不确定为什么会有这种差异,也不确定这是否意味着我应该停止在glsl中的浮点声明中同时添加fs。出于我一直无法理解的原因,glsl规范要求浮点文字后缀(f,lf)只出现在明确的浮点值之后。2是一个整型文字,而不是浮点文字,因此不能用f修饰。文字不是浮点文字,除非它的某个

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

float ambientLight = 2f;

这个错误只是
'f'语法错误
,所以我很自然地删除了f,现在它在两台机器上都可以正常运行。我猜这是某种类型的驱动程序错误,但我不确定为什么会有这种差异,也不确定这是否意味着我应该停止在glsl中的浮点声明中同时添加
f
s。

出于我一直无法理解的原因,glsl规范要求浮点文字后缀(
f
lf
)只出现在明确的浮点值之后。
2
是一个整型文字,而不是浮点文字,因此不能用
f
修饰。文字不是浮点文字,除非它的某个地方明显有十进制或指数(
1e4


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

你的目标是什么
#version
因此,我假设它默认为110。是否需要“f”后缀?@CCJ:因为浮点是GLSL中浮点值的默认值,并且必须使用
lf
(与C和C++不同)显式请求双精度,所以在任何时候都不需要。