VirtualGL | |
---|---|
Skrevet i | C , C++ , Unix Shell |
Operativ system | Linux , Unix |
nyeste version | 2.6.5 ( 18. november 2020 [1] ) |
Test version | 2.6.90 (3.0 beta1) ( 16. juni 2021 ) |
Licens | GNU General Public License (GPL), wxWindows Library License |
Internet side | virtualgl.org |
VirtualGL er gratis software , der omdirigerer 3D-gengivelseskommandoer fra Unix- og Linux OpenGL -applikationer til en 3D-hardwareaccelerator på en dedikeret server og viser outputtet interaktivt ved hjælp af en tynd klient placeret et andet sted på netværket.
Typisk har tynde klienter , såsom VNC og andre til Unix og Linux, enten ikke OpenGL -understøttelse til applikationer eller vises uden brug af OpenGL-hardwareacceleration. Fjerngengivelse af hardware-accelererede 3D - applikationer kræver traditionelt brugen af "indirekte rendering".
Indirekte gengivelse bruger - udvidelsen af X Window System X11" eller "X") til at aktivere OpenGL-kommandoer inden for protokollerne og arkitekturen for X Window System og overføre dem fra applikationen til X-skærmen. Traditionelt kører applikationer på en ekstern applikationsserver, og X-skærmen kører på brugerens computer. I dette tilfælde udføres alle OpenGL-kommandoer af brugeren på computerens skrivebord, så maskinen skal have en hurtig 3D-grafikaccelerator. Dette begrænser typen af maskine, der kan fjernvise 3D-applikationer ved hjælp af denne metode.
Indirekte gengivelse kan bruges, hvis netværket er hurtigt nok (f.eks. Gigabit Ethernet ), hvis applikationen ikke skal ændre objektgeometri dynamisk, hvis applikationen bruger visningslister, og hvis applikationen ikke bruger mange teksturer . Mange OpenGL-applikationer opfylder dog ikke disse kriterier. For at komplicere sagerne yderligere, virker nogle OpenGL-udvidelser ikke med indirekte gengivelse. Nogle af disse udvidelser kræver muligheden for direkte adgang til 3D-hardwareacceleratorer og kan derfor ikke fungere indirekte. I andre tilfælde yder brugere af X-skærme muligvis ikke support til OpenGL-udvidelser, eller muligheden for at bruge kan være afhængig af specifikke hardwarekonfigurationer, som muligvis ikke er til stede på brugerens computers arbejdsstation.
Executive OpenGL-rendering på applikationsserveren omgår problemer baseret på indirekte rendering, som det er tilfældet for applikationer, der i øjeblikket har hurtig og direkte adgang til hardware 3D - rendering . Hvis 3D-gengivelse finder sted på applikationsserveren, vil kun 2D-billeder blive sendt til brugerens arbejdsplads som følge heraf. Billeder kan leveres med enhver ønsket billedhastighed, uanset hvor meget 3D-data der blev brugt til at skabe dem, og al 3D-gengivelse og effektive 3D-outputproblemer oversættes til 2D-visningsproblemer. Dette problem dukker også op, så snart der er en strøm af 1-2 megapixel grafikdata over et netværk med en variabel billedhastighed, f.eks. i teknologi ( HDTV ).
VirtualGL bruger separation til at overføre OpenGL-gengivelse til applikationsserveren . OpenGL-applikationer til Unix (Linux) sender typisk begge typer GLX X11-kommandoer og simple kommandoer til X-skærmen. GLX-kommandoer bruges til at knytte en OpenGL-gengivelseskontekst til en kontekst for et specifikt X-vindue , få en liste over farveformater, som en X-skærm understøtter, osv. VirtualGL bruger avancerede funktioner på Unix og Linux for at tillade "pre-release"-biblioteker at indlæses i en applikation til effektiv aflytning af visse funktioner, som applikationen kræver, og flyttes normalt til de delte biblioteker , som den er knyttet til. Når først VirtualGL opretter forbindelse til en Unix- eller Linux OpenGL-applikation, opfanger den GLX-funktionsopkald fra applikationer og omskriver dem, så de passende GLX-kommandoer sendes af X-skærmen til applikationsserveren, som formentlig har en hardware-3D-accelerator. På denne måde forhindrer VirtualGL GLX i at sende kommandoer over netværket til en X-skærmbruger eller til en virtuel X-skærm ("X proxy "), såsom VNC, der ikke understøtter GLX. I processen med at omskrive en GLX-anmodning omdirigerer VirtualGL også OpenGL-gengivelse til pixelbuffere uden for skærmen (Pbuffers). I mellemtiden passerer andre funktioner kaldet fra applikationer, inklusive de sædvanlige X11-kommandoer, der bruges til at udvikle en applikations brugergrænseflade, uændret gennem VirtualGL.
Den interne VirtualGL-motor understøtter også vindueskort til Pbuffere, der binder visuelle attributter mellem den tildelte X-skærm og den X-skærm, hvorpå 3D-gengivelsen finder sted, og udfører en række andre hashing-funktioner for at sikre glatte GLX-omdirigeringer. Men i det væsentlige, når OpenGL-konteksten er indstillet i X-skærmen og applikationsserveren, får VirtualGL en måde at sikre, at alle efterfølgende OpenGL-kommandoer fra applikationsserveren til 3D-hardwaren passerer problemfrit. Således kan applikationen automatisk bruge alle OpenGL-funktioner og -udvidelser, der understøttes af serverhardwaren og -drivere.
Udover at samle GLX -kommandoer og administrere dem med normalt ved overvågning glXSwapBuffers()eller glFinish() , og håndterer derefter gengivelse af pixels til et X Window-program ved hjælp af standard X-billedtegningskommandoer. VirtualGL omdirigerer GLX-kommandoer fra en udpeget X-skærm og kan bruges til at tilføje 3D-accelerationsunderstøttelse til X-proxyer (såsom VNC), samt til at forhindre indirekte OpenGL-gengivelse ved brug af en ekstern X-skærm.
Brug af VirtualGL i forbindelse med VNC eller en anden X - proxy giver flere brugere mulighed for samtidig at køre 3D-applikationer på den samme applikationsserver og flere klienter for at dele hver session. VNC og lignende programmer håndterer dog 2D-applikationer med store områder med ensfarvede farver, få farver og små områder, mens 3D-applikationer på den anden side genererer billeder med høj opløsning, komplekse farvemodeller og meget mindre korrelation mellem successive frames. . At arbejde med stort set den samme arbejdsbyrde, ved at bruge gengivelse fra OpenGL-applikationer i et X Window-miljø, såsom en videoafspiller, ved at bruge tynde klienter med off-the-shelf software , mangler typisk også en hurtig nok billedcodec til at kunne håndtere interaktive frames.
VirtualGL løser disse problemer på to måder:
TurboVNC er en forgrening af TightVNC , der accelererer sidstnævntes Tight- og JPEG-kodningsstier, delvist ved at drage fordel af indbyggede multimedieprimitiver fra Intel og Sun Microsystems . På et 100 Mbps Ethernet -netværk er TurboVNC i stand til at vise billeder i fuld skærm (1280x1024 pixels) med opfattet tabsfri billedkvalitet med over 20 billeder i sekundet. TurboVNC inkluderer yderligere optimeringer, der gør det muligt at vise billeder i fuld skærm ved 7-10 fps over bredbåndskanaler med et betydeligt, men brugbart tab i billedkvalitet. TurboVNC udvider også TightVNC til at inkludere dobbelt buffering på klientsiden og optimerede binære filer til Solaris . TurboVNC og VirtualGL bliver brugt på UT Austin Computing Center for at give TeraGrid- brugere mulighed for fjernadgang til - klyngens
Ved hjælp af VGL Image Transport komprimerer VirtualGL renderede 3D-billeder i processen ved hjælp af den samme JPEG's optimerede codec, der bruger TurboVNC. VirtualGL sender derefter de komprimerede billeder over proprietær TCP-protokol til VirtualGL Client Application, der kører på klientmaskinen. VirtualGL-klienten er ansvarlig for at dekomprimere billederne og tegne pixels ind i de tilsvarende X-vinduer. I mellemtiden sendes OpenGL display ikke-specifikke elementer af en applikation over netværket ved hjælp af standard X11 remote protokol og udføres på klientmaskinen.
Denne tilgang kræver, at X-skærme er til stede på klientmaskinen, og afhængigheden af den eksterne X11-protokol til at udføre 2. gengivelse betyder, at mange applikationer vil yde dårligt ved at bruge VGL Image Transport på netværk med høj latency. Derudover understøtter VGL Image Transport ikke i sagens natur samarbejde (flere klienter pr. session), da billeder placeres på brugernes maskiner i stedet for at blive flyttet. Men brug af VGL Image Transport giver en fuldstændig problemfri applikationsoplevelse, hvor hvert applikationsvindue svarer til et enkelt skrivebordsvindue. VGL Image Transport reducerer også serverens CPU - belastning, da 2. gengivelse sker på klienten, og VGL Image Transport tillader brugen af avancerede funktioner i OpenGL-specifikationen, såsom bufferet quad-bufferet stereo.
Udviklerne af VirtualGL introducerer de primære brugere af VGL Image Transport som brugere af en bærbar computer med 802.11 g trådløs eller hurtig Ethernet-netværksforbindelse med en applikationsserver.
VirtualGL og TurboVNC er kernekomponenterne i Sun Visualization System- produktet fra Sun Microsystems . To open source-pakker kombineret med et lukket kilde- plugin, der gør det muligt for VirtualGL at sende komprimerede billeder til Sun Rays tynde klienter og andre lukkede kilder, der integrerer VirtualGL med Sun Grid Engine , der giver ressourcestyring og 3D-grafik til fjerntliggende skriveborde. Kombinationen af disse pakker, kaldet "Sun Shared Visualization", kan også downloades gratis (kun Sun opkræver for support.)
V2.1 Scalable Visualization Array -softwaren fra HP inkluderer også komponenter, der integreres med VirtualGL og TurboVNC, så du kan skabe 3D-arbejdsområder, der kører og vises eksternt ved hjælp af en visualiseringsklynge.
Med fremkomsten af hovedløse bærbare grafikkort er VirtualGL blevet brugt i projekter som Bumblebee. Den nederste linje er, at ved fremstillingen af kombinerede videokort er det ene "indbygget" gjort fuldgyldigt, og det andet er "diskret" uden mulighed for at vise det på skærmen. Samtidig er der ingen driversupport fra producenten og forventes ikke. VirtualGL giver dig derimod mulighed for at køre en applikation på et "diskret" videokort, og sende renderingsresultatet gennem en tunnel til det "indbyggede".