PDA

مشاهده نسخه کامل : چرا OpenGL از Directx شکست خورد؟



Trance
03-12-08, 21:43
OpenGLهیچگاه نتوانست از نسخه 7 directx فراتر برود و هنگامیکه directx9 به بازار اومد و بعد از نسخه 9.0c دیگر حرفی برای OpenGL نماند. و حالا که صحبت از نسخه 10 directx هست و همینطور 11 که احتمالا با ویندوز 7 عرضه میشود.. من در این مطلب قرار است مسائل این دو رقیب قدیمی را بشکافم. فقط قبل از اینکه بخوام بنویسم ایمیلهایی دریافت کردم که گفتن حتما بی طرف بنویس. من همیشه سعی کردم بی طرف بنویسم اگر مطلبی درباره مایکروسافت مینویسم هدف آموزش هست نه تعصب. متاسفانه کاربران لینوکس در بعضی مواقع تعصبی به قضیه نگاه میکنند تا واقعیت. تصویری را که در پائین مشاهده میکنید تفاوت بین دو نسخه direct 9.0c و direct 10 نشان میدهد. این تصویر توسط هر دو رندر شده و چنین نتیجه ای بدست آمده که با اینکه در تصویر میبینید تفاوت بین نسخه 9 و 10 زیاد است ولی نسخه 10 دربین بازی نویسان جا نیافتاد.

Only the registered members can see the link (Only the registered members can see the link)


این روزها همه جا صحبت directx هست برای بازی یا نرم افزارهای گرافیکی و کاربرانی که کمتر از 10 سال است به جمع کاربران کامپیوتر پیوستند بدرستی نمیدونند که 10 سال پیش جنگی بین دو رقیب یعنی Microsoft و Silicon Graphics بود. این جنگ بیشتر برای تسلط روی بازار API های 3 بعدی بود و هر دو شرکت بدجوری تلاش میکردند که که بازار را بدست خود بگیرند در آن موقع مایکروسافت پشتیبانی مالی قوی داشت و شرکت SGI هم تخصص و اعتبار خود را در حوزه Real-time 3d به همه نشان داده بود. هنگامیکه این جنگ در بین این دو وجود داشت SGI. موفق شد مشهورترین بازی نویس زمان را تصاحب کنه که نامش هست John carmack.


Only the registered members can see the link (Only the registered members can see the link)

تا حدودی بخاطر موفقیت موتور Quake پشتیبانی جدی از OpenGL به اندازه کافی اهمیت پیدا کرد تا انگیزه تامین درایورهای کامل را در تولید کنندگان کارتهای 3d ایجاد کنه. همین ویژگی باعث شد که 3dfx یکی از مزایای برتریهای اولیه خود را بدست آورده ATI که هنوز با پشتیبانی خود از OpenGL درگیر بود را عقب بزند.
در همین حال مایکروسافت کار خودش را از اول شروع کرده بود و منحنی یادگیری API این شرکت طولانی بنظر میرسید. خلاصه direct 3D مایکروسافت اینترفیسی گیج کننده ای برای برنامه نویسان داشت ولی اینترفیس OpenGL واقعا بی نظیر بود. در آن زمان همه فکر میکردند که مایکروسافت هیچگاه به پای OpenGL نمیرسد و بزودی دلسر خواهد شد ولی یکی از شگفتیها این بود که با هربار ارائه نسخه جدید از direct 3D مایکروسافت یک پله به OpenGL نزدیک میشد و واقعا باید اعتراف کرد مایکروسافت برای اینکه بتونه بازار API را بدست بگیره خیلی تلاش کرد. باید اعتراف کرد که درسته که مایکروسافت اینترفیس متفاوتی داشت ولی هر نسخه از direct 3D آن کپی از قابلیتهای OpenGL بود این قضیه ادامه داشت تا اینکه بالاخره مایکروسافت توانست یک API جدید با ویژگی جدید خلق کنه و اون direct 8 بود که با بود. در اینجا نه تنها نسخه direct 8 کمک بزرگی کرد بلکه پشتیبانی مالی اون هم کمک بسیاری بود. SGI که منبع درآمد آن فروش ایستگاهای کاری 3D گرانقیمت بود ، در موقعیت ناجوری قرار گرفت و پیش بینی میشد که انفجار کارتهای 3D برای بازیکنان باعث بشه تا ATI و Nvidia برای حرکت به سمت بازار حرفه ای آنهم با قیمت های فوق العاده پائینی که SGI از عهده آن برنمی آمد ناکام بمونه. توسعه OpenGL هم بخاطر اختلافات جدی تر در بین طرفدارانش با مانع روبرو شد. ARB گروه مسئول تصویب توسعه API از شرکتهای بسیار متفاوت و درواقع رقیبی تشکیل شده بود، دستیابی به یک توافق درباره ویژگی های که باید به این API اضافه میشدند بسیار دشوار بود. ولی مایکروسافت منحصرا با ATI و Nvidia کار میکرد و در صورت عدم توافق بر روی یک موضوع ، از وزنه خود برای اعمال یک تصمیم گیری نهائی استفاده میکرد.
با ارائه directx 9 پیروزی قطعی مال مایکروسافت شد و توانست API خودش را با ابهت کامل به برنامه نویسان تحمیل کنه. تنها john carmack و افرادی که قابلیت انتقال Portability اصرار داشتند به OpenGL وفادار ماندند. ولی بازهم تعداد آنها کاهش پیدا کرد. البته برای خیز گرفتن مجدد OpenGL سرنوشت یاری کرد و اونهم مرورگرهای وب بود و همینطور گروه khronos بیش از دو سال کار OpenGL را دست گرفت که امیدی بر برپایی آن میداد. بالاخره khronos رسما OpenGL 3 را معرفی کرد و قرار بود که این API جلوی نسخه 10 directx مایکروسافت بایسته و بازار نسل بعدی direct یعنی نسخه 11 را خراب کنه ولی متاسفانه کارها طبق برنامه پیش نرفت و directx 10 واقعا قوی بود. تصویر زیر


