OpenGL

Σχεδίαση

Το πρότυπο OpenGL περιγράφει μία αφηρημένη Διεπαφή Προγραμματισμού Εφαρμογών η οποία είναι σχεδιασμένη ώστε να υλοποιείται στο υλικό υπολογιστών, παρόλο που είναι δυνατό να υλοποιηθεί πλήρως και στο λογισμικό.
Το OpenGL είναι ορισμένο ως ένα σύνολο μεθόδων (ρουτίνων) και ένα σύνολο ακεραίων σταθερών που μπορούν να κληθούν από το πρόγραμμα-πελάτη ώστε να αποδοθούν τα γραφικά. Αν και οι ορισμοί των μεθόδων είναι παρόμοιοι με αυτούς της γλώσσας προγραμματισμού C, είναι ανεξάρτητοι γλώσσας, το οποίο επιτρέπει την χρήση των μεθόδων αυτών από διάφορες γλώσσες προγραμματισμού. Από τις πιο δημοφιλείς διεπαφές του OpenGL είναι το WebGL  για φυλλομετρητές ιστοσελίδων, οι διεπαφές WGL, GLX, CGL και οι διεπαφές για iOS και Android.

Ανάπτυξη

To OpenGL είναι μία εξελισσόμενη Διεπαφή Προγραμματισμού Εφαρμογών. H κοινοπραξία Khronos Group ενημερώνει το πρότυπο OpenGL με νεότερες εκδόσεις που επεκτείνουν την διεπαφή με νέες δυνατότητες. Οι λεπτομέρειες κάθε έκδοσης αποφασίζονται από κοινού από τα μέλη την κοινοπραξίας η οποία περιλαμβάνει κατασκευαστές καρτών γραφικών, σχεδιαστές λειτουριγκών συστημάτων και εταιρίες τεχνολογίας όπως η Mozilla και η  Google.
Εκτός από τα χαρακτηριστικά που είναι απαραίτητα από την κυρίως διεπαφή, οι κατασκευαστές καρτών γραφικών μπορούν να παρέχουν επιπρόσθετες λειτουργίες στην μορφή των επεκτάσεων. Οι επεκτάσεις μπορούν να εισάγουν νέες μεθόδους (ρουτίνες), σταθερές και μπορούν να τροποποιήσουν ή και να αφαιρέσουν περιορισμούς από υπάρχουσες μεθόδους του OpenGL. Οι κατασκευαστές μπορούν να χρησιμοποιήσουν τις επεκτάσεις για δημιουργήσουν δικές τους διεπαφές χωρίς να χρειάζονται την υποστήριξη άλλων κατασκευαστών ή ολόκληρης της κοινοπραξίας, το οποίο αυξάνει σημαντικά την ευελιγία του προτύπου OpenGL. Όλες οι επεκτάσεις είναι ορισμένες και συγκεντρωμένες στο OpenGL Registry .
Κάθε επέκταση σχετίζεται με ένα αναγνωριστικό, ανάλογα με το όνομα της εταιρείας που την ανέπτυξε. Για παράδειγμα, το αναγνωριστικό της Nvidia είναι NV, το οποίο είναι μέρος του ονόματος επέκτασης GL_NV_half_float, της σταθεράς GL_HALF_FLOAT_NV, και της μεθόδου glVertex2hNV(). Αν πολλοί κατασκευαστές συμφωνούν να υλοποιήσουν την ίδια λειτουργία χρησιμοποιώντας την ίδια Διεπαφή Προγραμματισμού Εφαρμογών, μια κοινή επέκταση μπορεί να εκδοθεί με το αναγνωριστικό EXT. Σε τέτοιες περιπτώσεις, αν η κριτική επιτροπή του Khronos Group (Arhitecture Review Board) δώσει την εγκρισή της, χρησιμοποιείται το αναγνωριστικό ARB.
Τα χαρακτηριστικά που προσθέτει κάθε νέα έκδοση του OpenGL διαμορφώνονται τυπικά από τον συνδυασμό χαρακτηριστικών διάφορων επεκτάσεων, και ειδικότερα επεκτάσεων του τύπου ARB ή EXT.

Ιστορία

Την δεκαετία του 1980, η ανάπτυξη λογισμικού συμβατό με μεγάλο εύρος υλικού γραφικών ήταν μεγάλη πρόκληση. Οι προγραμματιστές λογισμικού, έγραφαν εξειδικευμένες διεπαφές για κάθε υλικό υπολογιστών το οποίο ήταν πολύ ακριβό και αυξανε κατά πολύ τον όγκο της εργασίας.
Στις αρχές τις δεκατίες του 1990, η Silicon Graphics (SGI) αποτελούσε ηγετική δύναμη στον τομέα των 3Δ γραφικών. Η Διεπαφή Προγραμματισμού Εφαρμογών IrisGL που είχαν αναπτύξει υιοθετήθηκε από την βιομηχανία και επίσκιασε το PHIGS που ήταν βασισμένο σε ανοικτά πρότυπα. Αυτό συνέβη διότι το IrisGL θεωρούνταν ευκολότερο στην χρήση και επειδή υποστήριζε απόδοση immediate mode ενώ το PHIGS ήταν δύσχρηστο και απαρχαιωμένο.
Οι ανταγωνιστές της Silicon Graphics (μεταξύ των οποίων οι Sun Microsystems, Hewlett-Packard και IBM) έφερναν στην αγορά υλικό που υποστηρίζονταν από επεκτάσεις του προτύπου PHIGS. Αυτό οδήγησε στην συρρίκνωση του μεριδίου της αγοράς της SGI καθώς περισσότεροι προμηθευτές υλικού 3Δ γραφικών έμπαιναν στην αγορά. Σε μία προσπάθεια να επηρρεάσει την αγορά, η SGI αποφάσισε να μετατρέψει το IrisGL σε ανοικτό πρότυπο το OpenGL.
Όμως, η SGI είχε πολλούς πελάτες για τους οποίους η αλλαγή από IrisGL σε OpenGL θα απαιτούσε σημαντικές επενδύσεις. Επίσης, το IrisGL είχε μεθόδους διεπαφής που δεν σχετίζονταν με 3Δ γράφικα, όπως διάχειριση παραθύρων, διαπαφές για συσκευές εισόδου (πληκτρολόγια και ποντίκια) και η βιοβλιοθήκες του IrisGL δεν μπορούσαν να ανοιχτούν λόγω θεμάτων αδειών και πατεντών. Αυτοί οι λόγοι ανάγκασαν την SGI να συνεχίσει να υποστηρίζει τις διεπαφές Iris Inventor και Iris Performer μέχρι η αγορά του OpenGL να ωριμάσει.
Ένας από του περιορισμούς του IrisGL ήταν οτι έδινε πρόσβαση μόνο σε δυνατότητες που υποστηρίζονταν από το υλικό. Αν το υλικό δεν υποστήριζε κάποια δυνατότητα τότε η εφαρμογή δεν μπορούσε να το χρησιμοποιήσει. To OpenGL ξεπέρασε αυτό το πρόβλημα με υποστήριξη μέσω λογισμικού για χαρακτηριστικά που δεν υποστηρίζονταν από το υλικό. Αυτό επέτρεψε τις εφαρμογές να χρησιμοποιούν ανώτερα γραφικά σε συστήματα χαμηλών δυνατοτήτων. To OpenGL καθιέρωσε τον τρόπο επικοινωνίας με το υλικό, ανέθεσε την ανάπτυξη των διεπαφών υλικού (device drivers) στους κατασκευαστές και την διαχείριση των παραθύρων στα λειτουργικά συστήματα. Επιτυχγάνοντας να κάνει όλα τα διαφορετικά είδη υλικού γραφικών να μιλάνε την ίδια γλώσσα, έδωσε στους προγραμματιστές μια πλατφόρμα υψηλού επιπέδου για την ανάπτυκη λογισμικού 3Δ γραφικών.
Το 1992, η SGI έπαιξε σημαντικό ρόλο στην δημιουργία του OpenGL Architecture Review Board (OpenGL ARB), την ομάδα από εταιρίες που θα συντηρούσαν και θα επέκτειναν το πρότυπο OpenGL στο μέλλον.
To 1994, η SGI πειραματίστηκε με την ιδέα του "OpenGL++" που περιείχε στοιχεία όπως διεπαφές γράφου-σκηνής. Το πρότυπο κυκλοφόρησε ανάμεσα σε διάφορους ενδιαφερόμενους αλλά δεν κατάφερε τελικά να εμπορικοποιηθεί.
Το 1995 κυκλοφόρησε το Direct3D από την Microsoft, το οποίο έγινε ο κυρίως ανταγωνιστής του OpenGL. Στις 17 Δεκεμβρίου του 1997, η Microsoft και η SGI ξεκίνησαν το Fahrenheit προτζεκτ το οποίο είχε ως στόχο την ενοποίηση του OpenGL και του Direct3D. Το 1998 η Hewlett-Packard συμμετείχε σε αυτή την προσπάθεια. Αρχικά το εγχείρημα έδειξε ότι μπορεί να φέρει την τάξη στον κόσμο των διαδραστικών 3Δ γραφικών, αλλά λόγω οικονομικών περιορισμών στην SGI, στρατηγικών αποφάσεων της Microsoft, και έλλειψη υποστήριξης από την βιομηχανία, εγκαταλείφθηκε το 1999.
Τον Ιούλιο του 2006, το OpenGL Architecture Review Board ψήφισε να μεταφέρει τον έλεγχο του προτύπου OpenGL στο Khronos Group.