OpenGL e DirectX
Posted on 24. Nov, 2009 by THeK3nger in Software
Lo so. Sono discorsi pro-flame che hanno stancato tutti. Anche me. Ma a quanto pare qualcuno non ha capito a fondo la differenza fra le due librerie e crede che OpenGL sia il solito fratello sfigato delle DirectX che mamma microsoft ci offre con tanto spirito di carità.
Non starò a tediarvi con “è meglio X perché” o “quanto fa schifo Y”. Vi sparerò di seguito qualche dato preso da libri attendibili e non trarrò conclusioni. Queste spettano a voi.
Per prima cosa va puntualizzato che comparare OpenGL con le DirectX è come comparare KDE con OpenSolaris. Le OpenGL infatti sono puramente librerie 3D mentre le DirectX offrono anche funzionalità collegate al mondo dei videogame quali
DirectDraw – Libreria per la grafica 2D
Direct3D – Libreria per la grafica 3D
DirectSound – Libreria per la riproduzione e la manipolazione di effetti sonori
DirectInput- Libreria per la gestione dell’Input (tastiera, mouse, joystick etc.)
DirectShow – Libreria per la riproduzione di file video
DirectPlay – Libreria per il networking
Per OpenGL invece dobbiamo accoppiare librerie specifiche separate e librerie ausiliarie come GLUT e simili. Le comparazioni fra OpenGL e DirectX, quindi, le farò solamente rispetto a Direct3D.
Iniziamo con una tabella che comparativa delle features
| Feature: | OpenGL | Direct3D |
| Vertex Blending | N/A | Yes |
| Multiple Operating Systems | Yes | No |
| Extension Mechanism | Yes | Yes |
| Development | Multiple member Board | Microsoft |
| Thorough Specification | Yes | No |
| Two-sided lighting | Yes | No |
| Volume Textures | Yes | No |
| Hardware independent Z-buffers | Yes | No |
| Accumulation buffers | Yes | No |
| Full-screen Antialiasing | Yes | Yes |
| Motion Blur | Yes | Yes |
| Depth of field | Yes | Yes |
| Stereo Rendering | Yes | No |
| Point-size/line-width attributes | Yes | No |
| Picking | Yes | No |
| Parametric curves and surfaces | Yes | No |
| Cache geometry | Display Lists | Vertex Buffers |
| System emulation | Hardware not present | Let app determine |
| Interface | Procedure calls | COM |
| Updates | Yearly | Yearly |
| Source Code | Sample | SDK Implementation |
Da notare il supporto allo Stereo Rendering che serve a creare video 3D compatibili con gli occhialetti tanto di moda nell’ultimo periodo.
Ora non so se questa tabella è aggiornatissima ma è comunque indicativa.
Altra questione. Le DirectX hanno un accesso diretto all’hardware su Windows mentre le OpenGL si devono arrangiare con le WGL. Questo influisce negativamente sulle OpenGL su Windows ed è uno dei motivi per cui per i giochi windows si preferiscono le DirectX. Il motivo di questa discriminazione è nella chiusura del codice di Windows, ovviamente. Inoltre, astutamente, le funzionalità di accesso all’hardware (driver) e quelle di API sono inseparabili. Ciò significa che un programma che sfrutta OpenGL non può appoggiarsi a DirectX per avere una via preferenziale verso la scheda video, infatti tale via è utilizzabile solamente se il canale viene aperto dalle API Direct3D.
Inoltre le prestazioni fra Direct3D e OpenGL sono del tutto comparabili. A seconda dei test prevale una o prevale l’altra. Quindi siamo in totale parità.
Infine la semplicità di programmazione pende a favore delle OpenGL. Per prima cosa perché sono scelte universalmente come libreria didattica e in secondo luogo perché sfrutta la semplice interfaccia a “chiamata di funzione” a differenza dell’uso di COM per DirectX.
Non dico che la tecnologia COM sia peggio della chiamata di funzione. Ma sicuramente richiede un approccio diverso e quindi una curva di apprendimento più ripida rispetto al sistema “standard” usato da C/C++ e che quindi tutti conoscono già.
Quasi dimenticavo di aggiungere che le OpenGL sono disponibili ovunque, per qualunque architettura e dispositivo, mentre le DirectX sono vincolate a Microsoft.
Ci sarebbe altro da dire ma poi diventerei noiso. Penso che queste cose servano a fare un po di chiarezza.







Alessandro T
Nov 24th, 2009
Bella spiegazione, complimenti! Ho letto ieri sera il post di Guiodic sull’argomento, e per un non tecnico come me non bastava a farmi un’idea chiara. Ora ce l’ho…
THeK3nger
Nov 24th, 2009
Guido ci mette più sentimento. xD Io cerco di mantenere il faro della “operazione divulgativa”.
perfab
Nov 24th, 2009
che dirti… Grazie
“Ci sarebbe altro da dire ma poi diventerei noiso. Penso che queste cose servano a fare un po di chiarezza”
continua pure, se ti va
THeK3nger
Nov 24th, 2009
Non mi piace fare le cose per “sentito dire”. Quindi magari approfondisco appena recupero tutte le fonti necessarie.