Godot: isnan () في شفرة التظليل يكسر التظليل عندما يتم تمرير غير عائم إليه

تم إنشاؤها على ٢٦ مايو ٢٠١٨  ·  1تعليق  ·  مصدر: godotengine/godot

إصدار 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);
}

لقد قمت بتعيينه على كرة هنا ، كما ترى ، يتمدد الكرة بشكل غريب ويتم رسمها في مساحة الشاشة:
bug

خطوات التكاثر:

  1. أضف MeshInstance إلى المشهد ، وقم بتعيين مجال ، وقم بتعيين ShaderMaterial جديدة لها.
  2. ضع التظليل أعلاه فيه ولاحظ النتائج.

مشروع التكاثر الأدنى:

shadernanbug.zip

bug core rendering

التعليق الأكثر فائدة

شكرا لتقرير الخطأ استنساخه. لقد قمت بإنشاء طلب سحب يجب أن يصلح هذا الخطأ.

أردت فقط أن أخبرك أن كود التظليل الخاص بك لن يتم تجميعه حتى مع الإصلاح لأن 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 الذي تريد التحقق منه. على سبيل المثال:

shader_type spatial;

void fragment()
{
    ALBEDO = isnan(vec2(0,0)).x ? vec3(1.0) : vec3(0.0);
}
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات