مطول GLSL تظليل تجميع على إنتل
سؤال
ولدي مشروع يستخدم تظليل GLSL.
تم تصميم هذا المشروع بعدم طباعة أي شيء لالمعياري ما لم يحدث خطأ ما، أو تقوم بدورها بشكل واضح على بعض إخراج التصحيح إضافية.
عند فشل ترجمة تظليل طول سجل قدمها glGetProgramInfoLog
هو> 0، وأحيانا عندما نجحت في> 0، ويعطي الترجمة <م> تحذيرات م> بدلا من ذلك. عندما يكون لديك تظليل أن يجمع تماما طول السجل <1 ... هذه هي الطريقة التي يعمل على بطاقتي نفيديا على آلة ديف بلدي.
لخطاياي، وأنا أيضا القيام ببعض ديف على جهاز كمبيوتر محمول مع بطاقة رسومات إنتل المتكاملة. رمز يعمل بشكل جيد، ولكن كلما أفعل تظليل تجميع يحتوي السجل:
و"تم تجميع تظليل بنجاح لتشغيلها على أجهزة"
ما هو مزعج جدا، ولدي الآن أي وسيلة لتقرر ما إذا كان ينبغي لي أن طباعة سلسلة بها، بصرف النظر عن نوع من تحليل سلسلة، على سبيل المثال:
strstr("successfully",log)
ونأمل الواضحة لماذا هذا غير مرغوب فيه. كيف، على كل حال، يمكنني معرفة ما إذا كان رسالة يستحق طبع باستخدام API برنامج OpenGL؟
وتحرير:
إذا كنت تستخدم glGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err);
ثم أنا لا تحصل على تجميع تحذيرات أو أخطاء فقط.
المحلول
وهنا تذهب:
glGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err);
if(!err) { /* now print out the error log */ }
وهذه هي حالة الترجمة الوحيد تحصل. ليس هناك أي طريقة المحمولة لقد وجدت لتحديد ما إذا كنت قد حصلت على التحذيرات. (سجل الترجمة يمكن أن يكون كاملا من أي تنفيذ يهتم لوضع فيه، بما في ذلك الإخطار من النجاح.)