VirtualGL

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 7 noiembrie 2020; verificările necesită 2 modificări .
VirtualGL
Scris in C , C++ , Shell Unix
Sistem de operare Linux , Unix
ultima versiune 2.6.5 ( 18 noiembrie 2020 [1] )
Versiune de testare 2.6.90 (3.0 beta1) ( 16 iunie 2021 )
Licență Licență publică generală GNU (GPL), licență de bibliotecă wxWindows
Site-ul web virtualgl.org

VirtualGL este un software gratuit care redirecționează comenzile de randare 3D din aplicațiile OpenGL Unix și Linux către un accelerator hardware 3D pe un server dedicat și afișează rezultatul interactiv folosind un client subțire situat în altă parte a rețelei.

Probleme principale

De obicei, clienții subțiri , cum ar fi VNC și alții pentru Unix și Linux, fie nu au suport OpenGL pentru aplicații, fie afișează fără a utiliza accelerarea hardware OpenGL. Redarea de la distanță a aplicațiilor 3D accelerate de hardware necesită în mod tradițional utilizarea „redării indirecte”.

Redarea indirectă utilizează extensia a sistemului X Window X11" sau "X") pentru a activa comenzile OpenGL în cadrul protocoalelor și arhitecturii sistemului X Window și a le transmite din aplicație pe afișajul X. În mod tradițional, aplicațiile rulează pe un server de aplicații la distanță, iar afișajul X rulează pe computerul utilizatorului. În acest caz, toate comenzile OpenGL sunt executate de utilizator pe desktopul computerului, astfel încât mașina trebuie să aibă un accelerator grafic 3D rapid. Acest lucru limitează tipul de mașină care poate afișa de la distanță aplicații 3D folosind această metodă.

Redarea indirectă poate fi utilizată dacă rețeaua este suficient de rapidă (de exemplu Gigabit Ethernet ), dacă aplicația nu trebuie să schimbe dinamic geometria obiectului, dacă aplicația folosește liste de afișare și dacă aplicația nu folosește multe texturi . Cu toate acestea, multe aplicații OpenGL nu îndeplinesc aceste criterii. Pentru a complica și mai mult lucrurile, unele extensii OpenGL nu funcționează cu randarea indirectă. Unele dintre aceste extensii necesită posibilitatea de a accesa direct acceleratoarele hardware 3D și, prin urmare, nu pot funcționa indirect. În alte cazuri, utilizatorii de afișaje X pot să nu ofere suport pentru extensiile OpenGL sau capacitatea de utilizare se poate baza pe anumite configurații hardware care ar putea să nu fie prezente la stația de lucru a computerului utilizatorului.

Redarea executivă OpenGL pe serverul de aplicații ocolește problemele bazate pe randarea indirectă, așa cum este cazul aplicațiilor care au în prezent acces rapid și direct la randarea hardware 3D . Dacă randarea 3D are loc pe serverul de aplicații, atunci doar imaginile 2D vor fi trimise la locul de muncă al utilizatorului ca rezultat. Imaginile pot fi livrate la orice frecvență de cadre dorită, indiferent de câte date 3D au fost folosite pentru a le crea, iar toate problemele de randare 3D și de ieșire 3D eficiente sunt traduse în probleme de afișare 2D. Această problemă apare și de îndată ce există un flux de date grafice de 1-2 megapixeli într-o rețea la o rată de cadre variabilă, cum ar fi în tehnologie ( HDTV ).

Soluții VirtualGL

VirtualGL folosește separarea pentru a descărca redarea OpenGL pe serverul de aplicații . Aplicațiile OpenGL pentru Unix (Linux) trimit de obicei ambele tipuri de comenzi GLX X11 și comenzi simple pe afișajul X. Comenzile GLX sunt folosite pentru a asocia un context de randare OpenGL cu un context pentru o anumită fereastră X , pentru a obține o listă de formate de culoare pe care le acceptă un afișaj X etc. VirtualGL folosește funcții avansate pe Unix și Linux pentru a permite bibliotecilor „pre-lansare” să să fie încărcat într-o aplicație pentru interceptarea eficientă a anumitor funcții pe care aplicația le necesită și, de obicei, este mutat în bibliotecile partajate cu care este legată. Odată ce VirtualGL se conectează la o aplicație OpenGL Unix sau Linux, interceptează apelurile de funcții GLX de la aplicații și le rescrie astfel încât comenzile GLX corespunzătoare să fie trimise de afișajul X către serverul de aplicații, care probabil are un accelerator hardware 3D. În acest fel, VirtualGL împiedică GLX să trimită comenzi prin rețea către un utilizator de afișaj X sau către un afișaj X virtual ("X proxy "), cum ar fi VNC, care nu acceptă GLX. În procesul de rescriere a unei solicitări GLX, VirtualGL redirecționează și redarea OpenGL către buffer-uri de pixeli în afara ecranului (Pbuffers). Între timp, alte funcții apelate din aplicații, inclusiv comenzile obișnuite X11 folosite pentru a dezvolta interfața cu utilizatorul unei aplicații, trec prin VirtualGL neschimbate.

Motorul intern VirtualGL acceptă, de asemenea, hărți de ferestre pentru Pbuffer-uri, leagă atribute vizuale între afișajul X alocat și afișajul X pe care va avea loc randarea 3D și realizează o serie de alte funcții de hashing pentru a asigura redirecționări GLX fluide. Dar, în esență, odată ce contextul OpenGL este setat în afișajul X și serverul de aplicații, VirtualGL obține o modalitate de a se asigura că toate comenzile OpenGL ulterioare de la serverul de aplicații la hardware-ul 3D trec fără probleme. Astfel, aplicația poate utiliza automat orice caracteristici și extensii OpenGL acceptate de hardware-ul și driverele serverului.

Pe lângă distribuirea comenzilor GLX și gestionarea acestora cu Pbuffers , VirtualGL citește și pixelii de obicei prin monitorizare sau și apoi se ocupă de redarea pixelilor într-o aplicație X Window folosind comenzile standard de desenare a imaginii X. VirtualGL redirecționează comenzile GLX de pe un afișaj X desemnat și poate fi utilizat pentru a adăuga suport pentru accelerarea 3D la proxy-urile X (cum ar fi VNC), precum și pentru a preveni redarea indirectă OpenGL atunci când se utilizează un afișaj X la distanță. glXSwapBuffers()glFinish()

Utilizarea VirtualGL împreună cu VNC sau un alt proxy X permite mai multor utilizatori să ruleze simultan aplicații 3D pe același server de aplicații și mai mulți clienți pentru a partaja fiecare sesiune. Cu toate acestea, VNC și programe similare gestionează aplicații 2D cu suprafețe mari de culoare solidă, puține culori și zone mici, în timp ce aplicațiile 3D, pe de altă parte, generează imagini cu rezoluție înaltă, modele de culori complexe și mult mai puțină corelație între cadrele succesive. . Lucrând practic cu aceeași sarcină de lucru, folosind randarea din aplicații OpenGL într-un mediu X Window, cum ar fi un player video, folosind software-ul de la raft , de obicei, nu are un codec de imagine suficient de rapid pentru a putea gestiona cadrele interactive.

VirtualGL rezolvă aceste probleme în două moduri:

  1. Turbo VNC
  2. Transport pentru imagini VGL

TurboVNC

TurboVNC este un furk al TightVNC care accelerează căile de codare Tight și JPEG ale acestuia din urmă, în parte profitând de primitivele multimedia încorporate de la Intel și Sun Microsystems . Într -o rețea Ethernet de 100 Mbps , TurboVNC este capabil să afișeze imagini pe ecran complet (1280x1024 pixeli) cu o calitate a imaginii percepută fără pierderi la peste 20 de cadre pe secundă. TurboVNC include optimizări suplimentare care îi permit să afișeze imagini pe ecran complet la 7-10 fps pe canale de bandă largă, cu o pierdere semnificativă, dar utilizabilă, a calității imaginii. TurboVNC extinde, de asemenea, TightVNC pentru a include dubla tamponare pe partea clientului și binare optimizate pentru Solaris . TurboVNC și VirtualGL sunt folosite la Centrul de calcul UT Austin pentru a permite utilizatorilor TeraGrid să acceseze de la distanță capacitatea de redare a clusterului

