وسام البهنسي

مدونة مبرمج معماري

س المباشر 12

مر عامان منذ إطلاق الإصدار 12 من دايركت إكس للعلن. ومن بين كافة الإصدارات السابقة، ربما هذه هي الإصدارة الأقل تبنياً حتى الآن من قبل المطورين. ليس لعيب في عينه، لكن عبر تاريخ دايركت ثري دي(*) كله لم تحمل إصدارة مثل هذا القدر من الاختلافات عن سابقاتها.

عندما تنظر للواجهات البرمجية والإجراءات القادمة مع دايركت إكس 12، تجد أنها نادراً ما تذكر كلمة "رسم" أو ما يدل على ذلك. أغلب الوظائف هي لإدارة الذاكرة والتحكم بالموارد ليس إلا. ولا أعلم كيف سيستطيع طلاب علوم الحاسوب الجدد فهم هذه "الخلطبيطة" التي تبدو بعيدة جداً عما يتوقعه مبرمج رسوميات حاسوب يريد رسم بضعة مثلثات ملونة هنا وهناك. ربما من الأفضل لهم الاختصاص ببرمجة النظم وإدارة الذاكرة وهذا سيجعلهم أكثر كفاءة في التعامل مع هذا الشيء الذي يدعي أنه واجهة برمجة رسوميات.

لكن ما السبب؟ هل مايكروسوفت فقط تهوى تعقيد حياة الناس أم أن هناك سراً في الموضوع؟

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

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

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

نظرية أخرى تقول أن الزمن يتقدم وكل شيء يزداد تعقيداً، وما جاء به دايركت إكس 12 ليس سوى انعكاساً للقدرات الجديدة شديدة التعقيد التي تقدمها بطاقات العرض اليوم من إنفيديا وحش الحاسب الشخصي و AMD اللاهثة وراء كل ما بقي على المائدة. وربما أصعب التغييرات على المبرمجين والتي أصبحت تشترطها البطاقات الجديدة هي المعرفة المسبقة بكامل بيئة الرسم قبل تنفيذ اللعبة. كمثال:

من أجل رسم مجسم معين، كان البرنامج عندما يصل لتلك النقطة، يقوم باختبار مواصفات المادة (material) لذلك المجسم وتعديل بعض الحالات (states) وفقاً للمواصفات المرغوبة. فلو كانت المادة بها بعض الشفافية، فإننا نفعل حالة دمج ألفا وإلا فإننا نعطلها لأننا نعرف أن لها كلفة كبيرة على الأداء. الآن ومع دايركت إكس 12، فإنك لا تستطيع تغيير حالة دمج ألفا عند اللحظة. وإنما يجب أن يعرف برنامجك مسبقاً أنه سيحتاج إلى رسم مجسمات ضمن حالة معينة لها مواصفات محددة ومن ضمنها أن دمج ألفا فعال. ويجب عليه تجهيز هذه المعلومات مسبقاً من أجل أن يقول لدايركت إكس 12 أن ذاك المجسم يستخدم تلك الحزمة الجاهزة من الحالات. هذا هو ما يدعى بحالة خط المعالجة (pipeline state). وهو نوع جديد من الكائنات التي جاءتنا مع دايركت إكس 12، والتي تجبرك على التصريح عن قيمة كل من الحالات المختلفة لجهاز الرسم بدون استثناء وضمها في حزمة واحدة يضاف إليها كود المظللات المستخدمة وهيئة سطح الرسم الذي سترسم عليه عند استخدامك لهذه الحزمة. وإنشاء هذه الكائنات مكلف ويستهلك وقتاً كثيراً يمنعك من فعل ذلك أثناء عمل اللعبة الاعتيادي.

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

بالنسبة لمحرك ألعاب عام، فإن هذا الأسلوب بمثابة كابوس لأن مثل هذه المحركات لا تعرف ما ستواجهه من تراكيب الحالات إلا في وقت متأخر جداً. وهكذا نستطيع فهم بعض أسباب التراخي في تبني دايركت إكس 12.

حديثنا هذا ربما أظهر النصف الفارغ من الكأس، لكن هناك نصف آخر مليء ينتظرنا أيضاً.. بل ولعله أكثر من النصف... وللحديث بقية 😊

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

(**) س المباشر هي ترجمة حرفية لدايركت إكس... على سبيل الدعابة ليس إلا.

أضف تعليقاً

Loading