الشبكة العربية لمطوري الألعاب

خبير  أحمد عبد الغني مشاركة 1

أنا أعمل في D3D9 الآن.. إذا كان جهاز الزبون لا يحوي المواصفات التي أريدها من كرت الشاشة. فقد قررت الرجوع للـ Reference Rasterize... لكنه بطيء جداً!
هل هناك طريقة لتسريع أدائه على مثل هذه الأجهزة؟

__
هناك 10 أنواع من البشر.. من يعرف نظام العد الثنائي، ومن لا يعرفه!

اللهم انصر أهلنا في فلسطين وآجرنا أن نكون عوناً لهم

خبير مدير وسام البهنسي مشاركة 2

المشكلة تكمن في كون الـ Reference Rasterizer يعمل تماماً كاسمه... أي هو للمرجعية فقط، وليس للأداء. إن كنت تريد تجريب ميزة معينة أو تشك بمشكلة في driver كرت الشاشة، فإنك ترجع للـ RefRast لتتأكد من صحة عملك...
لاحظ أن الـ RefRast أيضاً غير مضمن بالمكتبات النهائية لـ DirectX 9، مما يعني أنه لا يمكنك استخدام الـ RefRast على أجهزة الزبائن...
إذن هو للمطورين فقط، وهكذا يمكننا تبرير البطء في ضوء صحة النتائج ودقتها...

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

خبير  أحمد عبد الغني مشاركة 3

إذن لا يوجد طريقة للـ Software Rendering عن طريق D3D9؟
أريد أن أستخدم الـ shaders على الكروت القديمة مثل الـ gf2 وأمثاله (كرتي من ضمنه)...

__
هناك 10 أنواع من البشر.. من يعرف نظام العد الثنائي، ومن لا يعرفه!

اللهم انصر أهلنا في فلسطين وآجرنا أن نكون عوناً لهم

خبير مدير وسام البهنسي مشاركة 4

للأسف، لا يحوي Direct3D9 على وحدة مماثلة كاملة (على الـ software) لتشغيل المزايا الحديثة على الأجهزة القديمة.
يقدم D3D9 مثل هذه المحاكاة فقط لجزء معالجة الـ vertices (أي الإضاءة والتحويل)، أما عند الـ rasterization، فلا يمكنه محاكاة ذلك.
بطريقة أخرى، يمكنك استخدام أية إصدار Vertex Shader على أية كرت شاشة، إما بالـ Hardware أو بالـ Software... أما الـ Pixel Shaders فلا يمكنك استخدامها سوى إن كانت مدعومة في الـ Hardware...

هناك rasterizers متخصصة للـ software مثل Pixomatic من RAD Game Tools:
http://www.radgametools.com

لديها القدرة على أداء أغلب عمليات الـ rendering وبسرعة معقولة باستخدام جميع إمكانيات الجهاز المتاحة (MMX و SSE و 3DNow!)...

بالمقابل، كان D3D7 يدعم الخط كاملاً على الـ software إن لزم الأمر، ولكني لا أظن أن العودة لـ D3D7 في هذه الحالة أمر وارد (نحن في القرن 21)!

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

مبتدئ  احمد صالح مشاركة 5

Reference Rasterize... لكنه بطيء جداً!

كما ذكر الاخ وسام

فهذا النظام يقوم بالاعتماد علي المعالج الرئيسي في لوحة الام في عملية الرسم و لا يقوم باستخدام تعليمات المعالج الرسوميGPU إلا في قليل من الاغراض و لا تنس في نفس الوقت انه مسؤل عن معالجة منطق اللعبة ..إلخ من المهام ; لذا تواجه البطىء في تصيير الرسومات .

خبير  أحمد عبد الغني مشاركة 6

شكراً يا جماعة.
ولكن كيف تعالجون في برامجكم حالات كون كرت الشاشة لا يدعم ميزة ما؟
أحياناً نقص هذه الميزة سيتسبب بكتابةكود مختلف تماماً عن الكود الأصلي (خوارزمية مختلفة).

__
هناك 10 أنواع من البشر.. من يعرف نظام العد الثنائي، ومن لا يعرفه!

اللهم انصر أهلنا في فلسطين وآجرنا أن نكون عوناً لهم

مبتدئ  احمد صالح مشاركة 7

نقص ميزة ما في كارت العرض يقوم الدايركت اكس بتحويل التعليمات علي المعالج الرئيسي فوراً من النمط HAL-Hardware Emulation Layer إلي HEL- Hardware Emulation layer .
و هناك دالة في الدايركت اكس تقوم بتجميع المعلومات عن كارت العرض
HRESULT GetAdapterIdentifier(
UINT Adapter
DWORD Flags,
D3DADAPTER_IDENTIFIER9 *pIdentifier
);

راجع الوثائق لمعرفة البارمترات

خبير مدير وسام البهنسي مشاركة 8

التعليق على مشاركة احمد صالح في Aug 29, 2005 12:15 :

> نقص ميزة ما في كارت العرض يقوم الدايركت اكس بتحويل
> التعليمات علي المعالج الرئيسي فوراً من النمط HAL-Hardware
> Emulation Layer إلي HEL- Hardware Emulation layer .

ليس فوراً فوراً... مثلاً إن كنت تطلب vertex shaders والجهاز لا يدعمها، فستضطر للكشف عن ذلك باكراً وإخبار Direct3D بأنك سوف تستخدم الـ Software Vertex Processor (أو الـ SWVP اختصاراً)...
وكما قلت، هناك مزايا لا يمكن مماثلتها على الـ CPU أبداً، وتشمل قسم الـ Pixel Processing كله!
في هذه الحالة، عليك أن تكتب code قادر على معالجة الوضع والتدني إلى طريقة رسم مدعومة بحيث تحافظ على الشكل النهائي قدر الإمكان...

هنا بدأنا ندخل في الكلام عن تصميم محرك اللعبة نفسه...

وسام البهنسي
مبرمج في إنفيديا وإنفريمز