Transport de imagini VGL (anterior ("Mod Direct"))

Folosind VGL Image Transport, VirtualGL comprimă imaginile 3D redate în proces folosind același codec optimizat JPEG care utilizează TurboVNC. VirtualGL trimite apoi imaginile comprimate prin protocolul proprietar TCP către aplicația client VirtualGL care rulează pe computerul client. Clientul VirtualGL este responsabil pentru decomprimarea imaginilor și atragerea pixelilor în ferestrele X corespunzătoare. Între timp, elementele de afișare OpenGL non-spec ale unei aplicații sunt trimise prin rețea folosind protocolul standard de la distanță X11 și executate pe computerul client.

Această abordare necesită ca afișajele X să fie prezente pe computerul client, iar dependența de protocolul X11 de la distanță pentru a face a doua randare înseamnă că multe aplicații vor funcționa prost folosind VGL Image Transport pe rețelele cu latență ridicată. În plus, VGL Image Transport nu acceptă în mod inerent colaborarea (clienți multipli pe sesiune), deoarece imaginile sunt plasate pe computerele utilizatorilor în loc să fie mutate. Dar utilizarea VGL Image Transport oferă o experiență completă a aplicației, prin care fiecare fereastră de aplicație corespunde unei singure ferestre de desktop. VGL Image Transport reduce, de asemenea, încărcarea procesorului serverului , deoarece a doua redare are loc pe client, iar VGL Image Transport permite utilizarea caracteristicilor avansate ale specificației OpenGL, cum ar fi stereo tamponat cu patru tampon.

Dezvoltatorii VirtualGL prezintă utilizatorii primari ai VGL Image Transport ca utilizatori ai unui laptop cu conexiune de rețea wireless 802.11 g sau Fast Ethernet cu un server de aplicații.

Produse comerciale care folosesc VirtualGL

VirtualGL și TurboVNC sunt componentele de bază ale produsului Sun Visualization System de la Sun Microsystems . Două pachete open source combinate cu un plugin cu sursă închisă care permite VirtualGL să trimită imagini comprimate către clienții subțiri Sun Ray și alte pachete cu sursă închisă care integrează VirtualGL cu Sun Grid Engine , oferind managementul resurselor și grafică 3D pentru desktop-uri la distanță. Combinația acestor pachete, numită „Sun Shared Visualization”, poate fi, de asemenea, descărcată gratuit (Sun taxează doar pentru asistență.)

Software-ul V2.1 Scalable Visualization Array de la HP include, de asemenea, componente care se integrează cu VirtualGL și TurboVNC, permițându-vă să creați spații de lucru 3D care rulează și se afișează de la distanță folosind un cluster de vizualizare.

Utilizarea VirtualGL în Bumblebee

Odată cu apariția plăcilor grafice pentru laptop fără cap, VirtualGL a fost folosit în proiecte precum Bumblebee. Concluzia este că, în fabricarea plăcilor video combinate, una „încorporată” este realizată cu drepturi depline, iar a doua este „discretă”, fără posibilitatea de a-l afișa pe ecran. În același timp, nu există suport pentru driver de la producător și nu este de așteptat. VirtualGL, pe de altă parte, vă permite să rulați o aplicație pe o placă video „discretă” și să trimiteți rezultatul randării printr-un tunel către cel „încorporat”.

Vezi și

Note

  1. VirtualGL - Răsfoiți fișierele la SourceForge.net . Preluat la 30 septembrie 2021. Arhivat din original la 30 septembrie 2021.

Link -uri