سؤال

ولدي مشروع يستخدم تظليل 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 */ }

وهذه هي حالة الترجمة الوحيد تحصل. ليس هناك أي طريقة المحمولة لقد وجدت لتحديد ما إذا كنت قد حصلت على التحذيرات. (سجل الترجمة يمكن أن يكون كاملا من أي تنفيذ يهتم لوضع فيه، بما في ذلك الإخطار من النجاح.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top