# AIGLX

AIGLX (Accelerated Indirect GL X) ist eine Programmierschnittstelle zwischen dem Display-Server und der Grafikkarte bzw. den Gerätetreibern. Eine freie Implementation ist Bestandteil des X.Org-Servers. Es wurde vom Fedora-Core-Projekt (heute Fedora) mit dem Ziel entwickelt, Hardwarebeschleunigung für Display-Server nutzbar zu machen. Das Projekt konkurriert mit Xgl, welches ebenfalls beschleunigte grafische Effekte wie echte Transparenz, stufenlosen Zoom und 3D-Effekte ermöglicht.
AIGLX wird im Rahmen des X.Org-Servers entwickelt und ist ab Version 7.1 fester Bestandteil davon. Damit ist AIGLX in allen Linux-Distributionen enthalten, die den X.Org-Server in dieser Version oder neuer mit sich bringen. Treibende Kraft bei der Entwicklung ist das Fedora-Projekt. Der Grafikkarten-Hersteller Nvidia hält den Ansatz von AIGLX gegenüber Xgl ebenfalls für sinnvoller und hat angekündigt, AIGLX verstärkt zu unterstützen.

## Vergleich mit Xgl

Im Gegensatz zu Xgl verfolgt AIGLX den Ansatz, den X-Server nicht vollständig zu ersetzen, sondern inkrementell zu verbessern, indem die einzelnen Komponenten des X-Servers um die notwendige Unterstützung erweitert werden. Dabei wird die bereits bestehende Direct Rendering Infrastructure (DRI) benutzt. Dies soll nach Ansicht der AIGLX-Entwickler den Vorteil bringen, dass die Entwicklung in verhältnismäßig kleinen Schritten möglich ist. Technisch bietet es auch insbesondere im Vergleich zu Xgl den Vorteil, dass dann noch ein X-Server gestartet werden kann, wenn keine 3D-Treiber für die Grafikkarte vorliegen, da im Falle des AIGLX-Designs auch 2D-Treiber benutzt werden können.

## Arbeitsweise

Es gibt zwei Wege, auf denen ein Window-System einem/mehreren OpenGL-Programmen erlauben kann, mit der Grafikkarte zu sprechen:
Der erste Weg, der auch von AIGLX verwendet wird, ist, in einer Netzwerk-neutralen Client/Server-Implementierung ähnlich den X11-Zeichnungs-Routinen einen OpenGL-Befehlsstrom zu spezifizieren. Dieser Weg wird als indirekt bezeichnet, da die Anweisungen zum Zeichnen erst zum X-Server gesendet werden, welcher sie dann an die Grafikkarte weiterleitet. Somit trägt der X-Server die Verantwortung, mehrere Anwendungen zum Zug kommen zu lassen, hat aber ebenso die Möglichkeit, bei der Verarbeitung der Anweisungen einzugreifen.
Beim direct rendering muss sich die OpenGL-Implementierung selbst um das Scheduling der laufenden OpenGL-Anwendungen kümmern, was in den meisten Fällen weniger Overhead, aber gleichfalls weniger Eingriffsmöglichkeiten für den X-Server bedeutet.
Der von AIGLX benutzte Weg der indirekten Beschleunigung ist zwar orthogonal zur Implementierung des X-Servers selbst, erlaubt aber dem OpenGL-Befehlsstrom, einfacher aufgenommen und zu einer Textur umgeleitet zu werden. Das erlaubt es Compiz und ähnlichen Composition-Managern, auf einem traditionellen X-Server mit einer kleinen GLX-Erweiterung zu laufen, anstatt einen vollständigen neuen Xgl-Server zu erfordern. AIGLX ermöglicht zudem beschleunigtes Remote-Betrachten und das Aufteilen von OpenGL-Streams zwischen verschiedenen Monitoren und Grafikkarten.

## Aktuelle Hardwareunterstützung

AIGLX wird unabhängig von der Grafikhardware entwickelt und kann mit jeder Grafikhardware genutzt werden. Die Voraussetzung ist, dass die entsprechenden Treiber der Grafikkarte die OpenGL-Erweiterung GLX_EXT_texture_from_pixmap unterstützen. Zu den Karten, die als unterstützt gelten, gehören die ATI Radeon 7000 bis x850 (nur mit dem freien radeon-Treibermodul oder dem ebenfalls freien ati-Treibermodul) und die Intel i830 bis G45. Für Karten des Herstellers Nvidia existiert seit Oktober 2006 ein Treiber, der AIGLX unterstützt. Die Treiber der Firma AMD unterstützen die nötigen Funktionen ab Version 8.42.3 ihres Treibers.
Dies ist ein großer Unterschied und Kritikpunkt im Vergleich zum Projekt Xgl, das vor allen Dingen mit proprietären Treibern zusammen arbeitet. Dies liegt daran, dass Xgl in der Xglx-Implementierung OpenGL-Erweiterungen (z. B. GLX_EXT_texture_from_pixmap) durch den Prozessor emulieren kann, für AIGLX müssen sie jedoch im Treiber der Grafikkarte implementiert sein.