VirtualGL | |
---|---|
Sisään kirjoitettu | C , C++ , Unix Shell |
Käyttöjärjestelmä | Linux , Unix |
uusin versio | 2.6.5 ( 18.11.2020 [ 1] ) |
Testiversio | 2.6.90 (3.0 beta1) ( 16.6.2021 ) |
Lisenssi | GNU General Public License (GPL), wxWindows Library License |
Verkkosivusto | virtualgl.org |
VirtualGL on ilmainen ohjelmisto , joka uudelleenohjaa 3D-renderöintikomennot Unix- ja Linux OpenGL - sovelluksista 3D-laitteistokiihdyttimeen erillisellä palvelimella ja näyttää tulosteen interaktiivisesti muualla verkossa sijaitsevan ohuen asiakkaan avulla.
Tyypillisesti ohuissa asiakaskoneissa , kuten VNC ja muut Unix- ja Linux-käyttöjärjestelmille, joko ei ole OpenGL -tukea sovelluksille tai ne näkyvät ilman OpenGL-laitteistokiihdytystä. Laitteistokiihdytettyjen 3D -sovellusten etärenderöinti vaatii perinteisesti "epäsuoran renderöinnin" käyttöä.
Epäsuora renderöinti käyttää X Window Systemin - laajennustaX11" tai "X") sallimaan OpenGL-komennot X Window Systemin protokollissa ja arkkitehtuurissa ja välittämään ne sovelluksesta X-näytölle. Perinteisesti sovellukset toimivat etäsovelluspalvelimella ja X-näyttö toimii käyttäjän tietokoneella. Tässä tapauksessa käyttäjä suorittaa kaikki OpenGL-komennot tietokoneen työpöydällä, joten koneessa on oltava nopea 3D-grafiikkakiihdytin. Tämä rajoittaa konetyyppiä, joka voi näyttää 3D-sovelluksia etänä tällä menetelmällä.
Epäsuoraa renderöintiä voidaan käyttää, jos verkko on riittävän nopea (esim . Gigabit Ethernet ), jos sovelluksen ei tarvitse muuttaa objektigeometriaa dynaamisesti, jos sovellus käyttää näyttölistoja ja jos sovellus ei käytä monia tekstuureja . Monet OpenGL-sovellukset eivät kuitenkaan täytä näitä ehtoja. Asiaa mutkistaa entisestään, että jotkin OpenGL-laajennukset eivät toimi epäsuoran hahmontamisen kanssa. Jotkut näistä laajennuksista edellyttävät kykyä käyttää suoraan 3D-laitteistokiihdyttimiä , eivätkä siksi voi toimia epäsuorasti. Muissa tapauksissa X-näyttöjen käyttäjät eivät välttämättä tarjoa tukea OpenGL-laajennuksille, tai käyttömahdollisuus voi riippua tietyistä laitteistokokoonpanoista, joita ei välttämättä ole käyttäjän tietokoneen työasemassa.
Executive OpenGL-renderöinti sovelluspalvelimella ohittaa epäsuoraan renderöintiin perustuvat ongelmat, kuten tapahtuu sovelluksille, joilla on tällä hetkellä nopea ja suora pääsy laitteiston 3D -renderöintiin . Jos 3D-renderöinti tapahtuu sovelluspalvelimella, niin vain 2D-kuvat lähetetään käyttäjän työpaikalle. Kuvia voidaan toimittaa millä tahansa halutulla kuvanopeudella riippumatta siitä, kuinka paljon 3D-dataa niiden luomiseen käytettiin, ja kaikki 3D-renderöinti- ja tehokkaat 3D-tulostusongelmat muunnetaan 2D-näyttöongelmiksi. Tämä ongelma ilmenee myös heti, kun verkossa on 1-2 megapikselin grafiikkadataa vaihtelevalla kuvanopeudella, kuten tekniikassa ( HDTV ).
VirtualGL käyttää erottelua OpenGL-renderöinnin purkamiseen sovelluspalvelimelle . OpenGL-sovellukset Unixille (Linux) lähettävät yleensä sekä GLX X11 -komentotyyppejä että yksinkertaisia komentoja X-näyttöön. GLX-komentoja käytetään yhdistämään OpenGL-renderöintikonteksti tietyn X-ikkunan kontekstiin , saamaan luettelon X-näytön tukemista värimuodoista jne. VirtualGL käyttää Unixin ja Linuxin lisäominaisuuksia salliakseen "ennakkojulkaisun" kirjastojen ladata sovellukseen tehokkaan sieppauksen varmistamiseksi tietyt sovelluksen edellyttämät toiminnot, ja se siirretään yleensä jaettuihin kirjastoihin , joihin se on linkitetty. Kun VirtualGL muodostaa yhteyden Unix- tai Linux OpenGL -sovellukseen, se sieppaa GLX-funktiokutsuja sovelluksista ja kirjoittaa ne uudelleen niin, että X-näyttö lähettää asianmukaiset GLX-komennot sovelluspalvelimelle, jossa oletettavasti on laitteistollinen 3D-kiihdytin. Tällä tavalla VirtualGL estää GLX:ää lähettämästä komentoja verkon yli X-näytön käyttäjälle tai virtuaaliselle X-näytölle ("X- välityspalvelin "), kuten VNC, joka ei tue GLX:ää. GLX-pyynnön uudelleenkirjoittamisen aikana VirtualGL uudelleenohjaa myös OpenGL-renderöinnin näytön ulkopuolisiin pikselipuskureihin (Pbuffers). Samaan aikaan muut sovelluksista kutsutut toiminnot, mukaan lukien tavalliset X11-komennot, joita käytetään sovelluksen käyttöliittymän kehittämiseen, kulkevat VirtualGL:n läpi muuttumattomina.
Sisäinen VirtualGL-moottori tukee myös Pbufferien ikkunakarttoja, jotka sitovat visuaaliset attribuutit määritetyn X-näytön ja X-näytön välille, jossa 3D-renderöinti tapahtuu, ja suorittaa useita muita hajautustoimintoja varmistaakseen sujuvat GLX-uudelleenohjaukset. Mutta käytännössä, kun OpenGL-konteksti on asetettu X-näytölle ja sovelluspalvelimelle, VirtualGL saa tavan varmistaa, että kaikki myöhemmät OpenGL-komennot sovelluspalvelimelta 3D-laitteistoon kulkevat saumattomasti. Siten sovellus voi automaattisesti käyttää kaikkia palvelinlaitteiston ja ohjainten tukemia OpenGL-ominaisuuksia ja laajennuksia.
GLX -komentojen yhdistämisen ja avulla hallinnan lisäksi VirtualGL lukee myös renderoidut pikselit takaisin oikeaan aikaan yleensä monitoroimalla tai ja käsittelee sitten pikselien renderöinnin X Window -sovellukseen käyttämällä tavallisia X-kuvapiirtokomentoja. VirtualGL uudelleenohjaa GLX-komennot nimetyltä X-näytöltä, ja sitä voidaan käyttää lisäämään 3D-kiihdytyksen tuki X-välityspalvelimiin (kuten VNC) sekä estämään epäsuora OpenGL-renderöinti käytettäessä X-etänäyttöä. glXSwapBuffers()glFinish()
VirtualGL:n käyttäminen yhdessä VNC:n tai muun X - välityspalvelimen kanssa sallii useiden käyttäjien ajaa samanaikaisesti 3D-sovelluksia samalla sovelluspalvelimella ja useita asiakkaita jakaa kunkin istunnon. VNC ja vastaavat ohjelmat kuitenkin käsittelevät 2D-sovelluksia, joissa on suuria yksivärisiä alueita, vähän värejä ja pieniä alueita, kun taas 3D-sovellukset toisaalta luovat kuvia, joissa on korkea resoluutio, monimutkaisia värimalleja ja paljon vähemmän korrelaatiota peräkkäisten kuvien välillä. . Pohjimmiltaan samalla työmäärällä työskentely, renderöinti OpenGL-sovelluksista X Window -ympäristössä, kuten videosoittimessa, valmiiden ohjelmistojen ohut asiakasohjelmia käyttäen , tyypillisesti puuttuu myös riittävän nopea kuvakoodekki , jotta se pystyisi käsittelemään interaktiivisia kehyksiä.
VirtualGL ratkaisee nämä ongelmat kahdella tavalla:
TurboVNC on TightVNC :n haarukka, joka nopeuttaa jälkimmäisen Tight- ja JPEG-koodauspolkuja osittain hyödyntämällä Intelin ja Sun Microsystemsin sisäänrakennettuja multimediaprimitiivejä . 100 Mbps Ethernet -verkossa TurboVNC pystyy näyttämään koko näytön kuvia (1280x1024 pikseliä) häviöttömällä kuvanlaadulla yli 20 ruudulla sekunnissa. TurboVNC sisältää lisäoptimointeja, joiden avulla se voi näyttää koko näytön kuvia nopeudella 7-10 fps laajakaistakanavilla, mikä heikentää merkittävästi, mutta käyttökelpoista kuvanlaatua. TurboVNC laajentaa myös TightVNC:tä sisältämään asiakaspuolen kaksoispuskuroinnin ja optimoidut binaarit Solarisille . TurboVNC ja VirtualGL ovat käytössä UT Austin Computing Centerissä , jotta TeraGridin käyttäjät voivat etäkäyttää - klusterin
VGL-kuvansiirtoa käyttämällä VirtualGL pakkaa renderoidut 3D-kuvat samalla JPEG-optimoidulla koodekkilla, joka käyttää TurboVNC:tä. VirtualGL lähettää sitten pakatut kuvat patentoidun TCP-protokollan kautta asiakaskoneessa toimivaan VirtualGL-asiakassovellukseen. VirtualGL-asiakas on vastuussa kuvien pakkauksen purkamisesta ja pikselien piirtämisestä vastaaviin X-ikkunoihin. Sillä välin sovelluksen OpenGL-näytön ei-spec-elementit lähetetään verkon yli käyttämällä standardia X11-etäprotokollaa ja suoritetaan asiakaskoneessa.
Tämä lähestymistapa edellyttää X-näytön olevan läsnä asiakaskoneessa, ja riippuvuus etä-X11-protokollasta toisen renderöinnin tekemisessä tarkoittaa, että monet sovellukset toimivat huonosti käyttämällä VGL-kuvansiirtoa korkean viiveen verkoissa. Lisäksi VGL Image Transport ei luonnostaan tue yhteistyötä (useita asiakkaita istuntoa kohti), koska kuvat sijoitetaan käyttäjien koneille siirtämisen sijaan. Mutta VGL Image Transportin käyttö tarjoaa täysin saumattoman sovelluskokemuksen, jolloin jokainen sovellusikkuna vastaa yhtä työpöytäikkunaa. VGL Image Transport myös vähentää palvelimen suorittimen kuormitusta, koska toinen renderöinti tapahtuu asiakkaalla, ja VGL Image Transport mahdollistaa OpenGL-spesifikaatioiden edistyneiden ominaisuuksien, kuten puskuroidun nelipuskuroidun stereon, käytön.
VirtualGL:n kehittäjät esittelevät VGL Image Transportin ensisijaiset käyttäjät kannettavan tietokoneen käyttäjinä, joissa on 802.11g langaton tai nopea Ethernet-verkkoyhteys sovelluspalvelimen kanssa.
VirtualGL ja TurboVNC ovat Sun Microsystemsin Sun Visualization System -tuotteen ydinkomponentteja . Kaksi avoimen lähdekoodin pakettia yhdistettynä suljetun lähdekoodin laajennukseen, jonka avulla VirtualGL voi lähettää pakattuja kuvia Sun Ray Thin -asiakkaille ja muita suljetun lähdekoodin paketteja, jotka integroivat VirtualGL:n Sun Grid Engineen tarjoamalla resurssienhallinnan ja 3D-grafiikan etätyöasemille. Näiden pakettien yhdistelmä, nimeltään "Sun Shared Visualization", voidaan myös ladata ilmaiseksi (Sun veloittaa vain tuesta.)
HP : n v2.1 Scalable Visualization Array -ohjelmisto sisältää myös VirtualGL:n ja TurboVNC:n kanssa integroitavia komponentteja, joiden avulla voit luoda 3D-työtiloja, jotka toimivat ja näytetään etänä visualisointiklusterin avulla.
Päättömän kannettavan tietokoneen näytönohjaimen myötä VirtualGL:ää on käytetty Bumblebeen kaltaisissa projekteissa. Tärkeintä on, että yhdistettyjen näytönohjainkorttien valmistuksessa yksi "sisäänrakennettu" tehdään täysimittaiseksi ja toinen on "erillinen" ilman mahdollisuutta näyttää sitä näytöllä. Samaan aikaan valmistaja ei tarjoa ajuritukea, eikä sitä odoteta. VirtualGL puolestaan mahdollistaa sovelluksen ajamisen "erillisellä" näytönohjaimella ja renderöintituloksen lähettämisen tunnelin kautta "sisäänrakennettuun" laitteeseen.