سؤال

أريد استخدام خوارزمية مخصصة محددة لإنشاء خرائط mipmap لبعض الأنسجة القابلة للعرض (R16F وRGBA16F).

يتم تمكين خرائط mipmap لجميع الأنسجة المطلوبة مسبقًا باستخدام glGenerateMipmapEXT().

أكبر مشكلة حتى الآن هي العرض إلى مستويات 1+ mipmap.بتعبير أدق ، هذا يعمل مثل السحر:

...
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, target, texType, texId, 0 );
checkFBOStatus();
...
render();

ولكن هذا يعطيني GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT عند التحقق من حالة fbo

...
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, target, texType, texId, 1 );
checkFBOStatus();
...
render();

كل الاختلاف في الكود هو معلمة مستوى lod لإرفاق نسيج على FBO.

بعد الكثير من الخدش المحموم، ما زلت غير قادر على تشغيله.لذلك، أي إجابة هو موضع تقدير كبير.

[ملحوظة:النظام الأساسي المستهدف هو OpenGL 2.x بامتداد FBO]

هل كانت مفيدة؟

المحلول

تم حل المشكلة


يرجع سبب عدم اكتمال FBO إلى اتساق النسيج.عند استخدام glGenerateMipmapEXT/glGenerateMipmap، يجب عليك التأكد من أن المستوى الأساسي للنسيج الخاص بك يحتوي على بيانات صالحة;وإلا، فستفشل هذه المكالمة دون أي إعلام بالخطأ.

هناك حلان ممكنان للمرجع الخاص بك:

  1. استخدم Teximage أو TexsUBIMAGE لملء نسيجك القابل للعرض قبل glgeneratemipmap

  2. نعلق الملمس القابل للعدوى إلى FBO وهمية قبل glgeneratemipmap

في كلتا الحالتين يعمل (تم اختباره على GF8 ، GF9) لم يتم اختباره على بطاقات ATI.

سيكون ذلك أمرًا رائعًا إذا تمكن أي شخص من اختباره على وحدات معالجة الرسومات ATI.

ملاحظة.الثابتة والمتنقلة اسمحوا لي أن أعرف إذا كان لديك مشكلة في استخدام هذه الحلول.

نصائح أخرى

والله انا عندي نفس المشكلة في ATI Radeon 9800لكنني أجريت مكالمة مع gltexImage2D.

التقديم إلى المستوى الأول ممكن ولكن ليس الآخرين.ربما يجب أن أجرب طريقة FBO الوهمية.

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