Godot-Version:
3.0.2 Mono
Betriebssystem / Gerät einschließlich Version:
KDE Neon
GTX 1060
Fehlerbeschreibung:
In einem Shader können Sie mit isnan()
prüfen, ob ein Float NaN ist. Wenn Sie jedoch etwas übergeben, das kein Float ist (z. B. eine Ganzzahl, ein Vektor, eine Matrix usw.), wird der Shader unterbrochen, es wird jedoch keine Fehlermeldung im Editor angezeigt. Sie erhalten jedoch eine Menge Fehler-Spam, wenn das Spiel ausgeführt wird:
drivers/gles3/shader_gles3.h:377 - Condition ' !version ' is true. returned: -1
Versuchen Sie zum Beispiel diesen Shader:
shader_type spatial;
void fragment()
{
ALBEDO = isnan(vec2(0,0)) ? vec3(1.0) : vec3(0.0);
}
Ich habe es hier einer Kugel zugewiesen, wie Sie sehen können, wird die Kugel merkwürdig gedehnt und im Bildschirmbereich gezeichnet:
Schritte zum Reproduzieren:
Minimales Reproduktionsprojekt:
shadernanbug.zip
Vielen Dank für den reproduzierbaren Fehlerbericht. Ich habe eine Pull-Anfrage erstellt, die diesen Fehler beheben soll.
Ich wollte Sie nur wissen lassen, dass Ihr Shader-Code auch mit dem Fix nicht kompiliert werden kann, da isnan (vec2) einen booleschen vec2 zurückgibt. Ihr Code würde kompiliert, wenn Sie angeben, welches Element von vec2 Sie überprüfen möchten. Beispielsweise:
shader_type spatial;
void fragment()
{
ALBEDO = isnan(vec2(0,0)).x ? vec3(1.0) : vec3(0.0);
}
Hilfreichster Kommentar
Vielen Dank für den reproduzierbaren Fehlerbericht. Ich habe eine Pull-Anfrage erstellt, die diesen Fehler beheben soll.
Ich wollte Sie nur wissen lassen, dass Ihr Shader-Code auch mit dem Fix nicht kompiliert werden kann, da isnan (vec2) einen booleschen vec2 zurückgibt. Ihr Code würde kompiliert, wenn Sie angeben, welches Element von vec2 Sie überprüfen möchten. Beispielsweise: