Marco Minin

Scienze & Tecnologia

Marco Minin

Scienze & Tecnologia

OpenGL vs. Metal: il passato e il futuro delle API grafiche

2019-02-10 10:01:29

Le API grafiche sono gli intermediari che collegano il software ad alta intensità visiva alle parti hardware specializzate che rendono tali grafici. Poiché l'hardware mobile ha visto enormi progressi nella potenza di elaborazione parallela, gli sviluppatori si sono affrettati a trarne vantaggio e la concorrenza tra le diverse API è diventata intensa. Ma la differenza tra queste API non è solo tecnica: è una competizione tra due approcci molto diversi per ottenere l'hardware e il software per parlare tra loro. In questo articolo, vedremo quali sono le API grafiche, come funzionano e confrontiamo OpenGL e Metal, due dei maggiori protagonisti della grafica mobile.

COS'È L'ACCELERAZIONE HARDWARE?

Prima di entrare nello specifico delle API grafiche, è utile conoscere un po 'l'accelerazione hardware in generale. L'accelerazione hardware è l'uso di hardware dedicato, tipicamente un'unità di elaborazione grafica (GPU), per eseguire lavori computazionalmente intensi. Piuttosto che le CPU, che sono i motori general purpose dei computer, le GPU sono progettate per gestire più calcoli intensivi in ​​parallelo. L'accelerazione hardware ha applicazioni in crittografia, data mininge altri tipi di lavoro che traggono vantaggio dalla parallelizzazione. Per la maggior parte delle persone, tuttavia, l'accelerazione hardware viene utilizzata per rendere più rapida ed efficiente la grafica 3D. Molti degli effetti più impressionanti visti nei videogiochi moderni - pensate a trame ad altissima risoluzione, illuminazione realistica ed effetti atmosferici - sono possibili solo grazie all'accelerazione hardware.

API GRAFICHE

Per sfruttare le GPU, le applicazioni si basano su API. Nel mondo della grafica mobile, ci sono alcuni giocatori importanti. Successivamente, daremo un'occhiata a come funzionano queste API e confrontiamo alcune delle principali opzioni per iOS .


Come altre API, le API grafiche collegano parti di software a un'altra risorsa. In questo caso, quella risorsa è un componente hardware, la GPU. Ciò consente agli sviluppatori di sfruttare la potenza di elaborazione parallela utilizzata dalle GPU per gestire i massicci blocchi di dati e gli algoritmi complessi necessari per il rendering rapido delle immagini 3D. Tuttavia, non tutte le API grafiche funzionano nello stesso modo. Alcuni sono API di alto livelloprogettato per funzionare su GPU di più fornitori. Allo stesso modo in cui i linguaggi di programmazione di alto livello sono progettati per funzionare indipendentemente dal tipo di sistema su cui verranno eseguiti (come Python, ad esempio), le API grafiche di alto livello hanno lo scopo di consentire agli sviluppatori di concentrarsi su ciò che sono " sta cercando di realizzare piuttosto che i dettagli dell'esecuzione tecnica. Naturalmente, come per i linguaggi di programmazione di alto livello, questo livello di astrazione viene a scapito dell'efficienza, in particolare nell'area delle chiamate ai disegni , che sono istruzioni inviate dalla CPU alla GPU per eseguire il rendering di un determinato oggetto. Più tempo impiegano queste istruzioni per raggiungere la GPU, più lentamente la grafica diventa.


All'altra estremità della scala, API di basso livellodare agli sviluppatori un accesso molto più diretto all'hardware specifico. Il vantaggio qui è simile a quello dei linguaggi di programmazione di basso livello (il C ++ è un buon esempio), dove il livello di astrazione è minimo, dando allo sviluppatore un controllo molto maggiore su come le loro istruzioni sono eseguite nell'hardware sottostante. Di conseguenza, le API di basso livello possono trarre il massimo vantaggio dall'architettura di una particolare GPU, con conseguente aumento della velocità e dell'efficienza che sarebbe impossibile con un'API di livello superiore. Il lato negativo di questo è minore portabilità e meno compatibilità. Un'API di basso livello potrebbe essere compatibile solo con le GPU progettate utilizzando una particolare architettura specifica del fornitore. Questo può essere un problema serio se stai sviluppando applicazioni che devono essere ampiamente disponibili.

OPENGL: PROGETTATO PER LA FLESSIBILITÀ

OpenGL (abbreviazione di Open Graphics Library) è la quintessenza dell'API grafica di alto livello. Si tratta di una delle API di grafica più antiche in circolazione, che in origine si stava affermando nell'era dei PC. Nonostante la sua età, OpenGL è stato continuamente aggiornato e rimane una delle API più utilizzate, soprattutto nell'arena dei giochi mobile, dove è supportato sia da iOS che da Android. Dal punto di vista di uno sviluppatore, la possibilità di scrivere applicazioni che possono trarre vantaggio dall'accelerazione hardware su entrambe le principali piattaforme mobili può rappresentare un serio vantaggio, anche se a discapito delle prestazioni.

METAL: PROGETTATO PER LA VELOCITÀ

Metal è un'API proprietaria di basso livello scritta in C ++ che rappresenta l'ultima novità nel design dell'API di grafica. Mentre le API di alto livello come OpenGL sono ancora utilizzate in molti contesti, negli ultimi anni c'è stata una tendenza definitiva verso le API di basso livello che possono trarre vantaggio dagli enormi progressi nella velocità della GPU.

A differenza di OpenGL, che è indipendente dall'hardware, Metal è progettato specificamente per funzionare con l'architettura hardware di Apple. Dal punto di vista dello sviluppatore, ti consente di sfruttare direttamente le particolarità dell'hardware Apple, piuttosto che affidarti all'API per gestirlo per te. In teoria, questo dovrebbe consentire di ottenere prestazioni molto più elevate di quelle che sarebbero possibili con un'API di alto livello. Anche il metallo è progettato per avere un basso overhead , il che significa che elimina molte delle caratteristiche che rendono OpenGL "pesante" o "gonfio", potenzialmente aggiungendo guadagni in termini di prestazioni. Per inciso, queste stesse qualità rendono Metal anche più adatto a compiti computazionalmente intensi oltre al rendering di grafica 3D. Questo potrebbe essere un vantaggio per gli sviluppatori mobili che stanno sviluppando Computer-Assisted Design (CAD) o software statistico.

APERTO VS CHIUSO

Apple è famosa (o famigerata) per i suoi ecosistemi chiusi. Progettano CPU e sistemi operativi proprietari, il che significa che è possibile per Apple raggiungere un livello di integrazione impossibile per i loro concorrenti. È logico, quindi, che vorrebbero che anche un'API grafica proprietaria ne approfitti. Il rovescio della medaglia dal punto di vista dello sviluppatore è che, mentre teoricamente si raggiungono livelli estremamente elevati di prestazioni in questo ecosistema, si è anche più "bloccati", rendendo molto più dispendiose in termini di tempo e risorse per creare versioni Android e iOS di le tue applicazioni. Nel caso di Metal, progettato per funzionare con l'ultima architettura GPU di Apple, questo può anche escludere gli utenti che utilizzano ancora dispositivi Apple più vecchi.

Quale API è adatta al tuo team dipende dalle specifiche della tua applicazione e dai tuoi obiettivi di business. Se la tua app dipende dall'ultima e più grande grafica 3D, potrebbe avere senso utilizzare un'API di basso livello come Metal. Se è più importante che la tua applicazione sia in grado di girare su quante più piattaforme possibili, potrebbe essere sensato andare con qualcosa di più alto livello. In entrambi i casi, avrete bisogno di sviluppatori esperti e progettisti 3D per dare vita alle vostre idee.