29/04/2022
I en verden, hvor grafisk ydeevne og brugervenlige grænseflader er afgørende, spiller underliggende teknologier en monumental rolle. En af disse fundamentale teknologier, især inden for Unix-lignende operativsystemer, er GLX. GLX, en forkortelse for "OpenGL Extension to the X Window System", er mere end blot en teknisk term; det er en afgørende bro, der muliggør, at avancerede 3D-grafikapplikationer, der anvender OpenGL, kan fungere problemfrit inden for rammerne af X Window System. Denne udvidelse er ikke kun en grænseflade mellem to systemer, men inkluderer også sine egne udvidelser til selve OpenGL, hvilket forbedrer funktionaliteten og fleksibiliteten betydeligt for udviklere. Forståelsen af GLX er nøglen til at afkode, hvordan grafiske programmer interagerer med operativsystemets visuelle subsystem, og hvordan de udnytter den underliggende hardware til at levere de rige, dynamiske oplevelser, vi kender i dag.

GLX er grundlæggende designet til at give programmer, der ønsker at udnytte OpenGL's kraftfulde grafiske funktioner, mulighed for at gøre det inden for et vindue leveret af X Window System. Dette er essentielt, da X Window System er den dominerende grafiske grænseflade for mange Linux- og Unix-baserede systemer. Uden en mekanisme som GLX ville OpenGL-applikationer have svært ved at tegne deres grafik direkte på skærmen under X. Systemet skelner mellem to hovedtilstande: indirekte tilstand og direkte tilstand. Den indirekte tilstand involverer, at grafikkommandoer sendes fra klientapplikationen til X-serveren, som derefter behandler dem. Den direkte tilstand, der ofte anvendes for højtydende applikationer som spil, giver applikationen direkte adgang til grafikkortet, hvilket minimerer overhead og maksimerer ydeevnen. Disse to tilstande giver GLX en alsidighed, der tillader den at understøtte en bred vifte af applikationer, fra simple grafiske værktøjer til komplekse 3D-renderingsprogrammer.
Historien og Udviklingen af GLX
Historien om GLX er en fortælling om innovation og samarbejde inden for open source-verdenen. GLX blev oprindeligt udviklet af Silicon Graphics (SGI) som en del af deres bestræbelser på at integrere og understøtte OpenGL i X Window System. SGI var på det tidspunkt en pioner inden for professionel grafikhardware og -software, og deres engagement i OpenGL var centralt for mange af deres produkter. I 1999 tog SGI et skelsættende skridt ved at frigive GLX under en open source-licens. Denne handling var afgørende, da den muliggjorde, at GLX blev inkorporeret i XFree86-kildekoden, specifikt i version 4.0 i år 2000. Fra XFree86 blev koden senere arvet af den forgrenede X.Org Foundation version af X Window System, X11R6.7.0. Dette sikrede GLX's udbredelse og fortsatte udvikling som en central komponent i Linux- og Unix-grafikstakken.
En yderligere milepæl i GLX's historie indtraf den 19. september 2008, da SGI skabte en ny SGI FreeB License Version 2.0. Denne licens blev designet til at "spejle den frie X11-licens, der anvendes af X.Org", og den "opfylder det frie og open source softwarefællesskabs bredt accepterede definition af 'fri'". Dette var et vigtigt skridt for at cementere GLX's status som open source software, hvilket blev yderligere bekræftet i 2009, da Free Software Foundation (FSF) godkendte SGI Free License B som en fri softwarelicens og anerkendte GLX som et vigtigt fri softwaregrafikprojekt. Dette engagement i åbenhed har været afgørende for GLX's levetid og relevans. Siden da har GLX gennemgået flere iterationer og forbedringer, og fra 2011 havde den nået version 1.4, hvilket indikerer en moden og stabil teknologi, der fortsat er rygraden i mange grafiske applikationer.

Tekniske Implementeringer og Moderne Udvikling
Den første interne implementering af GLX API, kendt som GLcore, fungerede ved at indlæse en software-renderingsversion af Mesa direkte inde i X-serveren. Dette gjorde det muligt at rendere OpenGL-kommandoer i et vindue eller en pixmap, hvilket effektivt skabte den visuelle output. Med udviklingen af Direct Rendering Infrastructure (DRI) blev muligheden for at anvende hardwareacceleration til OpenGL gennem direkte kontekster tilføjet. Dette var et kæmpe skridt fremad, især for applikationer, der krævede høj ydeevne som videospil, da det tillod applikationer at omgå X-serveren og interagere direkte med grafikkortet, hvilket reducerede latens og øgede billedhastigheden markant.
I 2006 førte populariseringen af den indlejrede Xgl X-server og Compiz compositing window manager til udviklingen af Accelerated Indirect GLX (AIGLX). AIGLX var en revolution inden for GLX-implementeringer, da den bragte hardwareacceleration til GLX's indirekte kontekstapplikationer ved at indlæse Mesa DRI-driveren inde i X-serveren. Denne metode havde flere fordele: den muliggjorde deling af GL-objekter mellem X-klienter, der brugte indirekte kontekster (da de alle var i samme adresseplads i X-serveren), og også mellem en X-klient og den compositing window manager, hvilket accelererede kompositionen og skabte mere flydende desktop-effekter. I 2008 blev bindingen i GLcore til Mesa software-rendereren omskrevet som et DRI-interface-modul, kaldet swrast_dri.so, hvilket forbedrede koblingen mellem Mesa og X-serveren yderligere.
Samme år, i 2008, blev den nye DRI2 introduceret for at erstatte den oprindelige DRI. DRI2 kom med en ny model baseret på Kernel Mode-setting (KMS), som flyttede grafikkortets tilstandsindstillinger fra brugerrummet til kernen, hvilket forbedrede stabilitet og sikkerhed. I 2011 startede Glamor-projektet med det formål at tilføje en generisk hardwareaccelereret 2D X-driver baseret på OpenGL. Dette projekt sigtede mod at udnytte den eksisterende OpenGL-acceleration til at forbedre 2D-grafikydelsen i X. I 2013 udførte Adam Jackson en større omskrivning af GLX-koden for at konsolidere de forskellige stier fra Glamor, indirekte rendering osv. til én unik sti til OpenGL's bibliotek libGL. Denne konsolidering strømlinede arkitekturen og gjorde GLX mere robust og lettere at vedligeholde, hvilket sikrer dens fortsatte relevans i moderne grafiksystemer.
Nøglefunktioner og Arkitektur
GLX er et komplekst system, der består af tre primære komponenter, som arbejder sammen for at levere OpenGL-funktioner til X Window System-applikationer:
- En API, der leverer OpenGL-funktioner til en X Window System-applikation: Dette er den del, som applikationsudviklere interagerer med. Det er et sæt funktioner og rutiner, der gør det muligt for en OpenGL-applikation at anmode om grafiske operationer og manipulere grafikdata inden for X Window System-miljøet. Denne API abstraherer de underliggende kompleksiteter af at tegne på skærmen og give adgang til grafikkortets muligheder.
- En udvidelse af X-protokollen, som tillader klienten (OpenGL-applikationen) at sende 3D-renderingkommandoer til X-serveren (softwaren ansvarlig for visningen): Denne del er kritisk for fjernrendering. Da klienten og serveren kan køre på forskellige computere, er X-protokollen udvidet til at inkludere specifikke meddelelser for 3D-grafikkommandoer. Dette betyder, at en applikation, der kører på én maskine, kan sende OpenGL-kommandoer til en X-server, der kører på en anden maskine, som så renderes og vises lokalt der.
- En udvidelse af X-serveren, der modtager renderingkommandoerne fra klienten og videresender dem til det installerede OpenGL-bibliotek: X-serveren fungerer her som en mellemmand. Den modtager de OpenGL-kommandoer, der er sendt via X-protokollen, og oversætter dem til kald til det faktiske OpenGL-bibliotek (f.eks. Mesa eller en proprietær driver). Serverudvidelsen er ansvarlig for at administrere grafikkontekster, teksturer og andre OpenGL-tilstande på serversiden.
I tilfælde hvor klient og server kører på samme computer, og et accelereret 3D-grafikkort med en passende driver er tilgængeligt, kan de to førstnævnte komponenter – API'en og X-protokollen – omgås af DRI. Når DRI er aktiveret, får klientapplikationen direkte adgang til videohardwaren gennem flere API-lag. Dette fjerner behovet for at sende kommandoer via X-serveren, hvilket minimerer overhead og giver en betydelig ydeevneforbedring. Dette direkte adgangsmønster er essentielt for moderne spil og andre højtydende grafiske applikationer, der kræver minimal latens og maksimal gennemstrømning.

