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

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

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

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

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

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

روند پیشرفت API گرافیکی رایانه‌ای را طی سالیان گذشته

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

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

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

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

ردیف پنجم درواقع نمایانگر نسل نوین APIهای گرافیکی است.

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

حالا که با مفهوم API گرافیکی سطح پایین یا low-level آشنا شدیم، با چند API گرافیکی مطرح و پیشرو آشنا شویم.

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

 

 

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

 

نوعی از API گرافیکی

API گرافیکی DirectX 12

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

یکی از انواع API گرافیکی از نوع Open GL

نسخهتاریخ معرفیمشخصات
۴.۰مارس ۲۰۱۰GLSL 4.00, Tessellation on GPU, shaders with 64-bit precision
۴.۱جولای۲۰۱۰GLSL 4.10, Developer-friendly debug outputs, compatibility with OpenGL ES 2.0
۴.۲اوت۲۰۱۱GLSL 4.20, Shaders with atomic counters, draw transform feedback instanced, shader packing, performance improvements
۴.۳اوت۲۰۱۲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
۴.۴جولای۲۰۱۳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
۴.۵اوت۲۰۱۴GLSL 4.50, Direct State Access (DSA), Flush Control, Robustness, OpenGL ES 3.1 API and shader compatibility, DX11 emulation features
۴.۶جولای۲۰۱۷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 که ۴.۶ OpenGL نام دارد در ژوئیه سال ۲۰۱۷ معرفی شد.
در جدول زیر تاریخ معرفی و مشخصات ۷ نسخه آخر (نسخه ۴ به بعد) OpenGL را مشاهده می‌کنید.

رابط Vulkan

API گرافیکی

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 ، یعنی نسخه ۱.۱.۱۲۵ در تاریخ ۱۴ اکتبر ۲۰۱۹ به بازار آمد.
اندروید به­طور کامل این API را پشتیبانی می‌کند اما با حمایت اپل از API اختصاصی خود Metal، امکان پشتیبانی از سیستم‌های عامل‌ IOS و Mac را ندارد.
البته کتابخانه‌های متن‌بازی در بازار موجود هستند که این مسئله را ممکن می‌کنند.

جدول زیر سازگاری Vulkan با شناخته شده‌ترین محصولات گرافیکی را بررسی می‌کند.

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

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

رابط Mantle

API گرافیکی Mantle

API گرافیکی نوع Mantle

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

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

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

رابط METAL

API گرافیکی Metal

API گرافیکی نوع Metal

 

 

نوع محصولنام محصولسریتوضیحات
GPURadeonHD 7000
RadeonHD 8000
AMD RadeonRX 200R7 و R9
APUAMD A10۷۰۰۰all Steamroller-based “Kaveri”
AMD A8۷۰۰۰
AMD E1۲۰۰۰all Jaguar-based “Kabini” and “Temash”
AMD E2۳۰۰۰
AMD A4۱۲۰۰
AMD A4۱۳۵۰
AMD A4۵۰۰۰
AMD A6۱۴۵۰
AMD A6۵۲۰۰
AMD sempron۲۶۵۰
AMD sempron۳۸۵۰
AMD Athlon۵۱۵۰
AMD Athlon۵۳۵۰
AMD E1Micro-6200Tall Puma-based “Beema” and “Mullins”
AMD A4Micro-6400T
AMD A10Micro-6700T
AMD E1۶۰۱۰
AMD E2۶۱۱۰
AMD A4۶۲۱۰
AMD A6۶۳۱۰

 

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