Versão Godot:
3.0.2 Mono
Sistema operacional / dispositivo incluindo versão:
KDE Neon
GTX 1060
Descrição do problema:
em um sombreador, você pode usar isnan()
para verificar se um float é NaN. No entanto, se você passar qualquer coisa que não seja um float para ele (como um inteiro, vetor, matriz, etc), ele quebra o sombreador, mas não dá uma mensagem de erro no editor. No entanto, você recebe muito spam de erro quando o jogo é executado:
drivers/gles3/shader_gles3.h:377 - Condition ' !version ' is true. returned: -1
Por exemplo, tente este shader:
shader_type spatial;
void fragment()
{
ALBEDO = isnan(vec2(0,0)) ? vec3(1.0) : vec3(0.0);
}
Eu o atribuí a uma esfera aqui, como você pode ver, a esfera fica estranhamente esticada e é desenhada no espaço da tela:
Passos para reproduzir:
Projeto de reprodução mínima:
shadernanbug.zip
Obrigado pelo relatório de bug reproduzível. Eu criei uma solicitação de pull que deve corrigir esse bug.
Eu só queria que você soubesse que seu código de sombreador não compilará mesmo com a correção porque isnan (vec2) retorna um vec2 booleano. Seu código seria compilado se você especificasse qual elemento do vec2 você deseja verificar. Por exemplo:
shader_type spatial;
void fragment()
{
ALBEDO = isnan(vec2(0,0)).x ? vec3(1.0) : vec3(0.0);
}
Comentários muito úteis
Obrigado pelo relatório de bug reproduzível. Eu criei uma solicitação de pull que deve corrigir esse bug.
Eu só queria que você soubesse que seu código de sombreador não compilará mesmo com a correção porque isnan (vec2) retorna um vec2 booleano. Seu código seria compilado se você especificasse qual elemento do vec2 você deseja verificar. Por exemplo: