OpenGL
OpenGL (da Open Graphics Library, ossia libreria aperta di grafica) è una specifica che definisce una API per più linguaggi e per più piattaforme per scrivere applicazioni che producono computer grafica 3D e 2D. L'interfaccia consiste in circa 250 diverse chiamate di funzione che si possono usare per disegnare complesse sxcene tridimensionali da semplici primitive. È molto usato nell'industria dei videogiochi (nella quale compete con Direct3D su Microsoft Windows). OpenGL viene usato anche per applicazioni di CAD, realtà virtuale, e CAE.
Esistono implementazioni efficienti di OpenGL (che sfruttano in modo più o meno completo le GPU) per Microsoft Windows, molte piattaforme Unix, la Playstation 3, e il Mac OS. Queste implementazioni vengono normalmente fornite dai costruttori di dispositivi video e si affidano pesantemente sull'hardware fornito dal costruttore. 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 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 in 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 novembre del 2004 erano: 3Dlabs, Apple Computer, ATI Technologies, Dell, Evans & Sutherland, Hewlett-Packard, IBM, Intel, Matrox, NVIDIA, SGI e Sun Microsystems. (Microsoft, uno dei membri fondatori, se n'è andato nel marzo del 2003.)
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 propriataria glCombinerParameterfvNV()
e la loro costante GL_NORMAL_MAP_NV
.
Può succedere che più di un produttore si accordi 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:
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
Al fine di imporre le sue caratteristiche multi-linguaggio e multi-piattaforma, vari bindings e port sono stati sviluppati per OpenGL in molti linguaggi. Tra i più notevoli, la libreria Java 3D può appoggiarsi su OpenGL per sfruttare l'accelerazione hardware. Molto recentemente, Sun ha rilasciato le versioni beta del sistema JOGL, che fornisce binding ai comandi OpenGL in C, diversamente da Java 3D che non fornisce tale supporto a basso livello. la pagina OpenGL ufficiale [2] elenca vari bindings per i linguaggi Java, Fortran 90, Perl, Pike, Python, Ada, e Visual Basic. I binding sono disponibili anche per C++ e C#, vedere [3].
Funzionalità ad alto livello
OpenGL è sato 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 può 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 manera portabile. Mac OS X ha tre API per ottenere il supporto di OpenGL: AGL per Carbon, NSOpenGL per Cocoa e 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], le intenzioni di Microsoft riguardo al supporto di OpenGL in Windows Vista sono state 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.
Pertanto, il futuro di OpenGL come libreria principale per i video giochi adesso appare precario. Microsoft ha 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%. Un impiegato di 3Dlabs afferma nello stesso thread di Opengl.org:
Questa informazione è giunta dal BOF OpenGL tenuto al Siggraph 2005 a Los Angeles la sera di mercoledì scorso. È stato confermato al BOF da NVIDIA, ATI e da noi (3Dlabs).
Non appena viene caricato un ICD, il desktop composito si spegne su Windows Vista. Se volete l'esperienza Aeroglass del desktop composito, avrete bisogno di far passare la vostra applicazione attraverso l'implementazione OpenGL di Microsoft, che è appoggiata sopra DirectX. Come evidenziato prima, questa stratificazione può avere un impatto sulle prestazioni. La loro implementazione supporta solo la versione 1.4 di OpenGL, senza supporto per le estensioni.
Noi crediamo sia possibile fornire un ICD con pieno supporto per il desktop composito mantenendo l'aderenza ai requisiti di robustezza e sicurezza di Windows Vista. Ma ci serve l'aiuto di Microsoft per farlo.
Per avere ulteriori informazioni, si possono consultare le seguenti diapositive presentate al Microsoft Winhec:
"Windows Graphics Overview [WinHEC 2005; 171 KB]" http://download.microsoft.com/download/9/8/f/98f3fe47-dfc3-4e74-92a3-088782200fe7/TWPR05007_WinHEC05.ppt
"Advances in Display and Composition Architecture for Windows [WinHEC 2005; 422 KB]" http://download.microsoft.com/download/9/8/f/98f3fe47-dfc3-4e74-92a3-088782200fe7/TWPR05005_WinHEC05.ppt
OpenGL 2.0
OpenGL 2.0 was conceived of by 3Dlabs to address concerns that OpenGL was stagnating and lacked a strong direction. 3Dlabs proposed a number of major additions to the standard, the most significant of which was GLSL (the OpenGL Shading Language). This would enable the programmer to replace the OpenGL fixed-function vertex and fragment pipelines with shaders written in a C-like language. GLSL was notable for making relatively few concessions to the limitations of the hardware then available; this harked back to the earlier tradition of OpenGL setting ambitious, forward-looking targets for new 3D accelerators rather than merely tracking the state of currently available hardware. The final OpenGL 2.0 spec [4] included support for GLSL, but omitted many of the other features originally proposed - these were deferred to future versions of OpenGL, although some are now available as extensions.
Further reading
- Fosner, Ron: OpenGL Programming for Windows 95 and Windows NT, Addison Wesley, ISBN 0-201-40709-4
- OpenGL Architecture Review Board, et al: OpenGL Reference Manual: The Official Reference Document to OpenGL, Version 1.4, Addison Wesley, ISBN 0-321-17383-X
- Rost, Randi J.: OpenGL Shading Language, Addison Wesley, ISBN 0-321-19789-5
- OpenGL Architecture Review Board, et al: OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 1.4, Fourth Edition, Addison Wesley, ISBN 0-321-17348-1
External links
- 2D to 3D surface conversion and texture manipulation routines by Walter Muncaster (User:0waldo)
- Official website
- Tutorials and learning material from Neon Helium Productions
- Online copy of an early edition of The OpenGL Programming Guide
Programmer resources
- CodeSampler.com - Code samples and tutorials for OpenGL game programming.
- OpenGL Directory - Compilation of resources and links for anything OpenGL.
- OpenGL Lighting Model
- Basic OpenGL Lighting - an explanation of the standard OpenGL lighting by Steve Baker