اشاره: يك بازي كامپيوتري را روي كامپيوترتان اجرا ميكنيد. فعلاً كارت گرافيك شما روي اسلاتAGP سوار ميشود، پردازشگر سلرون داريد و ... پس از چند ماه يا چند سال كامپيوتر جديدي ميخريد. اكنون اسلات كارت گرافيكي شما PCI Express است و يك پردازشگر 64 بيتي داريد. همان بازي را روي اين كامپيوتر هم نصب و اجراميكنيد! شايد به نظر طبيعي ميآيد كه همه چيز بايد همينطور باشد. اما چگونه يك بازي روي كامپيوترهايي با تراشهها و سختافزارهاي مختلف و گاه فناوري متفاوت اجرا ميشود؟ APIهاي گرافيكي يا همان رابطهاي برنامهنويسي، بخش بزرگي از اين مشكل را حل ميكنند و امكانات گسترده ديگري را نيز در اختيار برنامهنويسان و توسعهدهندگان بازي و برنامههاي چندرسانهاي قرارميدهند. OpenGL وDirectX، دو مجموعه API گرافيكي و صوتي هستند كه براي آسانتر ساختن توسعه بازيها و نرمافزارهاي چندرسانهاي طراحي شدهاند. APIگرافيكي چيست؟ API درواقع بين برنامه و سختافزاري كه برنامه روي آن اجرا ميشود، نقش يك هماهنگكننده را دارد و مانند پلي ميان سختافزار و نرمافزار ارتباط ايجادميكند. يعني برنامهنويس كدهايي مينويسد كه دادههاي گرافيكي خود را به وسيله دستورهاي استانداردي به درايور API ميفرستد نه مستقيماً به خود سختافزار. سپس درايوري كه شركت سازنده سختافزار توليدكرده است، اين كداستاندارد توليدشده را به فرمت بومي و ويژهاي كه براي آن مدل خاص سختافزار قابل شناسايي است، ترجمه ميكند. Microsoft DirectX شركت مايكروسافت در سال 1995 DirectX را ساخته و توسعه دادهاست. اين نرمافزار شامل مجموعه يكپارچهاي از ابزارهاي برنامهنويسي است كه به توسعهدهندگان امكان ميدهد انواع مختلف نرمافزارهاي مالتيمديا را روي پلتفرم ويندوز توليد كنند. DirectX به برنامهاي كه بر پايه آن طراحي شده امكان ميدهد به آساني قابليتهاي سختافزار كامپيوتر را شناسايي كند و پارامترهاي برنامه را با آن هماهنگ سازد. DirectX شامل APIهايي است كه دسترسي به بخشهاي ويژهاي از سختافزار مانند تراشههاي شتابدهنده گرافيك سهبعدي و كارت صوتي را ميسرميكند. اين APIها كنترل توابع سطح پايين، يعني نزديك به سختافزار، شامل شتابدهنده گرافيكي دو بعدي، پشتيباني از دستگاههاي ورودي مانند دسته بازي، صفحهكليد و ماوس، و كنترل ميكس و خروجي صدا را انجام ميدهند. DirectX 7.0 در سال 1999 با شش كامپوننت عرضه شد كه عبارت بودند از: Direct3D،DirectDraw ،DirectSound ،DirectPlay ،DirectInput و DirectMusic. در اواخر سال 2000 ميلادي، DirectX 8.0 عرضه شد كه در آن كامپوننتهاي DirectSound و DirectMusic با هم ادغام شدند و با نام كامپوننت Direct Audio معرفي شدند. Direct3D و DirectDraw نيز با هم ادغام شدند و يك كامپوننت با نام DirectX Graphics را ساختند. DirectShow نيز به صورت يك API جداگانه پيادهسازي شد و به يكي از كامپوننتهاي DirectX تبديل گرديد. DirectX 9.0 در ژانويه سال 2003 عرضه شد. ويژگيهاي خاص اين نسخه عبارتند از: - قابليتهاي صوتي جديد در DirectSound - سختافزار رندركننده ويديويي با شتاب بيشتر - بهبود قابليت برنامهريزي گرافيكي APIهاي همه كامپوننتهاي DirectX برپايه COM يا Component Object Model هستند. در ادامه به بررسي هفت كامپوننت DirectX 9.0 ميپردازيم كه عبارتند از: DirectDraw ،Direct3D ،DirectShow ،DirectSound ،DirectMusic ،DirectInput و DirectPlay. 1- DirectDraw DirectDraw، كامپوننتي ويژه طراحي دوبعدي است كه به برنامهنويس اجازه ميدهد مستقيماً به حافظه كارت گرافيك دسترسي يابد، صحنهها و فريمها را با هم تركيب نمايد يا bitmapها را در آنجا ذخيره كند. همچنين، براي برنامهها امكان دسترسي به سختافزارهاي ويژه نمايش را مستقل از نوع سختافزار فراهم ميكند. هر برنامه كاربردي DirectDraw الگوي يكساني دارد كه عبارت است از: - ايجاد يك شي - شروع حلقه - انتقال به مانتيور - پايان حلقه - پاك كردن آن شي منظور از واژه <يك شي> ميتواند هر تصوير دوبعدياي باشد و منظور از حلقه، حلقهاي است كه در برنامهنويسي هنگام تكرار منظم دستهاي از دادهها يا دستورها به كار ميبريم. تصوير ايجادشده پس از مدتي پاك ميشود و جاي خود را به تصوير ديگري ميدهد. 2- Direct3D اين كامپوننت، دسترسي به توابع رندركننده گرافيك سهبعدي تعبيه شده در بيشتر كارتهاي گرافيك را فراهم ميكند. Direct3D يك API سطح پايين سهبعدي است كه به نرمافزار امكان ميدهد مستقل از سختافزار، با سختافزار شتابدهنده ارتباط برقرار كند. لايهاي كه براي توسعهدهندگان بازي و گرافيك كامپيوتري امكان طراحي و ساخت بازيها را مستقل از سختافزار كامپيوترها فراهم ميكند، لايهاي به نام Hardware Abstraction Layer) HAL) است. HAL با قابليتهايي كه به صورت گسترده در سختافزارهاي گرافيك سهبعدي پيادهسازي شدهاند ارتباط ايجاد ميكند و به سازندگان امكانميدهد درايورهايي را توليد كنند كه لايه HAL را به سختافزار پيوند دهد. اين كار باعث ميشود برنامههاي كاربردي Direct 3D بدون اينكه براي نوع خاصي از قطعه سختافزاري نوشته شده باشد، از ويژگيهاي بخشهاي خاص آن قطعه سختافزاري بهرهببرد. در شكل يك چگونگي ارتباط لايه HAL با سختافزار و نرمافزارهاي مرتبط نشان داده شده است. منبع:انجمن مهندسی کامپیوتر