Versi Godot:
3.0.2 Mono
OS / perangkat termasuk versi:
KDE Neon
GTX 1060
Deskripsi masalah:
di shader Anda dapat menggunakan isnan()
untuk memeriksa apakah float adalah NaN. Namun, jika Anda meneruskan apa pun yang bukan float ke dalamnya (seperti integer, vektor, matriks, dll), shader akan rusak, namun tidak memberikan pesan kesalahan di editor. Anda memang mendapatkan banyak spam kesalahan saat permainan berjalan, meskipun:
drivers/gles3/shader_gles3.h:377 - Condition ' !version ' is true. returned: -1
Misalnya coba shader ini:
shader_type spatial;
void fragment()
{
ALBEDO = isnan(vec2(0,0)) ? vec3(1.0) : vec3(0.0);
}
Saya telah menugaskannya pada sebuah bola di sini, seperti yang Anda lihat, bola tersebut menjadi meregang secara aneh dan digambar di ruang layar:
Langkah-langkah untuk mereproduksi:
Proyek reproduksi minimal:
shadernanbug.zip
Terima kasih atas laporan bug yang dapat direproduksi. Saya telah membuat permintaan tarik yang seharusnya memperbaiki bug ini.
Saya hanya ingin memberi tahu Anda bahwa kode shader Anda tidak akan dapat dikompilasi bahkan dengan perbaikan karena isnan (vec2) mengembalikan boolean vec2. Kode Anda akan dikompilasi jika Anda menentukan elemen vec2 mana yang ingin Anda periksa. Sebagai contoh:
shader_type spatial;
void fragment()
{
ALBEDO = isnan(vec2(0,0)).x ? vec3(1.0) : vec3(0.0);
}
Komentar yang paling membantu
Terima kasih atas laporan bug yang dapat direproduksi. Saya telah membuat permintaan tarik yang seharusnya memperbaiki bug ini.
Saya hanya ingin memberi tahu Anda bahwa kode shader Anda tidak akan dapat dikompilasi bahkan dengan perbaikan karena isnan (vec2) mengembalikan boolean vec2. Kode Anda akan dikompilasi jika Anda menentukan elemen vec2 mana yang ingin Anda periksa. Sebagai contoh: