سؤال

أقوم بترميز تطبيق ثلاثي الأبعاد باستخدام DirectX 10 وأتساءل عن كيفية معالجة Shadermanagement.

هل من الأكثر فعالية التحميل المسبق لجميع التظليلات الموجودة عند بدء التطبيق ثم استخدامها حسب الحاجة أم أن هذا يؤدي إلى تدريب موارد الأجهزة إذا ارتفع العدد.

وأتساءل أيضًا عما إذا كان من مراعاة السرعة طلب العرض بواسطة التظليل بحيث يتم تقليل مفاتيح التظليل.

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

المحلول

وأنا لم يعمل مع DX10، DX9 فقط، ولكن انا التخمين هذه الأمور لا تزال هي نفسها.

واعتمادا على التطبيق الخاص بك، قد تولد في الواقع تظليل في وقت التشغيل (العديد من الألعاب 3D متطورة الحالية القيام بذلك).

وتحميلها مسبقا على تظليل ليست فكرة سيئة، وهذا يتوقف على إذا كنت توليد تظليل، كم هناك، وما هي الاعتبارات الذاكرة الخاصة بك - أنها تعتمد. ومع ذلك، تحميلها مسبقا تظليل (التي أفترض أنك تعني خلق المثال ID3DXEffect) يستغرق سوى الذاكرة في وقت التشغيل، لا استخدام وحدة المعالجة المركزية.

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

لفرز drawcalls الخاص بك، وهذا نصها: http://realtimecollisiondetection.net/blog/؟p = 86

نصائح أخرى

في D3D10، تكون جميع موارد الجهاز افتراضية حتى لا تنفد منها.بالطبع، لا يزال بإمكانك استنفاد الموارد المادية الموجودة على البطاقة والتسبب في الكثير من الضربات إذا لم تنتبه لما تفعله.

بالإضافة إلى ذلك، فقد قاموا بتغيير حالة الجهاز بشكل كبير لتقليل تكلفة تبديل الحالة، بما في ذلك التظليل.

ولكن ما تسأله حقا هو "هل الطريقة X أسرع من الطريقة Y لتطبيقي؟" وعلى الرغم من أن D3D10 يبسط إدارة الحالة لجعل تبديل الحالة أسرع ، فإن الطريقة الوحيدة للإجابة على السؤال أعلاه هي إجراء قياس الأداء باستخدام لك التطبيق و لك بيانات.

يتحدث منشور مدونة realtimecollectiondetection.net فقط عن فرز مكالمات السحب الخاصة بك.سيؤدي هذا إلى تقليل تبديل الحالة.لا يهم مدى سرعة تبديل الحالة، فإجراء قدر أقل منه يكون دائمًا أسرع.هذه نصيحة عامة جيدة.

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