أنا أعمل في D3D9 الآن.. إذا كان جهاز الزبون لا يحوي المواصفات التي أريدها من كرت الشاشة. فقد قررت الرجوع للـ Reference Rasterize... لكنه بطيء جداً! هل هناك طريقة لتسريع أدائه على مثل هذه الأجهزة؟
__ هناك 10 أنواع من البشر.. من يعرف نظام العد الثنائي، ومن لا يعرفه!
اللهم انصر أهلنا في فلسطين وآجرنا أن نكون عوناً لهم
المشكلة تكمن في كون الـ Reference Rasterizer يعمل تماماً كاسمه... أي هو للمرجعية فقط، وليس للأداء. إن كنت تريد تجريب ميزة معينة أو تشك بمشكلة في driver كرت الشاشة، فإنك ترجع للـ RefRast لتتأكد من صحة عملك... لاحظ أن الـ RefRast أيضاً غير مضمن بالمكتبات النهائية لـ DirectX 9، مما يعني أنه لا يمكنك استخدام الـ RefRast على أجهزة الزبائن... إذن هو للمطورين فقط، وهكذا يمكننا تبرير البطء في ضوء صحة النتائج ودقتها...
للأسف، لا يحوي Direct3D9 على وحدة مماثلة كاملة (على الـ software) لتشغيل المزايا الحديثة على الأجهزة القديمة. يقدم D3D9 مثل هذه المحاكاة فقط لجزء معالجة الـ vertices (أي الإضاءة والتحويل)، أما عند الـ rasterization، فلا يمكنه محاكاة ذلك. بطريقة أخرى، يمكنك استخدام أية إصدار Vertex Shader على أية كرت شاشة، إما بالـ Hardware أو بالـ Software... أما الـ Pixel Shaders فلا يمكنك استخدامها سوى إن كانت مدعومة في الـ Hardware...
فهذا النظام يقوم بالاعتماد علي المعالج الرئيسي في لوحة الام في عملية الرسم و لا يقوم باستخدام تعليمات المعالج الرسوميGPU إلا في قليل من الاغراض و لا تنس في نفس الوقت انه مسؤل عن معالجة منطق اللعبة ..إلخ من المهام ; لذا تواجه البطىء في تصيير الرسومات .
شكراً يا جماعة. ولكن كيف تعالجون في برامجكم حالات كون كرت الشاشة لا يدعم ميزة ما؟ أحياناً نقص هذه الميزة سيتسبب بكتابةكود مختلف تماماً عن الكود الأصلي (خوارزمية مختلفة).
__ هناك 10 أنواع من البشر.. من يعرف نظام العد الثنائي، ومن لا يعرفه!
اللهم انصر أهلنا في فلسطين وآجرنا أن نكون عوناً لهم
نقص ميزة ما في كارت العرض يقوم الدايركت اكس بتحويل التعليمات علي المعالج الرئيسي فوراً من النمط HAL-Hardware Emulation Layer إلي HEL- Hardware Emulation layer . و هناك دالة في الدايركت اكس تقوم بتجميع المعلومات عن كارت العرض
التعليق على مشاركة احمد صالح في Aug 29, 2005 12:15 :
> نقص ميزة ما في كارت العرض يقوم الدايركت اكس بتحويل > التعليمات علي المعالج الرئيسي فوراً من النمط HAL-Hardware > Emulation Layer إلي HEL- Hardware Emulation layer .
ليس فوراً فوراً... مثلاً إن كنت تطلب vertex shaders والجهاز لا يدعمها، فستضطر للكشف عن ذلك باكراً وإخبار Direct3D بأنك سوف تستخدم الـ Software Vertex Processor (أو الـ SWVP اختصاراً)... وكما قلت، هناك مزايا لا يمكن مماثلتها على الـ CPU أبداً، وتشمل قسم الـ Pixel Processing كله! في هذه الحالة، عليك أن تكتب code قادر على معالجة الوضع والتدني إلى طريقة رسم مدعومة بحيث تحافظ على الشكل النهائي قدر الإمكان...
هنا بدأنا ندخل في الكلام عن تصميم محرك اللعبة نفسه...