Godot版本:
3.0.2单声道
操作系统/设备,包括版本:
霓虹灯
GTX 1060
问题说明:
在着色器中,您可以使用isnan()
来检查浮点数是否为NaN。 但是,如果将非浮点数(例如整数,向量,矩阵等)传递给它,则它将破坏着色器,但不会在编辑器中给出错误消息。 但是,在游戏运行时,您确实会收到很多错误垃圾邮件:
drivers/gles3/shader_gles3.h:377 - Condition ' !version ' is true. returned: -1
例如,尝试以下着色器:
shader_type spatial;
void fragment()
{
ALBEDO = isnan(vec2(0,0)) ? vec3(1.0) : vec3(0.0);
}
如您所见,我已将其分配到球体上,如您所见,该球体被奇怪地拉伸并在屏幕空间中绘制:
重现步骤:
最小复制项目:
shadernanbug.zip
感谢您提供可重现的错误报告。 我创建了应解决此错误的请求请求。
我只是想让您知道即使使用此修复程序,您的着色器代码也不会编译,因为isnan(vec2)返回一个布尔vec2。 如果指定了要检查的vec2元素,则将编译您的代码。 例如:
shader_type spatial;
void fragment()
{
ALBEDO = isnan(vec2(0,0)).x ? vec3(1.0) : vec3(0.0);
}
最有用的评论
感谢您提供可重现的错误报告。 我创建了应解决此错误的请求请求。
我只是想让您知道即使使用此修复程序,您的着色器代码也不会编译,因为isnan(vec2)返回一个布尔vec2。 如果指定了要检查的vec2元素,则将编译您的代码。 例如: