Müasir qrafik API-lər. Apple Metal API: hiylə nədir?

WWDC 2014-də hamımızı sürpriz gözləyirdi: Metal adlı yeni 3D qrafika API-nin elanı. Lakin bu dəfə biz OpenGL ES-in üstündə yeni yüksək səviyyəli API ilə deyil (Scene Kit-də olduğu kimi), lakin OpenGL-i əvəz edə biləcək göstərmə və hesablama üçün yeni aşağı səviyyəli API ilə məşğul oluruq. oyunlarda. By Apple görə Metal OpenGL ES-dən 10 dəfəyə qədər sürətli ola bilər (daha doğrusu - o, heç-heçə çağırışları yarada bilər [ zənglər çəkmək; məlumatların GPU-ya ötürülməsi] 10 dəfə sürətlidir) və yalnız prosessorlu iOS cihazlarında mövcuddur son nəsil A7.

Bu elan OpenGL-i əvəz etməli (ya da etməməli - kim bilir) yeni qrafik API-lərə ehtiyac haqqında yeni müzakirə və mübahisə dalğasına səbəb oldu. Diqqətinizə çatdırdığımız yazı bu müzakirədə iştirak etmək niyyətində deyil - onun məqsədi Metalın əvəzedicisi olan OpenGL ES-dən nə ilə fərqləndiyini izah etməkdir. Metal API haqqında nəyin xüsusi olduğunu (və ya əksinə, xüsusi bir şey olmadığını) başa düşmək üçün qrafik API və GPU-nun başlığı altına bir az baxmaq lazımdır.

GPU və Qrafik API necə işləyir
Sadə bir oxucu güman edə bilər ki, API çağırışı birbaşa GPU-da nəsə edir və ya GPU-da nəyinsə baş verməsinə imkan verir. Daha sadəlövh bir oxucu güman edərdi ki, API nəticə qaytardıqda GPU bu çağırışı emal edir. Bu ifadələrin hər ikisi reallıqdan uzaqdır. Əgər sürücü verildiyi anda göstərmə əmrlərini yerinə yetirsəydi və nəticəni API çağırışına qaytarmazdan əvvəl göstərmə prosesinin tamamlanmasını gözləsəydi, o zaman prosessorlardan biri həmişə bloklanacağından nə CPU, nə də GPU səmərəli işləyə bilməzdi. başqasının xeyrinə.

Sadə bir təkmilləşdirmə üçün GPU əməliyyatı bu proses asinxron şəkildə həyata keçirilməlidir; onda GPU CPU-nu blok etməyəcək və API zəngləri demək olar ki, dərhal nəticələri qaytaracaq. Bu halda, GPU 100% istifadə olunmaya bilər, çünki o, CPU-dan yeni render zənglərini (= kadrın başlanğıcını) gözləməli ola bilər, digər əmrlərə edilən zənglər isə əvvəlkilərin tamamlanmasını gözləyəcək. Bu, əksər qrafik sürücülərinin hər şeyi toplamasının səbəbi olur zənglər çəkmək(və GPU-da yerinə yetirilməli olan digər tapşırıqlar - məsələn, vəziyyətlərin dəyişdirilməsi) GPU-ya göndərməzdən əvvəl bütün çərçivəni göstərmək üçün. Bu buferlənmiş əmrlər, GPU-nun mümkün qədər səmərəli istifadə edilməsini təmin edərək, növbəti çərçivəni çəkmək əmri alındıqdan sonra geri göndəriləcək. Əlbəttə ki, bu, bir gecikmə çərçivəsini əlavə edəcək: CPU cari çərçivə üçün iş yaratarkən, əvvəlki çərçivə GPU-da göstəriləcəkdir. Əslində, birdən çox kadr bufer etmək və beləliklə daha yüksək kadr sürətlərinə nail olmaq mümkündür - daha çox gecikmə bahasına.

Bizim sadəlövh fərziyyəmizdəki başqa bir səhv, dövlət dəyişikliyi çağırışlarının nə etdiyini fərz etməkdir.

Beləliklə, biz pərdə arxasında baş verənlərlə bağlı ən azı iki vacib şeyi öyrəndik. əməkdaşlıq Müasir GPU-larla OpenGL: tələb olunarsa vəziyyətləri dəyişdirmək çətin ola bilər yeni kombinasiya dövlətlər və GPU-dakı bütün əməliyyatlar müəyyən müddətə təxirə salınacaq.

Tətbiqdə, GPU-da yerinə yetirilməsi lazım olan bir kadr üçün bir faktiki əmr axını yaradılır və hamısı birdən GPU-ya göndərilir (əslində, hər şey bir az daha mürəkkəbdir, amma hələ daha dərinə getməyək).

Müasir kompüter qrafikası boru kəmərinin necə işlədiyi haqqında daha çox Fabian Giesens-in bir sıra məqalələrində oxuya bilərsiniz - "Qrafika Boru Kəmərinə səyahət".

Digəri niyə edir proqram modeliüstünlükləri ola bilər
Artıq gördüyünüz kimi, proqramçıdan birbaşa baş verənləri gizlədən çoxlu sayda mürəkkəblik və hiyləgər fəndlər gizlənir (yəqin ki, qeyd etdiyimdən daha çoxu var). Onlardan bəziləri sadə tərtibatçının həyatını asanlaşdırır, digərləri onu sürücünü ələ keçirmək və ya yan tərəfə "qazmaq" yollarını axtarmağa məcbur edir. yan təsirlər API zəngləri işləyir.

Bu gün bəzi qrafik API-lər bu hiylələrin əksəriyyətini aradan qaldırmağa çalışır, gizlətdikləri "mürəkkəbliyi" ortaya qoyur və bəzi hallarda hər şeyi başa düşməyi proqramın öhdəsinə buraxır. əlaqəli problemlər. PS3 qrafika API-si bu istiqamətdə getdi, AMD də öz Mantle ilə gedir və qarşıdan gələn DirectX 12 və Apple Metal də oraya gedir.

Nə dəyişdi?
Komanda buferləri artıq açıqdır və proqram bu buferləri doldurmalı və onları GPI-də verilmiş ardıcıllıqla bu buferləri yerinə yetirəcək komanda növbəsinə göndərməlidir - bu şəkildə tətbiqdə tam nəzarət GPU-ya göndərilən iş üzərindən keçin və neçə gecikmə çərçivəsinin əlavə ediləcəyini müəyyənləşdirin (gecikmə əlavə edilir, lakin GPU istifadəsini artırır). GPU-da əmrlərin buferləşdirilməsi və asinxron olaraq növbəti kadra göndərilməsi tətbiqin özü tərəfindən həyata keçirilməlidir.

Bu buferlərin dərhal (yəni yaradılma zamanı) yerinə yetirilməyəcəyi və müəyyən bir ardıcıllıqla bir neçə buferin yaradıla və yerinə yetirilmək üçün növbəyə qoyula biləcəyi aydın olduğundan, tətbiq onları paralel olaraq bir neçə mövzu üzərində qura bilər. Proqramçı üçün hansı hesablama nəticələrinin artıq mövcud olduğu və hansının olmadığı daha aydın olur.

Vəziyyət dəyişiklikləri indi sadəcə dəyişdirilə bilən dövlət obyektlərində təşkil olunur, bu obyektlərin yaradılması isə daha bahalı olardı. Məsələn, MTLRenderPipelineState şaderləri və onların yamaqları ilə həyata keçirilən bütün vəziyyətləri ehtiva edir.

Yeni API-nin digər üstünlüyü ondan ibarətdir ki, onunla uyğunluq yükünü daşımaq məcburiyyətində deyil əvvəlki versiyalar və buna görə də o qədər də mühafizəkar olmayacaq.

A7 üçün itiləmədə də bir nüans var - bunun sayəsində Metal sistemlərdə işləmək üçün hazırlanmışdır. paylaşılan yaddaş, yəni. CPU və GPU eyni məlumatı ötürmədən birbaşa əldə edə bilər PCI avtobusu. Metal proqrama CPU-dan buferlərə birbaşa çıxış imkanı verir və bu məlumatların GPU tərəfindən eyni vaxtda istifadə edilməməsi üçün məsuliyyət proqramçının çiyninə düşür. Bu faydalı xüsusiyyət GPU və CPU hesablamalarının məhsulunu qarışdırmağa imkan verir.

Və necə 10 dəfə sürətlidir?
Hər bir tiraj çağırışı CPU-da və GPU-da müəyyən vaxta başa gəlir. Metal API vəziyyətin monitorinqini sadələşdirməklə CPU vaxtını azaldır və bununla da vəziyyət kombinasiyalarının düzgün olmasını təmin etmək üçün sürücüdən səhv yoxlamalarının sayını azaldır. Vəziyyətlərin əvvəlcədən hesablanması da kömək edir: yalnız quraşdırma zamanı səhvləri yoxlaya bilərsiniz, həm də vəziyyətin özünü dəyişdirmək daha az API çağırışını tələb edəcəkdir. Paralel olaraq komanda buferlərini qurmaq imkanı, proqram CPU ilə əlaqəli olduqda çəkiliş çağırışlarının sayını daha da artırır.

Lakin digər tərəfdən GPU göstərilməsi sürətlənmir, böyük mesh üçün çox az çəkiliş çağırışları edən bir proqram ( mesh- modelin obyekt təpələrindən ibarət hissəsi] Metala keçiddən heç bir fayda əldə etməyəcək.

Eyni şeyi OpenGL-də etmək olarmı?
GDC 14-də Cass Everitt, John McDonald, Graham Sellers və Tim Foley tərəfindən "Sıfır sürücünün yükünə yaxınlaşmaq" mövzusunda əla təqdimat oldu. Əsas ideya, səmərəliliyi artırmaq üçün çəkiliş çağırışlarında görülən işlərin həcmini artırmaq və yeni GL obyektləri və daha az GL zənglərindən istifadə etməklə OpenGL-də sürücü işini azaltmaq idi.

Bu və digər ideyalar OpenGL-in və bu API-nin yeni versiyalarının daha da genişləndirilməsini tələb edəcək, lakin bunların çoxu OpenGL ES-ə ötürülə bilər. İtirəcəyimiz şey, bütün müsbət və mənfi cəhətləri ilə komanda buferlərini birbaşa idarə etmək qabiliyyətidir.

Gələcəkdə bunu görmək ehtimalı nədir? Dəstəyinə görə geriyə uyğunluq, biz yalnız adlandırıla bilən müəyyən funksiyalar dəstinin görünüşünə ümid edə bilərik. müasir nüvə", lakin çox güman ki, o, orijinal glBegin() funksiyasına qədər hər şeylə uyğunlaşdırılmalı olacaq. Bu məhdudiyyət OpenGL-in potensial gələcəyi boyu qüvvədə qalacaq və onun təkamülünü məhdudlaşdıraraq Metal API kimi alternativləri daha çox üstünlük təşkil edəcək...

Teqlər:

  • Metal API
  • alma
  • opengl
Teqlər əlavə edin

API proqramın (modul, kitabxana) təmin etdiyi funksionallığı müəyyən edir, API isə bu funksionallığın tam olaraq necə həyata keçirildiyini mücərrədləşdirməyə imkan verir.

Proqram (modul, kitabxana) qara qutu kimi qəbul edilirsə, o zaman API istifadəçi üçün mövcud olan “tutacaqlar” dəstidir. bu qutudan, o, büküb çəkə bilər.

Proqram komponentləri API vasitəsilə bir-biri ilə qarşılıqlı əlaqədə olur. Bu halda, komponentlər adətən bir iyerarxiya təşkil edir - yüksək səviyyəli komponentlər aşağı səviyyəli komponentlərin API-dən istifadə edir və onlar da öz növbəsində daha aşağı səviyyəli komponentlərin API-sindən istifadə edirlər.

Məlumat ötürmə protokolları bu prinsip əsasında qurulur. Standart İnternet protokolu (OSI şəbəkə modeli) 7 təbəqədən ibarətdir (dan fiziki səviyyə bit paketlərinin HTTP və IMAP kimi proqram protokollarına ötürülməsi). Hər bir təbəqə əvvəlki məlumat ötürmə qatının funksionallığından istifadə edir və öz növbəsində növbəti təbəqəyə lazımi funksionallığı təmin edir.

Qeyd etmək lazımdır ki, protokol anlayışı mənaca API anlayışına yaxındır. Hər ikisi funksionallığın abstraksiyalarıdır, yalnız birinci halda məlumatların ötürülməsindən, ikincisində isə kompüter proqramlarının qurulmasından danışırıq.

Funksiya və sinif kitabxanası API təsviri ehtiva edir imzalarfunksiyaların semantikası.

Tətbiq Proqramlaşdırma İnterfeysi (API) proqram interfeysi sistemlər arasında qarşılıqlı əlaqə, imkan verir:

  • Müəssisə biznes xidmətlərinə çıxış əldə edin
  • Sistemlər və proqramlar arasında məlumat mübadiləsi
  • Şirkətlər, tərəfdaşlar, tərtibatçılar və müştərilər arasında qarşılıqlı əlaqəni sadələşdirin

Açıq API strategiyası

API strategiyasına daxildir:

  • Mövcud API-lər əsasında biznes məhsullarının inkişafı
  • Tərtibatçılara daxili xidmətlərin göstərilməsi
  • Çox kanallı qarşılıqlı əlaqə yaratmaq və mənfəəti artırmaq üçün API monetizasiya modelləri

Open API konsepsiyasının tətbiqi biznesi transformasiya etməyə, onu bazar iştirakçılarının çevik layihə ekosisteminə inteqrasiya etməyə, yeni ideyaların daimi generasiyası üçün şərait yaratmağa və korporativ məlumatların massivlərini idarə edərkən əlavə dəyər yaratmağa kömək edir.

İnteqrasiya həlləri bazarı API-lərin təkamülü kontekstində inkişaf edir - EDI və SOAP-dan ictimai API erasını başlayan Web 2.0-a qədər. Yaxın 3 ildə belə interfeyslərin sayı 50 dəfədən çox artaraq 1 milyona çata bilər. Bu, omnichannel ilə bağlıdır: müştərilərlə qarşılıqlı əlaqə kanalları onlarla birlikdə dəyişməlidir. İstehlakçıların sayında və məlumatların həcmində davamlı artım açıq interfeyslər əsasında müəssisə aktivləri və xidmətlərindən istifadə üçün innovativ biznes modellərinin yaradılmasına kömək edən API iqtisadiyyatının yaranmasına səbəb olmuşdur.

Funksiya imzası

Funksiya imzası- yayımçılara funksiyanı digərləri arasında müəyyən etməyə imkan verən ümumi funksiya bəyannaməsinin bir hissəsi. Fərqli proqramlaşdırma dillərində funksiyanın imzası haqqında fərqli fikirlər var ki, bu da bu dillərdə funksiyaların həddən artıq yüklənməsi imkanları ilə sıx bağlıdır.

Bəzən fərqləndirirlər zəng imzasıicra imzası funksiyaları. Çağırış imzası adətən verilmiş funksiyanın əhatə dairəsinin imzasını, funksiyanın adını, çağırışda faktiki arqument növlərinin ardıcıllığını və növünü nəzərə alaraq funksiya çağırışının sintaktik strukturundan tərtib edilir. nəticə. İcra imzası adətən funksiya bəyannaməsinin sintaktik strukturundan bəzi elementləri ehtiva edir: funksiyanın əhatə dairəsi spesifikatoru, onun adı və formal arqument növlərinin ardıcıllığı.

Məsələn, C++ proqramlaşdırma dilində sadə funksiya kompilyator tərəfindən öz adı və arqumentlərinin növlərinin ardıcıllığı ilə unikal şəkildə tanınır ki, bu da funksiyanın bu dildə imzasını təşkil edir. Əgər funksiya müəyyən bir sinfin metodudursa, o zaman sinif adı da imzaya daxil ediləcək.

Onu da qeyd etmək lazımdır ki, proqramçı eyni nəticəyə nail olmaq üçün çox vaxt bir neçə fərqli API-yə malikdir. Üstəlik, hər bir API adətən ilə həyata keçirilir API istifadə edərək proqram komponentləri abstraksiya səviyyəsinin aşağı olması.

Məsələn: brauzerdə “Salam, dünya!” sətrini görmək üçün. siz sadəcə olaraq minimal başlıqlı və sadə gövdəsi olan HTML sənədi yaratmalısınız bu xətt. Brauzer bu sənədi açanda nə baş verir? Brauzer proqramı fayl adını (və ya artıq açıq fayl deskriptorunu) HTML sənədlərini emal edən kitabxanaya ötürəcək ki, bu da öz növbəsində API-dən istifadə edir. əməliyyat sistemi bu faylı oxuyur və onun strukturunu anlayır, standart qrafik primitivlər kitabxanasının API vasitəsilə “pəncərəni sil”, “seçilmiş şriftlə salam, dünya!” kimi əməliyyatları yerinə yetirir, bu əməliyyatlarla qrafik kitabxanasına zəng edir. primitivlər müvafiq sorğularla pəncərə interfeysi kitabxanası ilə əlaqə saxlayacaq, artıq bu kitabxana “bunu video kartım buferinə yerləşdirin” kimi sorğularla əməliyyat sisteminin API ilə əlaqə saxlayacaqdır.

Üstəlik, demək olar ki, hər səviyyədə əslində bir neçə mümkün alternativ API mövcuddur. Məsələn: mənbə sənədini HTML-də deyil, LaTeX-də yaza bilərdik və göstərmək üçün istənilən brauzerdən istifadə edə bilərik. Müxtəlif brauzerlər, ümumiyyətlə desək, müxtəlif HTML kitabxanalarından istifadə edin və üstəlik, hər şey (ümumiyyətlə desək) müxtəlif primitiv kitabxanalardan və müxtəlif əməliyyat sistemlərindən istifadə etməklə tərtib edilə bilər.

Mövcud çox səviyyəli əsas çətinliklər API sistemləri buna görə də bunlardır:

  • Portinqdə çətinlik proqram kodu bir API sistemindən digərinə (məsələn, ƏS dəyişdirərkən);
  • Aşağı səviyyədən yuxarıya keçərkən funksionallığın itirilməsi. Təxminən desək, hər bir API "qat" bəzilərinin icrasını asanlaşdırmaq üçün yaradılmışdır standart dəstəməliyyatlar. Ancaq eyni zamanda, API-nin aşağı səviyyəsi ilə təmin edilən bəzi digər əməliyyatları yerinə yetirmək həqiqətən çətinləşir və ya əsaslı şəkildə qeyri-mümkün olur.

Əsas API növləri

Daxili API-lər

  • API girişi yalnız daxili tərtibatçılarla məhdudlaşır
  • Müraciətlər müəssisənin işçiləri üçün nəzərdə tutulub

Biznes sürücüləri:

  • İnkişaf ardıcıllığı
  • Xərcin azaldılması
  • İnkişafın səmərəliliyinin artırılması

Partnyor API-ləri

  • API-lər yalnız məhdud sayda biznes tərəfdaşları üçün əlçatandır
  • Proqramlar son istehlakçılar və biznes istifadəçiləri üçün nəzərdə tutulub

Biznes sürücüləri:

  • İnkişaf prosesinin avtomatlaşdırılması
  • Tərəfdaşlığın inkişafı
  • Tərəfdaşlarla qarşılıqlı əlaqə prosesinin optimallaşdırılması

İctimai API-lər

Giriş istənilən xarici tərtibatçıya verilir Proqramlar son istifadəçilər üçün nəzərdə tutulub

Biznes sürücüləri:

  • Yeni xidmətlərin inkişafı
  • Ekosistemin inkişafı
  • Omnikanal qarşılıqlı əlaqə

Ən məşhur API-lər

Əməliyyat sistemləri API

GUI API

  • Direct3D (DirectX-in bir hissəsi)
  • DirectDraw (DirectX-in bir hissəsi)

daha çoxdur yüksək dərəcə az məzmunlu şəkillərə nisbətən sıxılma (məsələn, qrafiklər, diaqramlar, sadə dokular). Yüksək qətnamə şəkilləri keyfiyyətinə təsir etmədən yüksək sıxılma nisbətində sıxıla bilər. Aşağı rezolyusiyaya malik şəkillər üçün yüksək keyfiyyəti qorumaq üçün nəticədə sıxılma nisbəti çox aşağı olmalıdır. Yüksək rəng dərinliyi olan şəkillər (məsələn, 24-bit Truecolor şəkilləri) piksel başına daha az bit olan şəkillərdən (məsələn, 8-bit boz rəng kimi) daha səmərəli sıxılır.

Əksər digər itkili sıxılma üsulları təbiətdə simmetrikdir. Bu o deməkdir ki, onlar qablaşdırmadan çıxararkən tərs qaydada yerinə yetirilən müəyyən əməliyyatlar ardıcıllığının istifadəsinə əsaslanır. Məlumatların sıxılması və açılması təxminən eyni vaxt tələb edir. Fraktal sıxılma asimmetrik bir prosesdir, sıxılma dekompressiyadan daha uzun çəkir; Buradan belə nəticə çıxır ki, fraktal sıxılmış verilənlər, şəkil fayllarının tez-tez sıxıldığı, lakin heç vaxt sıxılmadığı hallarda, məsələn, CD-ROM-da qrafik verilənlər bazasında şəkilləri saxlayarkən istifadə etmək məqsədəuyğundur.

Ən çox yayılmış formalardan bəziləri aşağıda qısaca müzakirə olunur:

Müasir GUI API-ləri

Müasir kompleksin inkişafı qrafik proqramlar, xüsusilə 3D tətbiqləri, API-lərin istifadəsi ilə ayrılmaz şəkildə bağlıdır

(Tətbiq Proqramlaşdırma İnterfeysi).

API proqramın 3D sürətləndiriciləri ilə işləməsi üçün hazır interfeysi təmsil edən kitabxanalar toplusudur. Hal-hazırda oxşar in-

Kifayət qədər çox interfeys var, lakin onların hamısını iki sinfə bölmək olar: universal və ixtisaslaşmış.

Universal API-lər bütün 3D sürətləndiricilər və dəstək üçün ümumidir hardware sürətləndirilməsi bu API-lər üçün sürətləndiricilərin özləri məsuliyyət daşıyır. İlk növbədə Microsoft DirectX və OpenGL-i vurğulamalıyıq. Hər ikisi əsasən kompüter animasiya proqramlarında istifadə olunur.

Xüsusi API-lər xüsusi 3D çipsetlər üzərində qurulmuş qrafik sürətləndiricilərlə işləmək üçün nəzərdə tutulmuşdur; onların arasında ən məşhurları Glide API - VooDoo® çipləri ilə işləmək üçün interfeysdir - Savage3D çipləri və s. Xüsusi API-lərdən istifadə etməklə yazılmış proqramlar yalnız bu API-lərin yaradıldığı sürətləndiricilərdə işləyir. Əksər ixtisaslaşmış API-lər yalnız aşağı səviyyəli proqramlaşdırma interfeysini təmin edir, lakin bu yaxınlarda yenidir DirectX versiyaları VisualBasic mühitində yazılmış multimedia proqramları üçün dil dəstəyini təmin edən VisualBasic üçün DirectX kimi yüksək səviyyəli dəstək interfeyslərini ehtiva edir. Vizual proqramlaşdırmaƏsas.

Microsoft DirectX API

Microsoft DirectX API həll etmək üçün istifadə olunan proqramlaşdırma interfeysləri toplusudur müxtəlif vəzifələr: kompüter avadanlığının proqram təminatına nəzarətdən inkişafa qədər multimedia proqramları müxtəlif növ məlumatlardan istifadə etmək və virtual dünya yaratmaq.

Microsoft-un DirectX interfeysini yaradarkən izlədiyi əsas məqsəd işləyən kompüterləri işə salmaq idi Windows sistemləri, V universal platformadır multimedia elementləri ilə zəngin proqramlar üçün: tam rəngli qrafika, video fraqmentlər

tami, 3D animasiya və stereo səs. Birbaşa OS nüvəsində qurulmuşdur Windows interfeysi DirectX inteqrasiya olunmuş xidmətdir

Windows 98 və Windows 2000, eləcə də Microsoft İnternet Tədqiqatçı. Komponentlər

Windows 95 üçün hazırlanmış müasir oyunları və multimedia proqramlarını quraşdırarkən DirectX də avtomatik olaraq kompüterinizə yüklənə bilər. Tərtibatçılar üçün DirectX proqram interfeysləri dəsti təqdim edir, onlardan istifadə iki əsas problemi həll etməyə imkan verir.

Birincisi, DirectX onunla hazırlanmış proqramları istənilən proqrama uyğun proqramlara çevirir Windows versiyası və istifadə olunan növündən asılı olmayaraq, bu əməliyyat sisteminin quraşdırıldığı istənilən kompüterdə işləyir proqram təminatı. Harada oxşar tətbiqlər maksimum yararlanın texniki imkanlarən yüksək performansı təmin edən kompüter. Bu, iki əsas tərəfindən göstərilən xidmət vasitəsilə əldə edilir DirectX komponentləri: aşağı səviyyəli interfeyslər daxildir DirectX tərkibiƏsas və DirectX Media-nı təşkil edən yüksək səviyyəli interfeyslər.

İkincisi, DirectX tərtibatçılara displey adapterinin, səs kartının və ya 3D sürətləndiricisinin xüsusi növündən mücərrədləşmək və proqramın özünün məntiqinə diqqət yetirmək imkanı verir.

DirectX Fondu tərtibatçıları təmin edən aşağı səviyyəli proqramlaşdırma interfeysləri dəsti ilə təmin edir səmərəli giriş səviyyəsində həyata keçirilən Windows əməliyyat sistemi ilə işləyən kompüterin bütün imkanlarına aparat- 3D sürətləndiricilər, səs kartları, məlumat daxiletmə qurğuları. DirectX-in yaranmasından əvvəl Windows platforması üçün multimedia proqramları yaradan tərtibatçılar öz proqramlarını müxtəlif növ cihazlar və konfiqurasiyalarla işləmək üçün konfiqurasiya etməli idilər. İndi bu məsələ həll olunub. DirectX Foundation proqram təminatından istifadə edən Hardware Abstraction Layer (HAL) kimi tanınan komponentdən ibarətdir

proqram təminatı və aparat arasında qarşılıqlı əlaqəni təmin etmək üçün sürücülər. Nəticədə, tərtibatçılar DirectX interfeyslərindən istifadə edərək proqramın xüsusi aparat konfiqurasiyalarında işlədiyinə əmin olmaqdan narahat olmadan onun tək versiyasını yarada bilərlər. DirectX avtomatik olaraq kompüterinizin texniki imkanlarını aşkar edir və müvafiq parametrləri təyin edir. DirectX həmçinin, mövcud olmayan hardware dəstəyi tələb edən multimedia proqramlarını işə salmağa imkan verir bu kompüter. Bu halda, onlar Hardware Emulation Layer (HEL) adlı komponent tərəfindən proqram təminatında təqlid edilir və çatışmayan qurğular kimi çıxış edən proqram sürücülərini təmin edir.

DirectX Media DirectX Foundation-ın üstündə oturur və yüksək səviyyəli xidmətlər təqdim edir - animasiya dəstəyi, axın çıxışı (İnternetdən endirilən audio və video məlumatlarını ötürmək və onlara baxmaq imkanı) və interaktivlik. DirectX Fondu tərəfindən təqdim edilən aşağı səviyyəli xidmətlərin və DirectX Media tərəfindən təqdim olunan yüksək səviyyəli xidmətlərin avtomatik inteqrasiyası multimedia elementlərinin yaradılması və ifa edilməsi prosesini sadələşdirir, tərtibatçılara onları öz proqramlarına və veb səhifələrinə daxil etməyə imkan verir və bununla da interaktiv multimedia məzmununu təmin edir. bu əvvəllər mövcud deyildi. Bundan əlavə, DirectX Media müxtəlif növ multimedia effektlərinin koordinasiyası problemini həll etməyə kömək edir, onların səsləndirilməsini sinxronizasiyanı asanlaşdırır. Bu iki əsas komponentə əlavə olaraq, Microsoft DirectX veb proqramları üçün multimedia funksionallığını təmin edən yüksək səviyyəli komponentləri də əhatə edir. Bunlara daxildir: NetMeeting - onlayn qrup müzakirələrinin təşkili üçün alət və Windows Media Player - multimedia məzmununun İnternet üzərindən ötürülməsi üçün alət. Əsas komponentləri qısaca nəzərdən keçirək

DirectX Foundation komponentləri. Bunlara daxildir Microsoft DirectDraw, Direct3D(Dərhal və Saxlanılan rejimlər), DirectInput, DirectMusic, DirectSound,

DirectSound 3D və DirectPlay. Bu sistem səviyyəli proqramlaşdırma interfeysləri

müxtəlif təsirli çıxışı təmin edir kompüter cihazları sürücü quraşdırma problemlərini və aparat və proqram platformalarının uyğunsuzluğunu aradan qaldıraraq proqramların real hardware müstəqilliyini təmin edir.

Microsoft Direct3D 3D video kartları ilə işləmək üçün interfeysdir. Direct3D arxitekturası Şəkil 1.5-də göstərilmişdir.

Win32 proqram

Direct3D iki iş rejimini dəstəkləyir - Dərhal Modu və Saxlanılan Modu. Dərhal rejimdə Direct3D tərtibatçıları Microsoft Windows mühitində oyun və multimedia proqramları üçün aparat dəstəyi ilə təmin edir. O, aparat müstəqilliyinə nail olmağa imkan verir, dəyişdirilə bilən Z-buferləşdirməni və Intel MMX prosessor arxitekturasını dəstəkləyir. Bu rejimdə əsas qrafik primitivləri icra tamponlarından istifadə etmədən birbaşa həyata keçirilir.

Saxlanılan rejim iki yeni funksiyanı dəstəkləməklə 3D dünyalarını yaratmağı və canlandırmağı asanlaşdırır: rəng qarışığı ilə animasiya interpolatorları, hamar obyekt hərəkətləri və çoxsaylı müxtəlif növlər transformasiyalar, həmçinin 3D mesh strukturunun ardıcıl doldurulması

cisimlər (torlar), onların tədricən yüklənməsinə imkan verir uzaq serverlər. Bu, tərtibatçılara obyekt strukturlarını aşağı səviyyədə birbaşa manipulyasiya etmədən 3D qrafikadan səmərəli istifadə etməyə imkan verir.

Qeyd etmək lazımdır ki, Direct3D proqramları rejimdən asılı olmayaraq qrafik qurğularla eyni şəkildə əlaqə saxlayır. HAL-a daxil olmamışdan əvvəl proqram emulyasiyasından istifadə edə və ya istifadə etməyə bilərlər. Reallıqda Direct3D DirectDraw komponenti ilə sıx inteqrasiya olunub, ona görə də Şəkil 1.2-də aparat abstraksiya səviyyəsi HAL DirectDraw/Direct3D HAL olaraq təyin olunub. Direct3D Z-bufer edir və səthləri göstərir, DirectDraw isə onları birbaşa göstərir. Direct3D COM interfeysi DirectDraw üçün interfeysdir.

DirectDraw, üzərində işləyən qrafika və multimedia proqramları üçün əsas funksiyalar dəstini təmin edən yaddaş idarəetmə meneceridir Windows platforması. Ənənəvi Windows qrafiklərindən fərqli olaraq, DirectDraw Windows proqramları ilə tam uyğunluğu təmin etməklə yanaşı, ekran yaddaşı və qrafik cihazlarına birbaşa girişdən istifadə edir.

Şəkil 1.6 DirectDraw, əməliyyat sisteminin nüvəsi komponenti GDI (Qrafik Cihaz İnterfeysi), Hardware Abstraction Layer (HAL) və hardware emulyasiya təbəqəsi arasında qarşılıqlı əlaqəni göstərir.

(Avadanlıq Emulyasiya Layeri, HEL). Gördüyünüz kimi DirectDraw müstəqil olaraq mövcuddur

GDI-dən mo və hər iki interfeys hardware-müstəqil təbəqələr vasitəsilə qrafik cihazlarına birbaşa daxil olmaq imkanına malikdir. GDI-dən fərqli olaraq DirectDraw hardware xüsusiyyətlərindən istifadə etmir. Əgər xüsusi cihaz tələb olunan funksiyaları dəstəkləmir, DirectDraw HEL-dən istifadə edərək onları təqlid etməyə çalışır. DirectDraw geniş diapazonlu displey adapterlərini dəstəkləyir sadə monitorlar kompleksə peşəkar cihazlar. Qrafik səthlər səviyyəsində işləyən DirectDraw xidmət göstərir

yüksək səviyyədə olması üçün əsasdır qrafik funksiyalar və interfeyslərdən ibarətdir və ya cihazlar tərəfindən təmin edilən hardware imkanlarından istifadə etməyə və ya lazım gələrsə, onları təqlid etməyə imkan verir.

Win32 proqram

tion Layer (HEL)

Abstraksiya qatı

Video kart

Şəkil 1.6 – DirectDraw-un sistemə inteqrasiyası

DirectInput üçün interfeysdir müxtəlif cihazlar məlumatların daxil edilməsi - klaviatura, siçan, joystik, həmçinin məcburi əks əlaqə olan qurğular. Adi, standart funksiyalarla müqayisədə bu interfeys dəstəkləyir daha böyük rəqəm cihazlar və sorğulara daha sürətli cavab verir. Birbaşa cihaz drayverləri ilə işləməklə DirectInput Microsoft Windows mesajlaşma sistemindən istifadə etmir.

Yeni DirectInput funksiyalarına dəstəklənən cihazların genişləndirilmiş siyahısı daxildir, o cümlədən: oyun meydançaları, təyyarə

uçuş boyunduruqları, dəbilqələr Virtual reallıq(virtual reallıq baş geyimləri)

vibrasiya, hərəkətə qarşı müqavimət və s. kimi effektləri təmin edən əks əlaqə olan cihazlar, onlardan istifadə müasir oyunları daha da reallaşdırır.

DirectMusic edir yeni komponent ailələr DirectX texnologiyaları, musiqi şablonları və istifadəçi hərəkətlərinə cavab vermək üçün təlimatlar yaratmaq üçün proqram qabığıdır. Bu, tərtibatçılara yaratmağa imkan verir fon musiqisi Veb səhifələrdə və ya multimedia proqramlarında müəyyən edilmiş alqoritmlərə əsaslanan real vaxt rejimində. DirectMusic Yüklənə bilən Səslər (DLS) standartının tam tətbiqini təmin edir, tərtibatçılara praktiki olaraq istənilən hardware platformasında oxuna bilən musiqi şablonları yaratmağa imkan verir. DirectMusic-ə DirectMusic Producer daxildir - bütün DirectMusic obyektləri ilə işləməyə imkan verən inteqrasiya olunmuş redaktor: üslublar, şablonlar, DLS alətləri və s.

DirectPlay modem və ya modemi asanlaşdıran proqram və rabitə xidmətləri arasında yüksək səviyyəli proqram interfeysidir yerli şəbəkə. DirectPlay, oyunçulara tərəfdaşlar və veb saytlar tapmağa, serverlər arasında məlumat axınını dəstəkləməyə imkan verən bir sıra kommunal proqramları ehtiva edir və növündən asılı olmayaraq tətbiqin istənilən istifadəçisi üçün eyni funksiyalar dəsti dəstəklənir. onlayn xidmət və ya protokollar.

IN Aşağı səviyyəli DirectX Foundation interfeyslərinə əlavə olaraq, DirectX daha yüksək səviyyəli proqramlaşdırma interfeyslərini ehtiva edir.

və multimedia proqramları, animasiya və axın məlumat çıxışı üçün dəstək verən DirectX Media komponentləri. DirectX Media hazırda aşağıdakı əsas proqramlaşdırma interfeyslərindən ibarətdir:

DirectShow (əvvəllər adlanırdı ActiveMovieSDK); DirectAnimation (əvvəllər adlanırdı ActiveX Animasiyası); DirectX Transform. Qeyd edək ki, DirectX Media xidmətləri DirectX Foundation xidmətlərindən istifadə edir.

API-lər (Application Programming Interface) aparat və proqram təminatı tərtibatçılarına geniş platformalarda daha sürətli işləyən sürücülər və proqramlar yaratmaq üçün vasitələr təqdim edir. Proqram drayverləri əməliyyat sistemi və proqram təminatı ilə deyil, birbaşa API ilə qarşılıqlı əlaqə üçün nəzərdə tutulub.

Hazırda iki qrafik API mövcuddur - OpenGL (SGI) və Direct 3D (Microsoft).

Video adapter istehsalçıları OpenGL standartını dəstəkləsələr də, Microsoft DirectX adlı daha əhatəli API üçün Direct3D dəstəyi təmin edir.

DirectX 9 və daha yüksək versiyalar dəstəyi genişləndirmək üçün proqram interfeysinin ən son versiyalarıdır 3D qrafika və təkmilləşdirilmiş oyun imkanları təmin edir. DirectX haqqında ətraflı məlumat və ya ən son versiyanı yükləmək üçün Microsoft-un DirectX Veb saytına daxil olun: www.microsoft.com/directx.

CrossFire və ya sli

Video sürətləndiricilər bazarında əsas rəqib olan ATI NVIDIA tərəfindən köhnə-yeni SLI texnologiyasının (MK No. 30(357) 2005) inkişafı və təşviqinə cavab olaraq öz oxşar həllini - CrossFire texnologiyasını işləyib hazırladı və tətbiq etdi. NVIDIA-nın SLI kimi, o, bir kompüterdə iki video kartın resurslarını bir-biri ilə birləşdirməyə imkan verir, video altsisteminin məhsuldarlığını artırır. CrossFire texnologiyası SLI-dən əsaslı şəkildə fərqlənir və buna görə də rəqibi ilə ümumi cəhətləri azdır. Bu və ya digər texnologiyanın müəyyən üstünlüklərinə üstünlük verən istifadəçilər yaxın gələcəkdə NVIDIA və ATI arasında seçim edəcəklər.

Texniki baza

NVIDIA-ya bənzətməklə, iki ATI video kartını bir “qoşquda” yerləşdirmək üçün sizə eyni istehsalçının çipsetinə (Intel i975X çipsetinin CrossFire-ı dəstəkləməsi də planlaşdırılır) iki ana plata lazımdır. PCI yuvaları Ekspres. SLI kimi, CrossFire yüksək keyfiyyətli enerji təchizatı tələb edən sistem resurslarına tələbkardır. Sistem tələblərinə daha ətraflı baxaq.

Ana plata. Ana chipset əsaslı olmalıdır ATI Radeon Xpress 200 CrossFire. Bu lövhələr həm AMD Sempron/Athlon 64, həm də Intel Pentium 4/Celeron prosessorları üçün mövcuddur. Beləliklə, ATI indi istehsalı əvvəllər geniş miqyasda olmayan çipsetlərdən pul qazanacaq.

Video kartlar. Texnologiyanın işləməsi üçün sizə CrossFire master kartı (aşağıda bu barədə ətraflı) və host kartı ilə eyni ailədən olan çip əsasında hər hansı digər video karta lazımdır. Master kartı digərlərindən fərqləndirən, DMS-59 konnektorunun (slave kartda DVI-ya qoşulmuş), CrossFire çipinin və əlbəttə ki, dəyərinin olmasıdır.

Enerji bloku. Belə ciddi bir dəsti saxlamaq üçün sizə minimum 400-450 Vt gücündə, tercihen daha güclü olan enerji təchizatı lazımdır.

Bəli, video sistemini yığmaq üçün sizə lazım olan hər şey budur CrossFire. Diqqət etdiyiniz kimi, ATI müştəriləri ilə daha çevikdir, onları kolxoz kimi torpaq kimi eyni istehsalçıdan eyni çipli iki kartın məcburi alınmasına bağlamır. Bağlama yalnız sürətləndiricinin əsaslandığı video çip ailəsinə aparılır. Yəni, siz aparıcı Radeon X800 video sürətləndiricisi və qul Radeon X800 XL ala bilərsiniz. Master Radeon X800 X800 çipinin hər hansı modifikasiyası əsasında istənilən istehsalçının kartları ilə uyğun olacaq. Bu, rəqib üzərində mütləq üstünlükdür - bir sürətləndirici götürsəniz, başqa bir video kartı quraşdıraraq daha da modernləşdirmə perspektivi ilə, müəyyən bir çip əsasında müəyyən bir istehsalçıdan bir kart axtarmağa ehtiyacınız olmayacaq. Aktiv Bu an CrossFire texnologiyası X800 və X850 əsasında hazırlanmış video kartlar, həmçinin X1xxx bazasında yeni məhsullar tərəfindən dəstəklənir.

Bir neçə il əvvəl Apple yeni qrafik API - Metal təqdim etdi. Onun eyni Scene Kit-dən fərqi ondan ibarət idi ki, o, OpenGL ES (mobil) üzərində işləyən yüksək səviyyəli API deyil. OpenGL versiyaları), lakin OpenGL-i əvəz edə bilən göstərmə və hesablama üçün aşağı səviyyəli API. Apple-a görə, Metal OpenGL ES-dən daha sürətli böyüklük sırasıdır (lakin reallıqda yalnız zənglər çəkmək və məlumatların GPU-ya ötürülməsi 10 dəfə sürətlidir). Bu API A7 və daha yeni prosessorda işləyən bütün cihazlar, həmçinin 2012-ci ildən başlayaraq Mac-lar üçün əlçatandır.

Qrafik API necə işləyir

Birincisi, API nədir? Bu, Tətbiq Proqramlaşdırma İnterfeysi, tətbiq proqramlaşdırma interfeysi deməkdir. Sadə dillə desək, belədir hazır kod, proqram yazarkən proqramçının həyatını xeyli asanlaşdırır. Əslində, bu bir növ yarımfabrikatdır - bu kod əsasında öz proqramınızı daha sürətli və asan yaza bilərsiniz.

İndi GPU-nun özünün API ilə necə işlədiyinə baxaq. API çağırışının birbaşa GPU-da işlədiyini düşünmək düzgün deyil və API nəticəsi qaytarıldıqda GPU-nun zəngi emalını bitirdiyini düşünmək daha da yanlışdır. Məsələn, sürücü yaradıldığı anda göstərmə əmrlərini yerinə yetirirsə, o, göstərmənin tamamlanmasını gözləyərkən CPU-nu boş saxlayacaq. İcradan sonra isə əksinə olacaq - GPU boş qalacaq, sürücüdən yeni əmrlərin gəlməsini gözləyirdi.

Bununla səbəbi CPU və GPU-lar asinxron işləyir: qrafik sürücüəvvəlcə bütün çərçivə üçün bütün çəkiliş çağırışlarını toplayır və yalnız sonra onları GPU-ya göndərir. Bundan əlavə, növbəti çərçivəni çəkmək əmri gəldikdə, bu çərçivə artıq GPU tərəfindən işlənəcəkdir. Yəni bir kadr gecikməsi alırıq: CPU cari kadr üçün çağırış hazırlayarkən, sonuncusu GPU-da göstərilir. Əslində, birdən çox çərçivəni bufer edə və bununla da əldə edə bilərsiniz daha yüksək tezlikçərçivələr: hamısı yalnız prosessorun və video kartın performansından asılıdır.

API Metal-də yeniliklər

Yuxarıda təsvir edilən üsulla nə səhvdir? Onun pis tərəfi odur ki, GPU ilə API arasında vasitəçi - sürücü var. Gecikmələrə nəzarət edən də Odur. Metal API-də əmr buferləri açıqdır və proqram onları özü doldura və GPU-da icra üçün komanda növbəsinə göndərə bilər. Bu yolla, proqram iş üzərində tam nəzarətə malikdir və gecikmələri idarə edə bilər. Üstəlik, indi asanlıqla əmrləri paralelləşdirmək və onları müəyyən bir ardıcıllıqla buferə yerləşdirmək mümkündür, çünki proqramçı üçün hansı nəticələrin hansı ardıcıllıqla mövcud olacağı daha aydın olur.

Digər mühüm yenilik isə aparatdır: on Apple prosessorları A7 və daha yüksək Metal paylaşılan yaddaşla işləmək üçün nəzərdə tutulmuşdur, yəni CPU və GPU eyni məlumatı PCI avtobusu üzərindən ötürməyə ehtiyac olmadan əldə edə bilir. Metal proqrama CPU buferlərinə birbaşa giriş imkanı verir və proqramçı GPU və CPU-da hesablamaları "qarışdıra" bilər ki, bu da proqramı əhəmiyyətli dərəcədə sürətləndirə bilər.

API Metaldan real fayda

Yuxarıda izah etdiyim kimi, hər çəkiliş çağırışı CPU və GPU-da müəyyən vaxt tələb edir. GPU-da göstərmə aydın səbəblərə görə daha sürətli edilə bilməz (bu, yalnız GPU-nun performansından asılıdır), ancaq başqa yollarla qazana bilərsiniz: birincisi, məlumatların ötürülməsi üçün vaxtı azalda bilərsiniz (çünki Metal paylaşılan yaddaşla işləyir) , ikincisi, CPU-da zəng emalı vaxtını azalda bilərsiniz. Vasitəçi sürücünün olmaması və komanda buferinin paralel qurulması səbəbindən CPU-da zənglərin işləmə müddəti azalır.

Və burada sual yaranır - Apple məhsuldarlığın hansı on qat artımından danışırdı? Bəli, CPU-da zəng vaxtı indi daha qısadır. Ancaq burada GPU demək olar ki, təsirlənmir, buna görə də nəticədə Metal API-dən istifadə edərək qrafikanı birbaşa təkmilləşdirmək təəssüf ki, mümkün deyil. Amma prosessor pulsuz olduğundan onu fizika ilə yükləmək olar: hissəciklər fizikasının hesablanması, bir çox obyektlərin qarşılıqlı əlaqəsi (iPhone 7-nin təqdimatında hər kəs yüz uçan meymunu xatırlayır?), parça və suyun təsirini hesablamaq və s. Əvvəllər GPU bunu etdiyi üçün biz onu azad edirik və məlum olur ki, dolayı yolla indi çıxış edə bilir ən yaxşı şəkil, oyunlarda gördüklərimiz (Asfalt 8 daxil olmaqla) (səki daşlarının detallarına və effektlərə diqqət yetirin):

OpenGL və Metal arasında qarşılıqlı əlaqə

Yuxarıdakılardan göründüyü kimi, Metal həqiqətən prosessorun ömrünü yaxşılaşdırır. Buna görə də, əgər sistem Metalı dəstəkləmirsə, lakin çox var güclü prosessor, onda OpenGL üçün oyunu yenidən yazmaq xüsusilə çətin deyil - və bu, Android üçün Vainglory-də gördüyümüz şeydir - sizə lazım olan OpenGL-də maksimum qrafika (Apple A9 səviyyəsi) əldə etmək üçün üst prosessor Snapdragon 820-nin səviyyəsi, xam performans baxımından (FLOPS-da) A9-dan iki dəfə güclüdür.

Apple Metal 2

İyun ayında Apple təqdimatları Metalın yeni versiyasını təqdim etdi. Əsas təkmilləşdirmələr VR dəstəyidir, maşın öyrənməsi nəzəri olaraq daşımağa imkan verən xarici GPU-lar Mac oyunları Qrafikdə heç bir deqradasiya olmadan PC-dən (hazırda əksər oyunların portları mahiyyət etibarilə şərabın işə salınması, bu performansı əhəmiyyətli dərəcədə azaldır və Mac-da onsuz da zəif olan GPU-lara böyük təsir göstərir). Amma bunun reallıqda necə olacağını ancaq gələcəkdə görəcəyik.