FONTE:
OpenGL
OpenGL (Open Graphics Library) è una specifica che definisce una API per più linguaggi e per più piattaforme per scrivere applicazioni che producono computer grafica 2D e 3D. L'interfaccia consiste in circa 250 diverse chiamate di funzione che si possono usare per disegnare complesse scene tridimensionali a partire da semplici primitive. È usato per sviluppare nell'industria dei videogiochi (nella quale compete con DirectX su Microsoft Windows), per applicazioni di CAD, realtà virtuale, e CAE. È lo standard di fatto per la computer grafica 3D in ambiente Unix.
Specifica
A livello più basso OpenGL è una specifica, ovvero si tratta semplicemente di un documento che descrive un insieme di funzioni ed il comportamento preciso che queste devono avere. Da questa specifica, i produttori di hardware creano implementazioni, ovvero librerie di funzioni create rispettando quanto riportato sulla specifica OpenGL, facendo uso dell'accelerazione hardware ove possibile. I produttori devono comunque superare dei test specifici per poter fregiare i loro prodotti della qualifica di implementazioni OpenGL.
Esistono implementazioni efficienti di OpenGL (che sfruttano in modo più o meno completo le GPU) per Microsoft Windows, Linux, molte piattaforme Unix, la Playstation 3 ed il Mac OS. Queste implementazioni vengono normalmente fornite dai costruttori di dispositivi video e si affidano pesantemente sull'hardware fornito. Esistono realizzazioni software che portano OpenGL su piattaforme che non hanno il supporto dei costruttori hardware. La più nota è la libreria open source Mesa, un'API grafica basata solamente su librerie software che è compatibile con OpenGL. Tuttavia, a causa della licenza, può solo sostenere di essere un'API "molto simile".
La specifica di OpenGL è supervisionata dall'OpenGL Architecture Review Board (ARB), che si è formato nel 1992. L'ARB consiste di un insieme di aziende interessate a creare un'API coerente e ampiamente disponibile. Secondo il sito Web ufficiale di OpenGL, i membri votanti dell'ARB nel aprile del 2006 erano: 3Dlabs, Apple Computer, ATI Technologies, Dell, IBM, Intel, NVIDIA, SGI e Sun Microsystems. Microsoft, uno dei membri fondatori, se n'è andato nel marzo del 2003. Oltre a queste aziende, ogni anno molte altre compagnie sono invitate a far parte dell'OpenGL ARB per un solo anno. Con il coinvolgimento di così tante aziende con interessi molto diversi, OpenGL è diventata nel tempo una API ad uso generico, con un ampio ventaglio di capacità.
Secondo i piani vigenti, il controllo di OpenGL passerà a Khronos Group alla fine del 2006, nel tentativo di migliorare il marketing di OpenGL e per rimuovere le barriere tra lo sviluppo di OpenGL e OpenGL ES [1]
Struttura
OpenGL assolve a due compiti fondamentali:
nascondere la complessità di interfacciamento con acceleratori 3D differenti, offrendo al programmatore una API unica ed uniforme;
nascondere le capacità offerte dai diversi acceleratori 3D, richiedendo che tutte le implementazioni supportino completamente l'insieme di funzioni OpenGL, ricorrendo ad un'emulazione software se necessario.
Il compito di OpenGL è quello di ricevere primitive come punti, linee e poligoni, e di convertirli in pixel (rasterizing o rasterizzazione). Ciò è realizzato attraverso una pipeline grafica nota come (EN) OpenGL state machine. La maggior parte dei comandi OpenGL forniscono primitive alla pipeline grafica o istruiscono la pipeline su come elaborarle. Prima dell'introduzione di OpenGL 2.0, ogni stadio della pipeline realizzava una funzione fissa ed era configurabile solo entro certi limiti, ma dalla versione 2.0 molti stadi sono totalmente programmabili attraverso il linguaggio GLSL.
OpenGL è una API procedurale che opera a basso livello, che richiede al programmatore i passi precisi per disegnare una scena. Questo approccio si pone in contrasto con le API descrittive ad alto livello le quali, operando su struttura dati ad albero (scene graph), richiedono al programmatore solo una descrizione generica della scena, occupandosi dei dettagli più complessi del rendering. La natura di OpenGL obbliga quindi i programmatori ad avere una buona conoscenza della pipeline grafica stessa, ma al contempo lascia una certa libertà per implementare complessi algoritmi di rendering.
Storicamente, OpenGL ha esercitato una notevole influenza sullo sviluppo degli acceleratori 3D, promuovendo un livello base di funzionalità che è oggi comune nelle schede video destinate al grande pubblico:
punti, linee e poligoni disegnati come primitive base;
una pipeline per il transform and lighting;
Z-buffering
Texture mapping
Alpha blending
Una delle caratteristiche più apprezzate in ambito professionale è la retrocompatibilità tra le diverse versioni di OpenGL: programmi scritti per la versione 1.0 della libreria devono funzionare senza modifiche su implementazioni che seguono la versione 2.1.
Esempio di codice sorgente
Di seguito un semplice programma in C che disegna utilizzando le primitive OpenGL un triangolo:
Estensioni
Lo standard OpenGL permette ai produttori individuali di fornire funzionalità aggiuntive tramite le estensioni man mano che vengono create nuove tecnologie. Un'estensione viene poi distribuita in due parti: come file di intestazione che contiene i prototipi di funzione dell'estensione, e come driver del produttore. Ogni produttore ha un'abbreviazione alfabetica che viene usata nel denominare le loro nuove funzioni e costanti. Per esempio, l'abbreviazione di NVIDIA (NV) viene usata nel definire la loro funzione proprietaria glCombinerParameterfvNV() e la loro costante GL_NORMAL_MAP_NV. Può succedere che più produttori si accordino per implementare la stessa funzionalità estesa.
In tal caso, si usa l'abbreviazione EXT. Può anche accadere che l'ARB approvi l'estensione. Allora essa diventa nota come una estensione standard, e si usa l'abbreviazione ARB. La prima estensione ARB è stata la GL_ARB_multitexture. Avendo seguito il percorso di promozione per le estensioni ufficiali, la multitexture non è più un'estensione ARB implementata opzionalmente, ma è stata integrata nell'API base di OpenGL a partire dalla versione 1.4. Le specifiche per quasi tutte le estensioni si trovano nel repository ufficiale delle estensioni: [1].
Varie librerie sono state costruite sopra OpenGL per fornire funzionalità non disponibili in OpenGL stesso:
GLU
GLUT
GLUI
In particolare, la libreria OpenGL Performer, sviluppata da SGI e disponibile per IRIX, Linux, e varie versioni di Microsoft Windows, si appoggia a OpenGL per abilitare la creazione di applicazioni di simulazione visuale in real-time.
Binding
Lo standard OpenGL permette ai produttori individuali di fornire funzionalità aggiuntive tramite le estensioni man mano che vengono create nuove tecnologie. Un'estensione viene poi distribuita in due parti: come file di intestazione che contiene i prototipi di funzione dell'estensione, e come driver del produttore. Ogni produttore ha un'abbreviazione alfabetica che viene usata nel denominare le loro nuove funzioni e costanti. Per esempio, l'abbreviazione di NVIDIA (NV) viene usata nel definire la loro funzione proprietaria glCombinerParameterfvNV() e la loro costante GL_NORMAL_MAP_NV. Può succedere che più produttori si accordino per implementare la stessa funzionalità estesa.
In tal caso, si usa l'abbreviazione EXT. Può anche accadere che l'ARB approvi l'estensione. Allora essa diventa nota come una estensione standard, e si usa l'abbreviazione ARB. La prima estensione ARB è stata la GL_ARB_multitexture. Avendo seguito il percorso di promozione per le estensioni ufficiali, la multitexture non è più un'estensione ARB implementata opzionalmente, ma è stata integrata nell'API base di OpenGL a partire dalla versione 1.4. Le specifiche per quasi tutte le estensioni si trovano nel repository ufficiale delle estensioni: [1].
Varie librerie sono state costruite sopra OpenGL per fornire funzionalità non disponibili in OpenGL stesso:
GLU
GLUT
GLUI
In particolare, la libreria OpenGL Performer, sviluppata da SGI e disponibile per IRIX, Linux, e varie versioni di Microsoft Windows, si appoggia a OpenGL per abilitare la creazione di applicazioni di simulazione visuale in real-time.
Funzionalità ad alto livello
OpenGL è stato progettato per essere di solo output: fornisce solamente funzioni di rendering. L'API di base non contempla la gestione di finestre, l'audio, la stampa, la tastiera, il mouse, né altri dispositivi di input. Per quanto questo possa sembrare restrittivo, permette al codice di rendering di essere completamente indipendente dal sistema operativo su cui funziona, permettendo lo sviluppo di codice indipendente dalla piattaforma. Tuttavia, per consentire un'interazione con il sistema ospitante, è necessario integrare il software con il sistema a finestre nativo. Ciò viene effettuato tramite le seguenti API aggiuntive:
GLX - X11 (comprensivo di trasparenza di rete)
WGL - Microsoft Windows
In aggiunta le librerie GLUT e SDL forniscono funzionalità per una gestione elementare delle finestre con OpenGL, in maniera portabile. Mac OS X ha tre API per ottenere il supporto di OpenGL: AGL per Carbon, NSOpenGL per Cocoa e Core OpenGL (CGL) per l'accesso diretto.
Storia
OpenGL è un'evoluzione di (ed ha uno stile molto simile a) IRIS GL, l'interfaccia 3D di SGI. Una delle restrizioni di IRIS GL era che forniva accesso solamente alle caratteristiche supportate dall'hardware soggiacente. Se l'hardware grafico non supportava una caratteristica, allora l'applicazione non poteva usarla. OpenGL ha superato questo problema fornendo supporto via software per le caratteristiche non supportate dall'hardware, permettendo alle applicazioni di usare della grafica avanzata su sistemi di potenza relativamente bassa. Il progetto Fahrenheit fu uno sforzo congiunto fra Microsoft, SGI, e Hewlett-Packard con l'obiettivo di unificare le interfacce OpenGL e Direct3D. Inizialmente ha mostrato qualche promessa di portare ordine nel mondo delle API di computer grafica 3D interattiva, ma a causa dei vincoli finanziari in SGI e alla generale carenza si supporto nell'industria, è stato poi abbandonato.
Il futuro in Microsoft Windows
Il 6 agosto 2005, quelle che in principio erano le intenzioni di Microsoft riguardo al supporto di OpenGL in Windows Vista vennero rivelate in un annuncio di notizie su Opengl.org:
I piani attuali di Microsoft per OpenGL su Windows Vista sono di appoggiare OpenGL sopra Direct3D al fine di usare OpenGL su un desktop composito per ottenere l'esperienza Aeroglass. Se si esegue un ICD OpenGL - il desktop compositor si spegnerà - degradando significativamente l'esperienza dell'utente.
In pratica, per OpenGL sotto Aeroglass, ciò significa:
Le prestazioni di OpenGL verranno significativamente ridotte - forse fino al 50%.
OpenGL su Windows verrà portata ad una versione base di OpenGL 1.4.
Nessuna estensione sarà possibile per esporre future innovazioni hardware.
Sarebbe tecnicamente immediato fornire un ICD OpenGL (installable client driver, cioè un driver specifico per OpenGL) all'interno dell'intera esperienza Aeroglass senza compromettere la stabilità o la sicurezza del sistema operativo. Appoggiare OpenGL su Direct3D è una decisione più strategica che tecnica.
Allora, il futuro di OpenGL come libreria principale per i video giochi sembrava precario. Microsoft aveva preso la decisione di non rilasciare le informazioni necessarie per permettere a terze parti (come NVIDIA, ATI o gli altri grandi costruttori di schede) di sviluppare i driver di sostituzione, non lasciando modo di evitare il calo di velocità del 50%.
Forse proprio a seguito delle pressioni che giungevano dal mondo dell'industria del software e dagli stessi produttori hardware, Microsoft ha in seguito rivisto questa politica e sono oggi disponibili ICD in grado di funzionare senza problemi in unione al sottosistema Aeroglass, senza calo di prestazioni. Si veda a tal proposito la presentazione relativa ad OpenGL su Windows Vista rilasciata da NVIDIA al SIGGRAPH 2006 [4].
Così come per il predecessore Windows XP, anche il CD di installazione di Windows Vista non include alcun ICD, che dovrà essere installato a cura dell'utente. In mancanza di un ICD, Vista fornisce comunque funzionalità OpenGL 1.4 senza estensioni, attraverso uno strato di emulazione basato su Direct3D.
Il futuro di OpenGL in ambito videoludico è quindi ora nelle mani dei produttori di videogiochi, i quali non sembrano comunque molto propensi all'utilizzo di questa API, come dimostrerebbe anche una decisione di uno dei suoi più illustri sostenitori in questo ambito, ovvero John Carmack di id Software. Quest'ultimo ha infatti (EN) affermato al (EN) QuakeCon 2005 che la sua principale piattaforma di sviluppo sarà Xbox 360, che infatti si appoggia a DirectX. (questa cosa è stata SMENTITA)
OpenGL 2.0
OpenGL 2.0 è stato concepito da 3Dlabs per soddisfare le preoccupazioni che OpenGL fosse stagnante e mancasse di una forte direzione. 3Dlabs ha proposto alcune grosse aggiunte allo standard, la più significativa delle quali fu GLSL (da OpenGL Shading Language, cioè il linguaggio di shading di OpenGL). Questo consentirebbe ai programmatori di sostituire il codice prefissato di OpenGL per le pipeline di elaborazione dei vertici e dei frammenti con gli shader scritti in un linguaggio simile al C. GLSL era notevole per il fatto di non adeguarsi all'hardware allora disponibile; questo era un ritorno alla tradizione di OpenGL di porsi degli obiettivi ambiziosi e proiettati al futuro per nuovi acceleratori 3D, invece di limitarsi a inseguire lo stato dell'hardware attualmente disponibile. La specifica finale di OpenGL 2.0 [5] comprendeva il supporto a GLSL, ma ometteva molte delle altre caratteristiche originalmente proposte - queste sono state differite a versioni future di OpenGL, sebbene alcune siano già disponibili come estensioni.
Collegamenti esterni
Risorse per programmatori
wikipedia
OpenGL
OpenGL (Open Graphics Library) è una specifica che definisce una API per più linguaggi e per più piattaforme per scrivere applicazioni che producono computer grafica 2D e 3D. L'interfaccia consiste in circa 250 diverse chiamate di funzione che si possono usare per disegnare complesse scene tridimensionali a partire da semplici primitive. È usato per sviluppare nell'industria dei videogiochi (nella quale compete con DirectX su Microsoft Windows), per applicazioni di CAD, realtà virtuale, e CAE. È lo standard di fatto per la computer grafica 3D in ambiente Unix.
Specifica
A livello più basso OpenGL è una specifica, ovvero si tratta semplicemente di un documento che descrive un insieme di funzioni ed il comportamento preciso che queste devono avere. Da questa specifica, i produttori di hardware creano implementazioni, ovvero librerie di funzioni create rispettando quanto riportato sulla specifica OpenGL, facendo uso dell'accelerazione hardware ove possibile. I produttori devono comunque superare dei test specifici per poter fregiare i loro prodotti della qualifica di implementazioni OpenGL.
Esistono implementazioni efficienti di OpenGL (che sfruttano in modo più o meno completo le GPU) per Microsoft Windows, Linux, molte piattaforme Unix, la Playstation 3 ed il Mac OS. Queste implementazioni vengono normalmente fornite dai costruttori di dispositivi video e si affidano pesantemente sull'hardware fornito. Esistono realizzazioni software che portano OpenGL su piattaforme che non hanno il supporto dei costruttori hardware. La più nota è la libreria open source Mesa, un'API grafica basata solamente su librerie software che è compatibile con OpenGL. Tuttavia, a causa della licenza, può solo sostenere di essere un'API "molto simile".
La specifica di OpenGL è supervisionata dall'OpenGL Architecture Review Board (ARB), che si è formato nel 1992. L'ARB consiste di un insieme di aziende interessate a creare un'API coerente e ampiamente disponibile. Secondo il sito Web ufficiale di OpenGL, i membri votanti dell'ARB nel aprile del 2006 erano: 3Dlabs, Apple Computer, ATI Technologies, Dell, IBM, Intel, NVIDIA, SGI e Sun Microsystems. Microsoft, uno dei membri fondatori, se n'è andato nel marzo del 2003. Oltre a queste aziende, ogni anno molte altre compagnie sono invitate a far parte dell'OpenGL ARB per un solo anno. Con il coinvolgimento di così tante aziende con interessi molto diversi, OpenGL è diventata nel tempo una API ad uso generico, con un ampio ventaglio di capacità.
Secondo i piani vigenti, il controllo di OpenGL passerà a Khronos Group alla fine del 2006, nel tentativo di migliorare il marketing di OpenGL e per rimuovere le barriere tra lo sviluppo di OpenGL e OpenGL ES [1]
Struttura
OpenGL assolve a due compiti fondamentali:
nascondere la complessità di interfacciamento con acceleratori 3D differenti, offrendo al programmatore una API unica ed uniforme;
nascondere le capacità offerte dai diversi acceleratori 3D, richiedendo che tutte le implementazioni supportino completamente l'insieme di funzioni OpenGL, ricorrendo ad un'emulazione software se necessario.
Il compito di OpenGL è quello di ricevere primitive come punti, linee e poligoni, e di convertirli in pixel (rasterizing o rasterizzazione). Ciò è realizzato attraverso una pipeline grafica nota come (EN) OpenGL state machine. La maggior parte dei comandi OpenGL forniscono primitive alla pipeline grafica o istruiscono la pipeline su come elaborarle. Prima dell'introduzione di OpenGL 2.0, ogni stadio della pipeline realizzava una funzione fissa ed era configurabile solo entro certi limiti, ma dalla versione 2.0 molti stadi sono totalmente programmabili attraverso il linguaggio GLSL.
OpenGL è una API procedurale che opera a basso livello, che richiede al programmatore i passi precisi per disegnare una scena. Questo approccio si pone in contrasto con le API descrittive ad alto livello le quali, operando su struttura dati ad albero (scene graph), richiedono al programmatore solo una descrizione generica della scena, occupandosi dei dettagli più complessi del rendering. La natura di OpenGL obbliga quindi i programmatori ad avere una buona conoscenza della pipeline grafica stessa, ma al contempo lascia una certa libertà per implementare complessi algoritmi di rendering.
Storicamente, OpenGL ha esercitato una notevole influenza sullo sviluppo degli acceleratori 3D, promuovendo un livello base di funzionalità che è oggi comune nelle schede video destinate al grande pubblico:
punti, linee e poligoni disegnati come primitive base;
una pipeline per il transform and lighting;
Z-buffering
Texture mapping
Alpha blending
Una delle caratteristiche più apprezzate in ambito professionale è la retrocompatibilità tra le diverse versioni di OpenGL: programmi scritti per la versione 1.0 della libreria devono funzionare senza modifiche su implementazioni che seguono la versione 2.1.
Esempio di codice sorgente
Di seguito un semplice programma in C che disegna utilizzando le primitive OpenGL un triangolo:
/*************************************************************
* Per compilare con gcc su Linux: *
* gcc file.c -lglut *
* oppure: *
* gcc file.c -L/usr/X11R6/lib -lglut -lXmu -lGL -lGLU -lXi *
*************************************************************/
#include <GL/gl.h> // File header per la libreria OpenGL
#include <GL/glut.h> // File header per la libreria GLUT
#include <stdlib.h> // File header per usare 'exit()'
/* Funzione invocata quando la finestra viene ridimensionata (anche quando viene creata) */
void
resize (int width, int height)
{
glViewport (0, 0, width, height); // Usiamo tutta finestra
glMatrixMode (GL_PROJECTION); // Seleziona di usare la matrice 'PROJECTION'
glLoadIdentity (); // Resetta la matrice 'PROJECTION'
glMatrixMode (GL_MODELVIEW); // Seleziona di usare la matrice 'MODELVIEW'
glLoadIdentity (); // Resetta la matrice 'MODELVIEW'
}
/* Funzione di disegno */
void
draw ()
{
glClear (GL_COLOR_BUFFER_BIT); // Cancella la scena
glClearColor (0.0f, 0.0f, 0.0f, 0.0f); // Sfondo nero
glBegin (GL_TRIANGLES); // Disegna un triangolo
glColor3f (1.0f, 0.0f, 0.0f); // Impostiamo il colore rosso
glVertex3f ( 0.0f, 0.5f, 0.0f); // Angolo in alto
glColor3f (0.0f, 1.0f, 0.0f); // Imposta il colore verde
glVertex3f (-0.5f, -0.5f, 0.0f); // Angolo basso sinistro
glColor3f (0.0f, 0.0f, 1.0f); // Imposta il colore blu
glVertex3f (0.5f, -0.5f, 0.0f); // Angolo basso destro
glEnd (); // Fine triangolo
glutSwapBuffers (); // Disegna!
}
/* Funzione invocata ogni volta che viene premuto un tasto */
void
keyPressed (unsigned char key, int x, int y)
{
if (key == 'q') // Se il tasto premuto e` q,
exit (0); // esce
}
/* Main */
int
main (int argc, char **argv)
{
glutInit (&argc, argv); // Inizializza la libreria GLUT
glutInitDisplayMode (GLUT_RGB|GLUT_DOUBLE); // Seleziona il modo di visualizzazione: usa RGB e double buffer
glutInitWindowSize (640, 480); // Imposta la dimensione della finestra a 640x480
glutInitWindowPosition (0, 0); // Imposta la posizione dell'angolo alto sinistro della finestra
glutCreateWindow ("Esempio uso OpenGL"); // Crea la finestra
glutDisplayFunc (draw); // Imposta la funzione di disegno
glutReshapeFunc (resize); // Imposta la funzione di ridimensionamento
glutKeyboardFunc (keyPressed); // Imposta la funzione per gli eventi della tastiera
glutMainLoop (); // Inizio
return (1);
}
Estensioni
Lo standard OpenGL permette ai produttori individuali di fornire funzionalità aggiuntive tramite le estensioni man mano che vengono create nuove tecnologie. Un'estensione viene poi distribuita in due parti: come file di intestazione che contiene i prototipi di funzione dell'estensione, e come driver del produttore. Ogni produttore ha un'abbreviazione alfabetica che viene usata nel denominare le loro nuove funzioni e costanti. Per esempio, l'abbreviazione di NVIDIA (NV) viene usata nel definire la loro funzione proprietaria glCombinerParameterfvNV() e la loro costante GL_NORMAL_MAP_NV. Può succedere che più produttori si accordino per implementare la stessa funzionalità estesa.
In tal caso, si usa l'abbreviazione EXT. Può anche accadere che l'ARB approvi l'estensione. Allora essa diventa nota come una estensione standard, e si usa l'abbreviazione ARB. La prima estensione ARB è stata la GL_ARB_multitexture. Avendo seguito il percorso di promozione per le estensioni ufficiali, la multitexture non è più un'estensione ARB implementata opzionalmente, ma è stata integrata nell'API base di OpenGL a partire dalla versione 1.4. Le specifiche per quasi tutte le estensioni si trovano nel repository ufficiale delle estensioni: [1].
Varie librerie sono state costruite sopra OpenGL per fornire funzionalità non disponibili in OpenGL stesso:
GLU
GLUT
GLUI
In particolare, la libreria OpenGL Performer, sviluppata da SGI e disponibile per IRIX, Linux, e varie versioni di Microsoft Windows, si appoggia a OpenGL per abilitare la creazione di applicazioni di simulazione visuale in real-time.
Binding
Lo standard OpenGL permette ai produttori individuali di fornire funzionalità aggiuntive tramite le estensioni man mano che vengono create nuove tecnologie. Un'estensione viene poi distribuita in due parti: come file di intestazione che contiene i prototipi di funzione dell'estensione, e come driver del produttore. Ogni produttore ha un'abbreviazione alfabetica che viene usata nel denominare le loro nuove funzioni e costanti. Per esempio, l'abbreviazione di NVIDIA (NV) viene usata nel definire la loro funzione proprietaria glCombinerParameterfvNV() e la loro costante GL_NORMAL_MAP_NV. Può succedere che più produttori si accordino per implementare la stessa funzionalità estesa.
In tal caso, si usa l'abbreviazione EXT. Può anche accadere che l'ARB approvi l'estensione. Allora essa diventa nota come una estensione standard, e si usa l'abbreviazione ARB. La prima estensione ARB è stata la GL_ARB_multitexture. Avendo seguito il percorso di promozione per le estensioni ufficiali, la multitexture non è più un'estensione ARB implementata opzionalmente, ma è stata integrata nell'API base di OpenGL a partire dalla versione 1.4. Le specifiche per quasi tutte le estensioni si trovano nel repository ufficiale delle estensioni: [1].
Varie librerie sono state costruite sopra OpenGL per fornire funzionalità non disponibili in OpenGL stesso:
GLU
GLUT
GLUI
In particolare, la libreria OpenGL Performer, sviluppata da SGI e disponibile per IRIX, Linux, e varie versioni di Microsoft Windows, si appoggia a OpenGL per abilitare la creazione di applicazioni di simulazione visuale in real-time.
Funzionalità ad alto livello
OpenGL è stato progettato per essere di solo output: fornisce solamente funzioni di rendering. L'API di base non contempla la gestione di finestre, l'audio, la stampa, la tastiera, il mouse, né altri dispositivi di input. Per quanto questo possa sembrare restrittivo, permette al codice di rendering di essere completamente indipendente dal sistema operativo su cui funziona, permettendo lo sviluppo di codice indipendente dalla piattaforma. Tuttavia, per consentire un'interazione con il sistema ospitante, è necessario integrare il software con il sistema a finestre nativo. Ciò viene effettuato tramite le seguenti API aggiuntive:
GLX - X11 (comprensivo di trasparenza di rete)
WGL - Microsoft Windows
In aggiunta le librerie GLUT e SDL forniscono funzionalità per una gestione elementare delle finestre con OpenGL, in maniera portabile. Mac OS X ha tre API per ottenere il supporto di OpenGL: AGL per Carbon, NSOpenGL per Cocoa e Core OpenGL (CGL) per l'accesso diretto.
Storia
OpenGL è un'evoluzione di (ed ha uno stile molto simile a) IRIS GL, l'interfaccia 3D di SGI. Una delle restrizioni di IRIS GL era che forniva accesso solamente alle caratteristiche supportate dall'hardware soggiacente. Se l'hardware grafico non supportava una caratteristica, allora l'applicazione non poteva usarla. OpenGL ha superato questo problema fornendo supporto via software per le caratteristiche non supportate dall'hardware, permettendo alle applicazioni di usare della grafica avanzata su sistemi di potenza relativamente bassa. Il progetto Fahrenheit fu uno sforzo congiunto fra Microsoft, SGI, e Hewlett-Packard con l'obiettivo di unificare le interfacce OpenGL e Direct3D. Inizialmente ha mostrato qualche promessa di portare ordine nel mondo delle API di computer grafica 3D interattiva, ma a causa dei vincoli finanziari in SGI e alla generale carenza si supporto nell'industria, è stato poi abbandonato.
Il futuro in Microsoft Windows
Il 6 agosto 2005, quelle che in principio erano le intenzioni di Microsoft riguardo al supporto di OpenGL in Windows Vista vennero rivelate in un annuncio di notizie su Opengl.org:
I piani attuali di Microsoft per OpenGL su Windows Vista sono di appoggiare OpenGL sopra Direct3D al fine di usare OpenGL su un desktop composito per ottenere l'esperienza Aeroglass. Se si esegue un ICD OpenGL - il desktop compositor si spegnerà - degradando significativamente l'esperienza dell'utente.
In pratica, per OpenGL sotto Aeroglass, ciò significa:
Le prestazioni di OpenGL verranno significativamente ridotte - forse fino al 50%.
OpenGL su Windows verrà portata ad una versione base di OpenGL 1.4.
Nessuna estensione sarà possibile per esporre future innovazioni hardware.
Sarebbe tecnicamente immediato fornire un ICD OpenGL (installable client driver, cioè un driver specifico per OpenGL) all'interno dell'intera esperienza Aeroglass senza compromettere la stabilità o la sicurezza del sistema operativo. Appoggiare OpenGL su Direct3D è una decisione più strategica che tecnica.
Allora, il futuro di OpenGL come libreria principale per i video giochi sembrava precario. Microsoft aveva preso la decisione di non rilasciare le informazioni necessarie per permettere a terze parti (come NVIDIA, ATI o gli altri grandi costruttori di schede) di sviluppare i driver di sostituzione, non lasciando modo di evitare il calo di velocità del 50%.
Forse proprio a seguito delle pressioni che giungevano dal mondo dell'industria del software e dagli stessi produttori hardware, Microsoft ha in seguito rivisto questa politica e sono oggi disponibili ICD in grado di funzionare senza problemi in unione al sottosistema Aeroglass, senza calo di prestazioni. Si veda a tal proposito la presentazione relativa ad OpenGL su Windows Vista rilasciata da NVIDIA al SIGGRAPH 2006 [4].
Così come per il predecessore Windows XP, anche il CD di installazione di Windows Vista non include alcun ICD, che dovrà essere installato a cura dell'utente. In mancanza di un ICD, Vista fornisce comunque funzionalità OpenGL 1.4 senza estensioni, attraverso uno strato di emulazione basato su Direct3D.
Il futuro di OpenGL in ambito videoludico è quindi ora nelle mani dei produttori di videogiochi, i quali non sembrano comunque molto propensi all'utilizzo di questa API, come dimostrerebbe anche una decisione di uno dei suoi più illustri sostenitori in questo ambito, ovvero John Carmack di id Software. Quest'ultimo ha infatti (EN) affermato al (EN) QuakeCon 2005 che la sua principale piattaforma di sviluppo sarà Xbox 360, che infatti si appoggia a DirectX. (questa cosa è stata SMENTITA)
OpenGL 2.0
OpenGL 2.0 è stato concepito da 3Dlabs per soddisfare le preoccupazioni che OpenGL fosse stagnante e mancasse di una forte direzione. 3Dlabs ha proposto alcune grosse aggiunte allo standard, la più significativa delle quali fu GLSL (da OpenGL Shading Language, cioè il linguaggio di shading di OpenGL). Questo consentirebbe ai programmatori di sostituire il codice prefissato di OpenGL per le pipeline di elaborazione dei vertici e dei frammenti con gli shader scritti in un linguaggio simile al C. GLSL era notevole per il fatto di non adeguarsi all'hardware allora disponibile; questo era un ritorno alla tradizione di OpenGL di porsi degli obiettivi ambiziosi e proiettati al futuro per nuovi acceleratori 3D, invece di limitarsi a inseguire lo stato dell'hardware attualmente disponibile. La specifica finale di OpenGL 2.0 [5] comprendeva il supporto a GLSL, ma ometteva molte delle altre caratteristiche originalmente proposte - queste sono state differite a versioni future di OpenGL, sebbene alcune siano già disponibili come estensioni.
Collegamenti esterni
- Perfavore, Entra oppure Registrati per vedere i Link!
- Perfavore, Entra oppure Registrati per vedere i Link!
- Perfavore, Entra oppure Registrati per vedere i Link!
- Perfavore, Entra oppure Registrati per vedere i Link!
- Perfavore, Entra oppure Registrati per vedere i Link!
- Perfavore, Entra oppure Registrati per vedere i Link!
Risorse per programmatori
- Perfavore, Entra oppure Registrati per vedere i Link!
- Perfavore, Entra oppure Registrati per vedere i Link!
- Perfavore, Entra oppure Registrati per vedere i Link!
- Perfavore, Entra oppure Registrati per vedere i Link!
- Perfavore, Entra oppure Registrati per vedere i Link!
- Perfavore, Entra oppure Registrati per vedere i Link!