Sammenligning: GLX og Andre Grafikgrænseflader
GLX er ikke den eneste grænseflade, der forbinder et grafik-API som OpenGL med et underliggende vinduessystem. Forskellige operativsystemer har udviklet deres egne tilsvarende teknologier for at opnå lignende funktionalitet. Her er en sammenlignende oversigt over GLX og nogle af dens vigtigste modparter:
| Grænseflade | Formål | Operativsystem/Platform | Nøglefunktion |
|---|---|---|---|
| GLX | OpenGL Extension to X Window System | Linux, Unix (X Window System) | Giver OpenGL-applikationer mulighed for at tegne i X-vinduer, understøtter indirekte og direkte rendering. |
| WGL | Windows Graphics Library | Microsoft Windows | Den tilsvarende grænseflade til OpenGL på Windows, der håndterer pixelformater, gengivelseskontekster og enhedskontekster. |
| CGL | Core Graphics Library | macOS | Apple's grænseflade til OpenGL på macOS, integreret med Core Graphics-rammeværket. |
| EGL | Embedded-System Graphics Library | Cross-platform (især indlejrede systemer, mobile enheder) | En grænseflade mellem OpenGL ES eller VG og det underliggende native platforms vinduessystem. Mere generisk og fleksibel. |
| GLUT | OpenGL Utility Toolkit | Cross-platform | Et bibliotek af hjælpefunktioner til OpenGL-programmer, der forenkler vindues- og inputhåndtering, men ikke en direkte grænseflade til vinduessystemet som de andre. |
Som det fremgår af tabellen, er hver grænseflade specialiseret til sit respektive operativsystem eller sin platform. Mens GLX er uundværlig for OpenGL-applikationer i X Window System-miljøer, udfylder WGL den samme rolle for Windows, og CGL for macOS. EGL er interessant, da den er designet til at være mere cross-platform og fleksibel, især for indlejrede systemer og mobile enheder, hvor en letvægts- og tilpasningsdygtig grænseflade er afgørende. GLUT er et hjælpebibliotek, der kan bruges oven på disse grænseflader for at forenkle udviklingen, men det er ikke en direkte vinduessystemgrænseflade i sig selv.
Klarificering: GLX-teknologien vs. Selskabet GLX
Det er vigtigt at bemærke en potentiel kilde til forvirring, der kan opstå, når man taler om "GLX". Den primære diskussion i denne artikel har fokuseret på GLX-teknologien, som er en OpenGL-udvidelse til X Window System, udviklet af Silicon Graphics og nu en del af open source-økosystemet. Denne teknologi er et stykke software, der faciliterer grafisk rendering på Linux- og Unix-platforme.
Imidlertid findes der også et selskab ved navn "GLX", som nævnes i nogle kilder og har en helt anden forretningsmodel og formål. Ifølge informationer er dette selskab grundlagt af Damien Criddle, som også fungerer som dets administrerende direktør. Selskabet ledes af Rob Cole som bestyrelsesformand, en tidligere direktør hos Woodside Petroleum. Andre ledende medarbejdere inkluderer EVP for forretningsudvikling og strategi, Cameron Whitton, og direktør Dr. Philip Home. Dette selskab "GLX" opererer tydeligvis inden for en anden industri, sandsynligvis inden for energi eller lignende, givet Rob Coles baggrund. Der er ingen indikationer på, at dette selskab har nogen direkte forbindelse til eller ejerskab over GLX-teknologien (OpenGL Extension til X Window System). Teknologien er, som tidligere nævnt, open source og vedligeholdes af fællesskabet, primært under X.Org Foundation. Det er derfor afgørende at skelne skarpt mellem den grafiske teknologi GLX og ethvert selskab, der måtte bære det samme navn, for at undgå misforståelser.
Ofte Stillede Spørgsmål om GLX
- Hvad er det primære formål med GLX?
- GLX's primære formål er at fungere som en grænseflade og udvidelse, der tillader OpenGL-baserede 3D-grafikapplikationer at tegne deres output inden for X Window System-miljøet, som er standarden for grafiske grænseflader på mange Linux- og Unix-systemer.
- Hvem udviklede oprindeligt GLX-teknologien?
- GLX-teknologien blev oprindeligt udviklet af Silicon Graphics (SGI) som en del af deres indsats for at understøtte OpenGL i X Window System.
- Er GLX open source?
- Ja, GLX blev frigivet af SGI under en open source-licens i 1999 og er siden blevet en integreret del af X.Org Foundation's X Window System, hvilket bekræfter dens status som open source software.
- Hvad er forskellen mellem indirekte og direkte GLX-tilstande?
- I den indirekte tilstand sendes grafikkommandoer fra applikationen til X-serveren for behandling, hvilket kan introducere latens. I den direkte tilstand får applikationen (via DRI) direkte adgang til grafikkortet, hvilket reducerer overhead og forbedrer ydeevnen markant, ideelt for højtydende grafik som spil.
- Hvad er AIGLX, og hvorfor er det vigtigt?
- AIGLX (Accelerated Indirect GLX) er en udvikling, der bragte hardwareacceleration til GLX's indirekte kontekstapplikationer ved at indlæse Mesa DRI-driveren i X-serveren. Det er vigtigt, fordi det muliggjorde accelereret komposition og deling af GL-objekter mellem applikationer og compositing window managere, hvilket forbedrede desktop-effekter og ydeevne.
- Hvordan adskiller GLX sig fra WGL eller CGL?
- GLX, WGL og CGL tjener alle det formål at forbinde OpenGL med et underliggende vinduessystem, men de er specifikke for forskellige platforme: GLX er til X Window System (Linux/Unix), WGL er til Microsoft Windows, og CGL er til macOS. Hver har sin egen implementering og API-detaljer tilpasset platformen.
- Er der en forbindelse mellem GLX-teknologien og selskabet GLX, som er grundlagt af Damien Criddle?
- Nej, ifølge de tilgængelige oplysninger er der ingen direkte forbindelse eller ejerskab mellem den open source GLX-teknologi (OpenGL Extension til X Window System) og selskabet GLX, som er grundlagt af Damien Criddle. De er to forskellige enheder; den ene er en grafisk teknologi, den anden et selskab i en muligvis urelateret industri.
Hvis du vil læse andre artikler, der ligner Dybdegående Blik på GLX-teknologien, kan du besøge kategorien Teknologi.
