Cette question est presque impossible de répondre, car l'OpenGL en lui-même est juste un avant la fin de l'API, et tant qu'une des implémentations conforme à la spécification et le résultat est conforme à ce qu'il peut être fait de toute façon que vous aimez.
La question pourrait être: Comment un pilote OpenGL travail sur le niveau le plus bas. Maintenant, c'est de nouveau impossible de répondre en général, comme un pilote est étroitement liée à certains éléments de matériel, ce qui peut encore faire des choses cependant, le développeur l'a conçu.
Donc, la question: "Comment est-il en moyenne dans les coulisses de l'OpenGL et le système graphique?". Regardons cela de bas en haut:
Au niveau le plus bas, il y a quelques périphériques graphiques. Aujourd'hui, ce sont les Gpu qui fournissent un ensemble de registres de contrôle de leur fonctionnement (qui enregistre est exactement dépend de l'appareil) ont un peu de mémoire de programme pour les shaders, mémoire de masse pour les données d'entrée (les sommets, les textures, etc.) et un canal d'e/S pour le reste du système au cours de laquelle il reçoit/envoie des données de commande et de ruisseaux.
Le pilote graphique assure le suivi de la Gpu de l'état et de toutes les ressources des programmes d'application qui utilisent le GPU. Il est également responsable de la conversion ou de tout autre traitement des données envoyées par les applications (convertir des textures dans la pixelformat pris en charge par le GPU, la compilation des shaders dans le code machine de la GPU). En outre, il fournit une solution abstraite, pilote dépendante de l'interface de l'application des programmes.
-
Puis il y a le pilote dépendante OpenGL client library/pilote. Sur Windows, cela devient
chargé par procuration à travers opengl32.dll sur les systèmes Unix, cela réside dans deux endroits:
- X11 module GLX et pilote dépendante GLX pilote
- et /usr/lib/libGL.peut contenir certains pilotes dépendante des trucs pour le rendu direct
Sous MacOS X, ce qui se passe pour être le "OpenGL Cadre".
C'est cette partie qui traduit les appels OpenGL comment vous le faites dans les appels vers le pilote de fonctions spécifiques dans le cadre du conducteur décrit au paragraphe (2).
Enfin, le réel OpenGL API de la bibliothèque, opengl32.dll dans Windows, et sur Unix /usr/lib/libGL.de la sorte; ce la plupart du temps juste passe les commandes à l'implémentation OpenGL bon.
Comment la communication réelle qui se passe ne peuvent pas être généralisées:
Dans Unix 3<->4 connexion peut se produire soit sur les Sockets (oui, il peut, et de n'aller sur le réseau si vous le souhaitez) ou par l'intermédiaire de la Mémoire Partagée. Dans Windows, l'interface de la bibliothèque et le pilote client sont à la fois chargés dans l'espace d'adressage du processus, de sorte que ce n'est pas tellement la communication, mais de simples appels de fonction et de variable/indicateur de passage. Dans MacOS X c'est similaire à celui de Windows, seulement qu'il n'y a pas de séparation entre l'interface de OpenGL et le pilote client (c'est la raison pour laquelle MacOS X est si lente à s'adapter aux nouvelles versions d'OpenGL, il nécessite toujours un système d'exploitation complet de mise à niveau pour fournir le nouveau cadre).
La Communication entre 3<->2 peut passer par ioctl, lecture/écriture, ou par le biais de la cartographie de la mémoire dans l'espace d'adressage du processus et de la configuration de la MMU pour déclencher certains pilotes de code à chaque fois que des changements pour que la mémoire est terminé. C'est tout à fait similaire sur n'importe quel système d'exploitation depuis vous de toujours avoir à traverser le noyau et l'espace utilisateur des limites: en fin de compte vous allez par le biais de certains syscall.
La Communication entre le système et le GPU se faire par la periphial bus et les méthodes d'accès qu'elle définit, donc, PCI, AGP, PCI-E, etc, qui fonctionnent à travers le Port I/O, Memory Mapped I/O, DMA, interruptions (Irq).