نگاهی کامل به برترین‌های API گرافیکی

API گرافیکی

برترین‌های API گرافیکی

رابط برنامه­ نویسی نرم­ افزار یا API (Application Programming Interface) یک پروتکل ارتباطی میان قسمت­ های مختلف یک برنامه کامپیوتری است.
یک API ممکن است برای یک سیستم مبتنی بر وب، سیستم عامل، سیستم پایگاه داده ، سخت افزار رایانه یا کتابخانه نرم افزار باشد.
رابط برنامه‌نویسی نرم­ افزارهای گرافیکی یا API گرافیکی، ابزاری مهم جهت تعامل بین نرم‌افزار‌، درایور‌ها و سخت‌افزار گرافیکی است.
در این مطلب شما را با تعدادی از مشهورترین API گرافیکی آشنا خواهیم کرد.

در دنیای کامپیوتر­های امروزی، تکنولوژی‌های سه‌بعدی به پیشرفت باورنکردنی دست یافته ­اند.
می‎‌توان مدعی بود، هیچ مفهومی نیست که تخیلات انسان توانایی تصور کردنش را داشته باشد، اما این تکنولوژی‎‌ها از عهده تصویر‌سازی آن برنیایند.
ابزار‌های مدلینگ سه‌بعدی آمده‌اند تا ایده‌ها یا تخیلات ما را به روش­هایی کاربردی برای سینما، انیمیشن، بازی‌های ویدیویی و معماری تبدیل کنند.
برای این منظور، نرم‌افزار‌های فراوانی در دسترس هستند و هر کاربر براساس سلیقه شخصی و کاربری، بهترین را انتخاب می­‌کند.
همچنین روزبه‌روز نرم‌افزار‌های گرافیکی و رندرینگ سه‌بعدی محبوب­تر می‌شوند مخصوصا برای بازی­های جذاب ویدئویی.
از آنجا که API گرافیکی ابزاری است که اختصاصا ساده‌سازی فرایند ساخت تصاویر سه‌بعدی را انجام می­دهد، بسیار اهمیت دارد.

اما API گرافیکی چه تعریفی دارد.

رابط برنامه‌نویسی گرافیکی یا API گرافیکی ابزاری است که فرایند ساخت گرافیک را در تمامی قسمت‌های کامپیوتر، آسان می‌کند.
استفاده از API گرافیکی برای تولیدکنندگان سخت‌افزار‌های گرافیک کامپیوتر، یک ضرورت محسوب می­‌شود.
زیرا برنامه‌نویس‌ها با وجود اینکه نیاز به استفاده مستقیم از سخت‌افزارهای ویژه‌ای مثل کارت‌های گرافیک دارند، باید به این سخت‌افزار‌ها دسترسی مجازی هم داشته باشند.

اما قبل از معرفی و مقایسه مطرح‌ترین APIهای گرافیکی موجود، لازم است با مفهوم دیگری با عنوان lower-level graphics API، بیشتر آشنا شویم.
شاید با ترجمه تحت‌الفظی lower-level این سوء‌تفاهم ایجاد شود که چرا بهترین­های API‌‌ گرافیکی موجود، در دسته‌بندی lower-level یا سطح پایین قرار گرفته‌اند؟
برای درک بهتر این طبقه‌بندی، تصویر زیر را مشاهده کنید.

تعریف API گرافیکی

این تصویر، فرآیند پیشرفت ابزار‌های گرافیک کامپیوتری را طی سالیان گذشته نشان می‌دهد.

اولین ردیف

در تصویر مربوط به دوران کنسول‌های اولیه مانند آتاری و Commodore64 که گرافیکی بسیار ساده و ابتدایی داشته‌اند.
در این کنسول­‌ها نرم‌‌افزار (مستطیل سبز‌) به‌طور مستقیم با سخت‌افزار گرافیکی مرتبط بوده اند.

ردیف دوم

نشان­دهنده این است که با گذر زمان، سخت‌افزارها و نرم‌افزار‌ها، پیچیده‌تر شده‌اند. سیستم‌ عامل­‌ها از دسترسی مستقیم آن‌ها با یکدیگر جلوگیری می‌کنند چرا‌که، نیاز بوده تا نرم‌افزار، محدود به دستگاه خاصی نباشد.
باید بتواند با طیف گسترده‌تری از سخت‌افزار‌های موجود در بازار، سازگاری داشته باشد. به‌ همین دلیل، استانداردهای جدیدی تعریف شدند و درایور‌ها (مستطیل قرمز) بوجود آمدند.
رابط API گرافیکی هم مانند سایر رابط‌‌های‌کاربری، ابزاری برای برقراری ارتباط، استاندارد‌سازی و ثبت عملکرد‌های نرم‌افزار است.
کار درایورها این است که موارد فوق را به دستوراتی که برای سخت‌افزار قابل درک باشد، ترجمه ‌کنند.

 ردیف سوم

می‌بینید که با پیچیده‌تر شدن بازی‌ها، دیگر امکان بازخوانی مستقیم API گرافیکی از کد‌های منطقی بازی وجود نداشت. به‌ همین دلیل لایه دیگری با نام موتور بازی یا game engine (مستطیل زرد) ایجاد شد.
وجود چنین لایه‌ای از این جهت ضروری بوده است که تولید موضوعات گرافیکی با سطح بالادر بخش گرافیکی API، تنها با کمک به‌کار‌گیری فرمان‌هایی با سطح پایین امکان‌پذیر است.

ردیف چهارم

بیانگر روش کارکرد بازی‌های مرسوم امروزی است. همانطور که می­بینید، با پیچیده­تر شدن بازی‌ها، موتور‌های بازی نیز پیچیده‌تر و گران‌‌تر شده‌اند.
به همین دلیل اکثر سازندگان بازی، ترجیح می‌دهند به‌جای معماری موتور بازی اختصاصی از موتور‌های بازی موجود مثل Unity و Unreal استفاده کنند.
با این کار سازندگان می­توانند تمرکز اصلی خود را بر طراحی بازی قرار دهند. در تصویر می­بینید که درایور‌ها نیز به همین ترتیب بزرگ‌تر و پیچیده‌تر شده‌اند.
درایور‌ها حاوی هزاران هزار کد هستند. چراکه، باید API گرافیکی را به‌کار بگیرند و کارت‌های گرافیک یا GPU را مدیریت کنند.

ردیف پنجم

درواقع نمایانگر نسل نوین APIهای گرافیکی است. همان‌طور که می‌بینید درایور‌ها کم‌حجم‌تر و موتور‌های بازی بزرگتر و پیچیده‌تر شده‌اند.
بنابر‌این API گرافیکی با سطح پایین به‌معنای پایین‌تر بودن کیفیت یا ضعیف‌تر بودن آن نیست.
درواقع به ‌این معنا است که در سری جدید، تمام وظایف به ابزار‌های خودکار مثل درایور‌ها محول نمی‌شود.
این لایه‌های بالاتر (مثل GPU) هستند که مسئولیت مدیریت و پردازش گرافیکی را به عهده دارند و به همین دلیل، درایور‌ها ساده‎‌تر و کوچک‌تر شده‌اند.
حالا که با مفهوم API گرافیکی سطح پایین یا low-level آشنا شدیم، با چند API گرافیکی مطرح و پیشرو آشنا شویم.

مایکروسافت دایرکت ایکس ۱۲

نام نسخهشمارهتاریخ معرفیتوضیحات
DirectX 1210.00.10240.16384جولای۲۰۱۵Windows 10, Xbox One
DirectX 1210.00.15063.0000مارس ۲۰۱۷Windows 10, Depth Bounds Testing and Programmable MSAA added
DirectX 1210.00.17763.0001اکتبر ۲۰۱۸Windows 10, DirectX Raytracing support added
DirectX 1210.00.18362.0116مه ۲۰۱۹Windows 10, Variable Rate Shading (VRS) support added

DirectX

ابزار 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

رابط 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

رابط 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 با شناخته شده‌ترین محصولات گرافیکی را بررسی می‌کند.

OpenGLVulkan
تنها یک ماشین global state داردمبتنی بر شیء است و فاقد global state
state تنها به یک محتوا منحصر می‌شودمفهوم تمامی stateها در بافر دستورها قرار گرفته است
عملکرد‌ها فقط به‌صورت ترتیبی انجام می‌شوندقابلیت برنامه‌نویسی چند‌رشته‌ای دارد
حافظه و همگام‌سازی GPU معمولا مخفی استکنترل و مدیریت همگام‌سازی و حافظه مقدور است
بررسی خطا به‌صورت مداوم انجام می‌شوددرایور‌ها حین اجرا، بررسی خطا انجام نمی‌دهند.

در عوض برای سازندگان، یک لایه اعتبار‌سنجی در نظر گرفته شده است.

رابط Mantle

رابط Mantle

 

رابط Mantle یک API گرافیکی ارزان برای رندر گرفتن برای بازی‌های ویدیویی سه‌بعدی است.
کمپانی AMD با مشارکت یک کمپانی سازنده بازی‌های ویدیویی به‌نام DICE اولین ‌بار در سال ۲۰۱۳ این APIگرافیکی را طراحی کرد.
هدف از این مشارکت رقابت با Direct3D و OpenGL در کامپیوترهای خانگی بود. هرچند Mantle از Xbox One و PlayStation 4 نیز پشتیبانی می‌کند.
البته در سال ۲۰۱۵ ساخت Mantle تعلیق و در سال ۲۰۱۹ رسما متوقف شد و بجای آن API گرافیکی Vulkan داد.

از قابلیت‌های Mantle می­توان به کاهش مواردی که پردازنده شدیدا تحت فشار است، اشاره کرد.
طراحی این API گرافیکی طوری انجام شده است که بازی‌ها و نرم‌افزار‌ها بتوانند به ‌شکل بهینه‌تری از GPU استفاده کنند.
درواقع Mantle با کم‌کردن هزینه اعتبارسنجی API  و سنجش بهینه‌تر پردازنده‌های چند‌هسته‌ای، در حقیقت گره­های ایجاد شده در پردازنده را از بین می‌برد.

Mantle از GPU و APUهای بازی زیر پشتیبانی می‌کند:

نوع محصولنام محصولسریتوضیحات
GPURadeonHD 7000-
RadeonHD 8000-
AMD RadeonRX 200R7 و R9
APUAMD A107000all Steamroller-based "Kaveri"
AMD A87000
AMD E12000all Jaguar-based "Kabini" and "Temash"
AMD E23000
AMD A41200
AMD A41350
AMD A45000
AMD A61450
AMD A65200
AMD sempron2650
AMD sempron3850
AMD Athlon 5150
AMD Athlon5350
AMD E1Micro-6200Tall Puma-based "Beema" and "Mullins"
AMD A4Micro-6400T
AMD A10Micro-6700T
AMD E16010
AMD E26110
AMD E46210
AMD E6 6310

رابط Metal

رابط 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 را به‌طور قابل ملاحظه‌­ای کم می‌کنند
    این به افزایش کارایی آن منجر خواهد شد چرا ‌که با کاهش میزان فعالیت، پردازنده می‌تواند سایر وظایف خود را بهتر و سریع‌تر انجام دهد.

دانلود pdf نگاهی کامل به برترین‌های API گرافیکی

5/5 - (2 امتیاز)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *