Version Godot:
3.0.2 Mono
OS / appareil, y compris la version:
KDE Neon
GTX 1060
Description du problème:
dans un shader, vous pouvez utiliser isnan()
pour vérifier si un flottant est NaN. Cependant, si vous lui passez quelque chose qui n'est pas un flottant (comme un entier, un vecteur, une matrice, etc.), cela casse le shader, mais ne donne pas de message d'erreur dans l'éditeur. Cependant, vous recevez beaucoup de spam d'erreur lorsque le jeu s'exécute:
drivers/gles3/shader_gles3.h:377 - Condition ' !version ' is true. returned: -1
Par exemple, essayez ce shader:
shader_type spatial;
void fragment()
{
ALBEDO = isnan(vec2(0,0)) ? vec3(1.0) : vec3(0.0);
}
Je l'ai assigné sur une sphère ici, comme vous pouvez le voir, la sphère est étrangement étirée et est dessinée dans l'espace de l'écran:
Étapes à suivre pour reproduire:
Projet de reproduction minimale:
shadernanbug.zip
Merci pour le rapport de bogue reproductible. J'ai créé une pull request qui devrait corriger ce bogue.
Je voulais juste vous faire savoir que votre code shader ne se compilera pas même avec le correctif car isnan (vec2) renvoie un booléen vec2. Votre code se compilerait si vous spécifiiez quel élément du vec2 vous souhaitez vérifier. Par example:
shader_type spatial;
void fragment()
{
ALBEDO = isnan(vec2(0,0)).x ? vec3(1.0) : vec3(0.0);
}
Commentaire le plus utile
Merci pour le rapport de bogue reproductible. J'ai créé une pull request qui devrait corriger ce bogue.
Je voulais juste vous faire savoir que votre code shader ne se compilera pas même avec le correctif car isnan (vec2) renvoie un booléen vec2. Votre code se compilerait si vous spécifiiez quel élément du vec2 vous souhaitez vérifier. Par example: