نگاهی کامل به برترینهای API گرافیکی
![API گرافیکی](https://rahaco.net/mag/wp-content/uploads/2020/10/API-گرافیکی.png)
برترینهای API گرافیکی
رابط برنامه نویسی نرم افزار یا API (Application Programming Interface) یک پروتکل ارتباطی میان قسمت های مختلف یک برنامه کامپیوتری است.
یک API ممکن است برای یک سیستم مبتنی بر وب، سیستم عامل، سیستم پایگاه داده ، سخت افزار رایانه یا کتابخانه نرم افزار باشد.
رابط برنامهنویسی نرم افزارهای گرافیکی یا API گرافیکی، ابزاری مهم جهت تعامل بین نرمافزار، درایورها و سختافزار گرافیکی است.
در این مطلب شما را با تعدادی از مشهورترین API گرافیکی آشنا خواهیم کرد.
در دنیای کامپیوترهای امروزی، تکنولوژیهای سهبعدی به پیشرفت باورنکردنی دست یافته اند.
میتوان مدعی بود، هیچ مفهومی نیست که تخیلات انسان توانایی تصور کردنش را داشته باشد، اما این تکنولوژیها از عهده تصویرسازی آن برنیایند.
ابزارهای مدلینگ سهبعدی آمدهاند تا ایدهها یا تخیلات ما را به روشهایی کاربردی برای سینما، انیمیشن، بازیهای ویدیویی و معماری تبدیل کنند.
برای این منظور، نرمافزارهای فراوانی در دسترس هستند و هر کاربر براساس سلیقه شخصی و کاربری، بهترین را انتخاب میکند.
همچنین روزبهروز نرمافزارهای گرافیکی و رندرینگ سهبعدی محبوبتر میشوند مخصوصا برای بازیهای جذاب ویدئویی.
از آنجا که API گرافیکی ابزاری است که اختصاصا سادهسازی فرایند ساخت تصاویر سهبعدی را انجام میدهد، بسیار اهمیت دارد.
اما API گرافیکی چه تعریفی دارد.
رابط برنامهنویسی گرافیکی یا API گرافیکی ابزاری است که فرایند ساخت گرافیک را در تمامی قسمتهای کامپیوتر، آسان میکند.
استفاده از API گرافیکی برای تولیدکنندگان سختافزارهای گرافیک کامپیوتر، یک ضرورت محسوب میشود.
زیرا برنامهنویسها با وجود اینکه نیاز به استفاده مستقیم از سختافزارهای ویژهای مثل کارتهای گرافیک دارند، باید به این سختافزارها دسترسی مجازی هم داشته باشند.
اما قبل از معرفی و مقایسه مطرحترین APIهای گرافیکی موجود، لازم است با مفهوم دیگری با عنوان lower-level graphics API، بیشتر آشنا شویم.
شاید با ترجمه تحتالفظی lower-level این سوءتفاهم ایجاد شود که چرا بهترینهای API گرافیکی موجود، در دستهبندی lower-level یا سطح پایین قرار گرفتهاند؟
برای درک بهتر این طبقهبندی، تصویر زیر را مشاهده کنید.
این تصویر، فرآیند پیشرفت ابزارهای گرافیک کامپیوتری را طی سالیان گذشته نشان میدهد.
اولین ردیف
در تصویر مربوط به دوران کنسولهای اولیه مانند آتاری و Commodore64 که گرافیکی بسیار ساده و ابتدایی داشتهاند.
در این کنسولها نرمافزار (مستطیل سبز) بهطور مستقیم با سختافزار گرافیکی مرتبط بوده اند.
ردیف دوم
نشاندهنده این است که با گذر زمان، سختافزارها و نرمافزارها، پیچیدهتر شدهاند. سیستم عاملها از دسترسی مستقیم آنها با یکدیگر جلوگیری میکنند چراکه، نیاز بوده تا نرمافزار، محدود به دستگاه خاصی نباشد.
باید بتواند با طیف گستردهتری از سختافزارهای موجود در بازار، سازگاری داشته باشد. به همین دلیل، استانداردهای جدیدی تعریف شدند و درایورها (مستطیل قرمز) بوجود آمدند.
رابط API گرافیکی هم مانند سایر رابطهایکاربری، ابزاری برای برقراری ارتباط، استانداردسازی و ثبت عملکردهای نرمافزار است.
کار درایورها این است که موارد فوق را به دستوراتی که برای سختافزار قابل درک باشد، ترجمه کنند.
ردیف سوم
میبینید که با پیچیدهتر شدن بازیها، دیگر امکان بازخوانی مستقیم API گرافیکی از کدهای منطقی بازی وجود نداشت. به همین دلیل لایه دیگری با نام موتور بازی یا game engine (مستطیل زرد) ایجاد شد.
وجود چنین لایهای از این جهت ضروری بوده است که تولید موضوعات گرافیکی با سطح بالادر بخش گرافیکی API، تنها با کمک بهکارگیری فرمانهایی با سطح پایین امکانپذیر است.
ردیف چهارم
بیانگر روش کارکرد بازیهای مرسوم امروزی است. همانطور که میبینید، با پیچیدهتر شدن بازیها، موتورهای بازی نیز پیچیدهتر و گرانتر شدهاند.
به همین دلیل اکثر سازندگان بازی، ترجیح میدهند بهجای معماری موتور بازی اختصاصی از موتورهای بازی موجود مثل Unity و Unreal استفاده کنند.
با این کار سازندگان میتوانند تمرکز اصلی خود را بر طراحی بازی قرار دهند. در تصویر میبینید که درایورها نیز به همین ترتیب بزرگتر و پیچیدهتر شدهاند.
درایورها حاوی هزاران هزار کد هستند. چراکه، باید API گرافیکی را بهکار بگیرند و کارتهای گرافیک یا GPU را مدیریت کنند.
ردیف پنجم
درواقع نمایانگر نسل نوین APIهای گرافیکی است. همانطور که میبینید درایورها کمحجمتر و موتورهای بازی بزرگتر و پیچیدهتر شدهاند.
بنابراین API گرافیکی با سطح پایین بهمعنای پایینتر بودن کیفیت یا ضعیفتر بودن آن نیست.
درواقع به این معنا است که در سری جدید، تمام وظایف به ابزارهای خودکار مثل درایورها محول نمیشود.
این لایههای بالاتر (مثل GPU) هستند که مسئولیت مدیریت و پردازش گرافیکی را به عهده دارند و به همین دلیل، درایورها سادهتر و کوچکتر شدهاند.
حالا که با مفهوم API گرافیکی سطح پایین یا low-level آشنا شدیم، با چند API گرافیکی مطرح و پیشرو آشنا شویم.
مایکروسافت دایرکت ایکس ۱۲
نام نسخه | شماره | تاریخ معرفی | توضیحات |
---|---|---|---|
DirectX 12 | 10.00.10240.16384 | جولای۲۰۱۵ | Windows 10, Xbox One |
DirectX 12 | 10.00.15063.0000 | مارس ۲۰۱۷ | Windows 10, Depth Bounds Testing and Programmable MSAA added |
DirectX 12 | 10.00.17763.0001 | اکتبر ۲۰۱۸ | Windows 10, DirectX Raytracing support added |
DirectX 12 | 10.00.18362.0116 | مه ۲۰۱۹ | Windows 10, Variable Rate Shading (VRS) support added |
ابزار DirectX، رابط گرافیکی پلتفرم مایکروسافت است.
ابزار DirectX، رابط گرافیکی پلتفرم مایکروسافت است.
این API گرافیکی جهت مدیریت وظایف مربوط به نرمافزارهای چندرسانهای و بخصوص بهبود عملکرد بازی و ویدئو طراحی شد.
در ابتدا کلیه زیرشاخههای این API گرافیکی با واژه Direct آغاز میشدند مانند Direct3D، DirectSound و… که سرانجام کل مجموعه باعنوان DirectX نامگذاری شد.
بعدها مایکروسافت، کنسول بازی اختصاصی خود را تحت عنوان Xbox روانه بازار کرد که حرف X آن ریشه در همین DirectX دارد.
اولین نسخه DirectX در سال ۲۰۰۲ و بانام DirectX 9 بههمراه ویندوز ۹۸ بهبازار آمد.
جدیدترین نسخه آن یعنی DirectX 12 در سال ۲۰۱۴ رونمایی و در سال ۲۰۱۵ بههمراه ویندوز ۱۰ بهطور رسمی معرفی شد.
رابط DirectX 12 توسط یک آداپتور چندگانه خاص، پشتیبانی میشود و سازندگان میتوانند بهطور همزمان از چند GPU روی یک سیستم استفاده کنند.
استفاده همزمان از چند GPU پیش از این تحت انحصار دو محصول از NVIDIA و AMD با نامهای AMD CrossFireX و NVIDIA SLI بود.
رابط DirectX 12 از تمامیGPUهای Fermi (و محصولات جدیدتر) شرکت انویدیا، چیپهای مبتنیبر GCN شرکت AMD و همینطور Hasswell و پردازندههای جدید اینتل پشتیبانی میکند.
بازی ویدیویی Ashes of the Singularity برای اولین بار از DirectX 12 استفاده کرد. مایکروسافت بهتازگی DirectX 12 را برای ویندوز ۷ نیز معرفی کرد.
بهدلیل تفاوت کامپیوتر و Xbox ، تبادل مستقیم کدهای DirectX 12 روی این پلتفرم ها وجود ندارد. با این وجود مایکروسافت، کنسولهای Xbox را به این API گرافیکی مجهز کرده است.
رابط openGL
یکی از انواع API گرافیکی از نوع Open GL
نسخه | تاریخ معرفی | مشخصات |
---|---|---|
4.0 | مارس ۲۰۱۰ | GLSL 4.00, Tessellation on GPU, shaders with 64-bit precision |
4.1 | جولای۲۰۱۰ | GLSL 4.10, Developer-friendly debug outputs, compatibility with OpenGL ES 2.0 |
4.2 | اوت۲۰۱۲ | GLSL 4.20, Shaders with atomic counters, draw transform feedback instanced, shader packing, performance improvements |
4.3 | اوت۲۰۱۲ | GLSL 4.30, Compute shaders leveraging GPU parallelism, shader storage buffer objects, high-quality ETC2/EAC texture compression, increased memory security, a multi-application robustness extension, compatibility with OpenGL ES 3.0 |
4.4 | جولای۲۰۱۳ | GLSL 4.40, Buffer Placement Control, Efficient Asynchronous Queries, Shader Variable Layout, Efficient Multiple Object Binding, Streamlined Porting of Direct3D applications, Bindless Texture Extension, Sparse Texture Extension |
4.5 | اوت۲۰۱۴ | GLSL 4.50, Direct State Access (DSA), Flush Control, Robustness, OpenGL ES 3.1 API and shader compatibility, DX11 emulation features |
4.6 | جولای۲۰۱۷ | GLSL 4.60, More efficient geometry processing and shader execution, more information, no error context, polygon offset clamp, SPIR-V, anisotropic filterin |
درواقع openGL یا Open Graphics Library، یک رابط برنامهنویسی گرافیکی چندزبانه (cross-language) و چندسکویی (cross-platform) است.
این رابط بهزبان C نوشته شده و از آن برای رندرینگ گرافیکی دوبعدی و سهبعدی استفاده میشود.
شرکت Silicon Graphics برای اولینباردر سال ۱۹۹۱ این API را طراحی کرد.
در سال ۱۹۹۲ بهبازار آمد و کاربردگستردهای در زمینههای مختلف مانند نقشهکشی با کامپیوتر، واقعیت مجازی، تجسم علمی و اطلاعات، شبیهسازی پرواز و بازیهای ویدیویی داشته است.
از سال ۲۰۰۶ به بعد، کنسرسیوم غیرانتفاعی تکنولوژی یعنی Khronos Group اداره OpenGL را به عهده گرفت.
جدیدترین سری این API که 4.6 OpenGL نام دارد در ژوئیه سال ۲۰۱۷ معرفی شد. در جدول زیر تاریخ معرفی و مشخصات ۷ نسخه آخر (نسخه ۴ به بعد) OpenGL را مشاهده میکنید.
رابط Vulkan
API گرافیکی Vulkan
رابط Vulkan یک API گرافیکی کمهزینه و چندسکویی است که برای کاربردهای گرافیکی مانند بازی های ویدیویی و رسانههای اجتماعی را در تمام پلتفرمها، استفاده میشود.
هدف رابط Vulkan نیز مانند سایر APIهای گرافیکی مثل DirectX و OpenGL، ارائه بالاترین کارایی ممکن را از تعادل بین GPU و CPU به کاربران است.
اما نقطه تمایز Vulkan این است که میتواند رندرینگ گرافیکهای دوبعدی را انجام دهد.
بهعلاوه با وجود تقسیم کار بهینه بین CPUهای چندهستهای، در مقایسه با OpenGL و DirectX 11 ، مصرف برق کمتری دارد.
زمانیکه برای اولینبار این API معرفی شد، بسیاری Vulkan را نسل بعدی یا OpenGL را فاتح آینده تصور میکردند. اما با رونمایی از آن، پیشبینی درست از آب درنیامدند.
برای مشاهده تفاوتهای عملکرد این دو API گرافیکی به جدول زیر دقت کنید.
بهمنظور استاندارد سازی و ارتقاء تکنولوژی APIهای گرافیکی سطح پایین دو کمپانی Khronos و AMD، به یک توافق رسیدند.
به این شکل که کمپلانی AMD اجزاء ساخت API گرافیکی اختصاصی خود یعنی Mantle را در اختیار Khronos قرار دهد. در حقیقت ساخت Vulkan الهام گرفته از اجزاء Mantle کمپانی AMD است.
جدیدترین ویرایش رابط Vulkan ، یعنی نسخه 1.1.125 در تاریخ ۱۴ اکتبر ۲۰۱۹ به بازار آمد.
اندروید بهطور کامل این API را پشتیبانی میکند اما با حمایت اپل از API اختصاصی خود Metal، امکان پشتیبانی از سیستمهای عامل IOS و Mac را ندارد.
البته کتابخانههای متنبازی در بازار موجود هستند که این مسئله را ممکن میکنند. جدول زیر سازگاری Vulkan با شناخته شدهترین محصولات گرافیکی را بررسی میکند.
OpenGL | Vulkan |
---|---|
تنها یک ماشین global state دارد | مبتنی بر شیء است و فاقد global state |
state تنها به یک محتوا منحصر میشود | مفهوم تمامی stateها در بافر دستورها قرار گرفته است |
عملکردها فقط بهصورت ترتیبی انجام میشوند | قابلیت برنامهنویسی چندرشتهای دارد |
حافظه و همگامسازی GPU معمولا مخفی است | کنترل و مدیریت همگامسازی و حافظه مقدور است |
بررسی خطا بهصورت مداوم انجام میشود | درایورها حین اجرا، بررسی خطا انجام نمیدهند. در عوض برای سازندگان، یک لایه اعتبارسنجی در نظر گرفته شده است. |
رابط Mantle
رابط Mantle یک API گرافیکی ارزان برای رندر گرفتن برای بازیهای ویدیویی سهبعدی است.
کمپانی AMD با مشارکت یک کمپانی سازنده بازیهای ویدیویی بهنام DICE اولین بار در سال ۲۰۱۳ این APIگرافیکی را طراحی کرد.
هدف از این مشارکت رقابت با Direct3D و OpenGL در کامپیوترهای خانگی بود. هرچند Mantle از Xbox One و PlayStation 4 نیز پشتیبانی میکند.
البته در سال ۲۰۱۵ ساخت Mantle تعلیق و در سال ۲۰۱۹ رسما متوقف شد و بجای آن API گرافیکی Vulkan داد.
از قابلیتهای Mantle میتوان به کاهش مواردی که پردازنده شدیدا تحت فشار است، اشاره کرد.
طراحی این API گرافیکی طوری انجام شده است که بازیها و نرمافزارها بتوانند به شکل بهینهتری از GPU استفاده کنند.
درواقع Mantle با کمکردن هزینه اعتبارسنجی API و سنجش بهینهتر پردازندههای چندهستهای، در حقیقت گرههای ایجاد شده در پردازنده را از بین میبرد.
Mantle از GPU و APUهای بازی زیر پشتیبانی میکند:
نوع محصول | نام محصول | سری | توضیحات |
---|---|---|---|
GPU | Radeon | HD 7000 | - |
Radeon | HD 8000 | - | |
AMD Radeon | RX 200 | R7 و R9 | |
APU | AMD A10 | 7000 | all Steamroller-based "Kaveri" |
AMD A8 | 7000 | ||
AMD E1 | 2000 | all Jaguar-based "Kabini" and "Temash" | |
AMD E2 | 3000 | ||
AMD A4 | 1200 | ||
AMD A4 | 1350 | ||
AMD A4 | 5000 | ||
AMD A6 | 1450 | ||
AMD A6 | 5200 | ||
AMD sempron | 2650 | ||
AMD sempron | 3850 | ||
AMD Athlon | 5150 | ||
AMD Athlon | 5350 | ||
AMD E1 | Micro-6200T | all Puma-based "Beema" and "Mullins" | |
AMD A4 | Micro-6400T | ||
AMD A10 | Micro-6700T | ||
AMD E1 | 6010 | ||
AMD E2 | 6110 | ||
AMD E4 | 6210 | ||
AMD E6 | 6310 |
رابط Metal
این API گرافیکی ، یک رابط گرافیکی ارزان و سطح پایین تحت لیسانس کمپانی اپل است که اولینبار در IOS 8 بهکار گرفته شد.
عملکرد Metal را درحقیقت میتوان با ترکیب دو رابط OpenGL و OpenCL با یکدیگر در یک API گرافیکی ، مشابه دانست.
هدف از طراحی این API شبیهسازی APIهای سایر پلتفرمها مثل Vulkan و DirectX 12 برای سیستمعامل IOS، Mac و tvOS بوده است.
رابط Metal یک APIگرافیکی شیءگرا است که با زبانهای سوئیفت و Objective-C اجرا میشود اما مبتنی بر زبان ++C نوشته شده است.
اولینبار اپل در چیپ A7 از این API استفاده کرد و از سال ۲۰۱۴، Metal در تمامی دستگاههای iOS و از سال ۲۰۱۵ روی سیستمعامل Mac نیز نصب شده است.
در سال ۲۰۱۷ دومین نسخه Metal معرفی شد که از سیستمهای عامل macOS High Sierra، iOS 11 و tvOS 11 پشتیبانی میکند.
در حقیقت رابط گرافیکی Metal 2 در مقایسه با Metal، تفاوت زیادی ندارد و از همان سختافزار بهره میبرد اما کارایی بالاتر و بهینه تری دارد.
رابطMetal در مقایسه با OpenGL به دلایل مختلف، کارایی بهتری دارد.
- محاسبه اولیه سایهسازیها (Shader) و اعتبار وضعیت از پیش تأیید شده
- همگامسازی آشکار بین GPU و CPU
- فضای حافظه اشتراکی بین GPU و CPU
- هزینههای کمتر درایور
- بهینهسازی قابلیت چند رشتهای بودن پردازندهها بهنحوی که هر رشته از پردازنده بهطور مجزا میتواند به GPU دستور ارسال کند.
موارد ذکر شده در حقیقت، میزان فعالیت پردازنده، برای انجام موفق دستورهای GPU را بهطور قابل ملاحظهای کم میکنند
این به افزایش کارایی آن منجر خواهد شد چرا که با کاهش میزان فعالیت، پردازنده میتواند سایر وظایف خود را بهتر و سریعتر انجام دهد.