Only the registered members can see the link (Only the registered members can see the link)
Only the registered members can see the link (Only the registered members can see the link)
چرا انقدر directx قدرتمند شده که قابلیت تکامل یافته 3Dlabs در OpenGL 3 هم حریف directx نتوانست بشه. برای اینکه این مطلب را متوجه شوید باید مجددا به سال 2002 بریم که OpenGL درحال از دست دادن بازار بود تا اون موقع با اینکه اینترفیس مایکروسافت فرق میکرد با OpenGL ولی هر قابلیت که در آن نحفته بود کپی از OpenGL بود. تا اینکه SGI شکست خورد و مایکروسافت هم با ارائه directx 9 پشتیبانی از یک زبان سایه زنی سطح بالا یعنی HLSL را معرفی کرد که OpenGL چیزی برای مقایسه با اون نداشت. اما یک توضیح کوچک راجع به SGI و تولید کنندگان کارت بدم که OpenGL از IRIS GL سرچشمه گرفته بود این API که از اول توسط SGI برای نمایش عملکرد سخت افزارهایش مورد استفاده قرار میگیرفت. برای یک مدت طولانی ati و nvidia هم از مدل راندوی sgi پیروی کردند و این به این معنی بود که OpenGL برای تولید کنندگان کارتهای گرافیک بسیار مناسب هست ولی مایکروسافت با ارائه shader ها همه چیز را به هم ریخت و GPU ها از حالت سنتی شون خارج شدند.

در آن موقع یک شرکت به نان 3dlabs به یک تکامل تازه در openGL جهت اعمال برروی gpu های جدید پی برد. البته چیز عجیبی هم نبود چون 3dlabs کارتهای بازی خودش را پس از Permedia 2 کنار گذاشت تا بربازار حرفه ای متمرکز بشه ولی باز هم OpenGL یک استاندارد واقعی حساب میشد که 3dlabs قصد داشت اون و به سمت دوره ای تازه ببره که اولین مورد اون یک زبان shader سطح بالا به نام GLSL بود و این شرکت میخواست که این API را بازنگری کنه. بیشتر ویژگی های openGL روی کارتهای سه بعدی مدرن کارایی نداشت اما نیاز به سازگاری با نسخه های قبلی باعث میشد که تولید کنندگان آنرا پشتیبانی کنند. این قضیه باعث شد کار خیلی به هم گره بخوره یعنی نوشتن درایورها پیچیده میشد و API جدید برای برنامه نویسان گیج کننده میشد. بنابراین 3dlabs خواستار مشخص شدن یک زیر مجموعه از عملکرد ها بود که اجرای کارآمد توسط GPU را تضمین میکردند و در عین حال ، ویژگی های اضافی یا منسوخ شده نیز باید حذف بشوند. این زیر مجموعه ، OpenGL 2.0 Pure نام گرفت. و برای برنامه نویسان نرم افزاری کاملا کاربردی و جدید در نظر گرفته شده بود. برای حفظ سازگاری ، مجموعه کامل ضمائم openGL 1x در openGL 2.0 قابل دسترس بود. متاسفانه پس از مباحث بی پایان در داخل ARB این طرح با عدم پذیرش مواجه شد و زمانیکه openGL نهایتا در دسترس قرار گرفت، تنها قابلیت پشتیبانی از GLSL به این API اضافه شده بود. تمام پیشنهادات دیگر 3dlabs به فراموشی رفتند و openGL همچنان از API مایکروسافت عقب ماند.
البته این مطلب هنوز که هنوز هست ادامه داره و شرکتها سعی کردند که openGL را حفظ کنند که مبادا به تاریخ بپیونده و یا اینکه اصلا فراموش بشه.


microsoftwindows.blogfa