سؤال

لدي بعض OpenGL البرمجية التي يتصرف بشكل غير متسق في مختلف الأجهزة.لدي بعض التعليمات البرمجية:

  1. يخلق تجعل العازلة يربط الملمس لونه العازلة (الملمس)
  2. يحدد هذا يجعل العازلة نشطة ، يتم ضبط العرض, الخ
  3. ينشط بيكسل شادر (التمويه الضبابي ، في هذا المثال).
  4. توجه رباعية على كامل الشاشة مع الملمس على ذلك.
  5. Unbinds على renderbuffer ، إلخ.

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

لقد حصلت عليه إلى احتمالين.

أ) renderbuffer تقديم نفسها ليس من المفترض أن تعمل ، يعمل فقط على الجهاز التطوير بسبب نوع من حظ.

أو

ب) أن هذا النهج يجب أن تعمل, ولكن هناك مشكلة اخرى.

أي أفكار ؟ بصراحة كان لدي صعوبة في العثور على تفاصيل حول هذه المسألة.

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

المحلول

أ) هو الجواب الصحيح.التقديم في نفس العازلة أثناء القراءة من هو غير معروف.فإنه قد عمل ربما لا - وهو بالضبط ما يحدث.

في برنامج OpenGL ، framebuffer_object امتداد يحتوي القسم "4.4.3 التقديم عند صورة لا بد نسيج الكائن هو أيضا تعلق على Framebuffer" الذي يحكي ما يحدث (في الأساس ، غير محدد).في Direct3D9 ، تصحيح وقت يشكو بصوت عال إذا كنت تستخدم هذا الإعداد (ولكن قد تعمل اعتمادا على الأجهزة/سائق).في D3D10 وقت التشغيل دائما unbinds الهدف التي يتم استخدامها كوجهة, أعتقد.

لماذا هذا هو غير معروف?واحدة من الأسباب وحدات معالجة الرسومات بسرعة حتى أنها يمكن أن تجعل الكثير من الافتراضات.على سبيل المثال ، يمكن أن نفترض أن الوحدات التي تجلب بكسل لا تحتاج إلى التواصل مع الوحدات التي تكتب بكسل.لذلك السطح يمكن قراءتها ، ن دورات في وقت لاحق قراءة الانتهاء ، ن دورات في وقت لاحق بيكسل شادر ينتهي التنفيذ, ثم انها وضعت في بعض الانتاج دمج النطاقات على GPU, و أخيرا في نقطة ما هو مكتوب على الذاكرة.على أعلى من ذلك ، فإن وحدات معالجة الرسومات تنقيط في "undefined" النظام (واحد GPU قد تنقيط في صفوف أخرى في بعض ذاكرة التخزين المؤقت الصديقة آخر في أمر آخر تماما), لذلك أنت لا تعرف أي أجزاء من السطح سوف تكون مكتوبة الأولى.

لذا ما يجب عليك القيام به هو إنشاء عدة مخازن.في طمس/glow حالة اثنين عادة ما يكفي تقديم في البداية ، ثم قراءة & طمس أنه في حين أن الكتابة في الثانية.كرر هذه العملية إذا لزم الأمر في بينغ بونغ الطريق.

نصائح أخرى

في بعض الحالات الخاصة ، حتى backbuffer قد يكون كافيا.كنت ببساطة لا تفعل glClear و ما كنت قد رسمت سابقا لا يزال هناك.التحذير هو, بالطبع, لا يمكنك حقا قراءة من backbuffer.ولكن تأثيرات مثل يتلاشى في هذه الأعمال.

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