为什么';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++不同)显式请求双精度,所以在任何时候都不需要。