VirtualGL
VirtualGL és un programa de còdic obert que redirigix els comandos de processament d'aplicacions 3D OpenGL d'Unix i Linux per a hardware accelerador 3D en un servidor dedicat i mostra el resultat representat interactivament a un client llauger localisat en qualsevol lloc de la ret.
El problema
[editar | editar còdic]Normalment, VNC i atres entorns de client llauger per a Unix i Linux o no soporten les aplicacions OpenGL para res o forcen a les aplicacions OpenGL a renderizarse sense el benefici d'acceleració per hardware OpenGL. Mostrar de forma remota aplicacions 3D en acceleració de hardware tradicionalment ha requerit l'us de "representació indirecta". La representació indirecta utilisa l'extensió GLX de la Sistema x Window ("X11" o "X") para encapsular els comandos OpenGL dins de la font de protocol X11 i enviar-los des d'una aplicació a una pantalla de X. Tradicionalment, l'aplicació s'eixecuta en un servidor d'aplicacions de forma remota localisada i la visualisació de x s'eixecuta en l'escritori de l'usuari. En este escenari, tots els comandos de OpenGL són eixecutats per l'equip d'escritori de l'usuari, per lo que la màquina deu tindre un accelerador de gràfics 3D ràpit. Açò llimita el tipo de màquina que remotament pot mostrar una aplicació 3D utilisant este método.
La renderizaació indirecta pot demostrar-se suficientment funcional si la ret és lo suficientment ràpida (si usa Gigabit Ethernet, per eixemple), si l'aplicació no modifica dinàmicament la geometria de l'objecte que es representa, si l'aplicació utilisa llistes de pantalla, i si l'aplicació utilisa una gran cantitat de textures. No obstant, moltes aplicacions OpenGL no complixen estos criteris. Per a complicar encara més les coses, algunes extensions OpenGL no funcionen en un entorn de representació indirecta. Algunes d'estes extensions requerixen la capacitat d'accedir directament en el hardware de gràfics 3D i per lo tant mai és possible treballar indirectament. En atres casos, la pantalla X de l'usuari no pot proporcionar respal explícit per a una extensió de OpenGL necessària o l'extensió pot dependre d'una configuració d'hardware específic que no està present en l'equip d'escritori de l'usuari.
Renderizando (processant) OpenGL en el servidor d'aplicacions s'eludixen els problemes introduïts per la representació indirecta, ya que l'aplicació ara dispon d'un camí d'accés ràpit i directe a el hardware de processament de 3D. Si la representació 3D es produïx en el servidor d'aplicacions, solament les imàgens 2D resultants deuen enviar-se a l'escritori de l'usuari. Les imàgens poden entregar-se a la mateixa velocitat de fotograma independentment del tamany de les senyes 3D que varen ser utilisats per a generar-los, aixina que realisar processament (renderizado) de 3D en el servidor d'aplicacions efectivament convertix el problema de rendiment 3D en un problema de rendiment en 2D. El problema es convertix en cóm tractar un fluix d'1-2 megapíxelés de senyes d'image en una ret a velocitats de fotograma interactives, pero les tecnologies de productes bàsics (HDTV, per nomenar un) ya aborden este problema.
La solució OpenGL
[editar | editar còdic]Biblioteca (informàtica)
VirtualGL utilisa "GLX duplicitat" per a realisar el processament OpenGL en el servidor d'aplicacions. Normalment, les aplicacions UNIX i Linux OpenGL envien comandos GLX i ordinàries X 11 comandos al mateix x mostrar. S'utilisen els comandos GLX a contexts de processament OpenGL s'unixen a un particular x finestra, obtindre una llista de formats de píxel que el x mostrar respals, etc.. VirtualGL aprofita una característica en Unix i Linux que permet "carregar" una biblioteca en una aplicació, efectivament interceptar (AKA "interposició") certa funció crida a que l'aplicació podria realisar normalment shared biblioteques en la que està vinculat. Una volta que VirtualGL està precargado en una aplicació Unix o Linux OpenGL, intercepta les cridades a funcions de l'aplicació GLX i els reescriu tal que la GLX corresponent comandos s'envien al servidor d'aplicacions x display, que presumiblement té un accelerador de hardware 3D conectat. Aixina, VirtualGL impedix comandos GLX que s'envien per la ret x mostrar a l'usuari o a un virtual x pantalla ("X proxy"), com el VNC, que no admet GLX. En el procés de reescritura de les cridades GLX, VirtualGL també redirigix el processament OpenGL en búferes de píxels fòra de la pantalla ("Pbuffers.") Mentrestant, el restant de les cridades de funció de l'aplicació, inclós l'ordinari X 11 comandos utilisats per a dibuixar l'interfaç d'usuari de l'aplicació, poden passar a través de VirtualGL sense modificacions.
Internament, el motor intermig (interposer) del VirtualGL també manté un mapa de finestres a Pbuffers, que relaciona atributs visuals entre la pantalla de destí X i la pantalla X en la que es produirà la representació 3D i realisa una série d'atres funcions de#(#ing) per a assegurar que la redirecció GLX és transparent. Pero, essencialment, una volta establit el context de OpenGL en la pantalla del servidor d'aplicacions X, VirtualGL ix del camí i es permet a tots els comandos posteriors OpenGL passar sense traves a el hardware 3D del servidor d'aplicacions. Aixina, l'aplicació pot utilisar automàticament les funcions OpenGL i extensions proporcionades per el hardware i controladors del servidor d'aplicacions.
Aparte de l'ordenament de comandos GLX i administració de Pbuffers, VirtualGL també llig cap a arrere els píxels renderizados en el moment oportú (generalment per supervisió glXSwapBuffers() or glFinish()) i, a continuació, dibuixa els píxels en la finestra X de l'aplicació utilisant x comandos de dibuix d'image estàndar X. Com VirtualGL redirigix els comandos GLX anara de la pantalla de destí X, pot utilisar-se per a agregar soport 3D accelerat a servidors proxy X (com VNC) aixina com per a previndre el renderizado indirecte de OpenGL en usar una pantalla remota X.
Usar VirtualGL en concert en VNC o un atre proxy X permet que varis usuaris simultàneament eixecuten aplicacions 3D en un servidor d'aplicació únic i varis clients per a compartir cada sessió. No obstant, VNC i la seua tropa estan ajustats per a manejar aplicacions 2D en grans àrees de color sòlit, pocs colors i poques diferències inter-frame. Les aplicacions 3D, per una atra part, generen imàgens en patrons de color complex de gra fi, i molta menys correlació entre els fotogrames posteriors. La càrrega de treball generat dibuixant imàgens renderizadas des d'una aplicació de OpenGL en una finestra X és essencialment la mateixa càrrega de treball d'un reproductor de vídeo, i un software de client llauger disponible normalment carix de códecs d'image suficientment ràpits per a poder manejar esta càrrega de treball en velocitats de fotograma interactives.
VirtualGL treballa en tot este problema de dos maneres:
- Per mig de TurboVNC
- Per mig de transport d'image CFR
TurboVNC
[editar | editar còdic]TurboVNC és una branca (offshoot) de TightVNC que accelera les rutes de codificació Tight i JPEG d'este, aprofitant les ventages de libjpeg-turbo, una versió accelerada per SIMD de libjpeg. En rets de 100 megabits Ethernet, TurboVNC és capaç de mostrar imàgens de pantalla completa (1280 x 1024 píxels) en calitat d'image sense pèrdues perceptibles en més de 20 fotogrames per segon. TurboVNC inclou optimisacions adicionals que permeten mostrar les imàgens de pantalla completa en 7-10 fotogrames per segon en banda ampla, en calitat d'image notablement menor pero utilisable. TurboVNC estén també TightVNC per a incloure doble búfer en el costat del client i atres característiques dirigides a aplicacions 3D, aixina com plena compatibilitat en plataformes Solaris. TurboVNC i VirtualGL són utilisats pel Centre Texà de Còmput Acadèmic (TACC) de l'Universitat de Texas en Austin per a que els usuaris de TeraGrid puguen accedir remotament a les capacitats de processament 3D del clúster de visualisació Longhorn.
Transport d'image VGL (anteriorment "modo directe")
[editar | editar còdic]Quan s'utilisa el transport d'image VGL Image Transport, VirtualGL comprimix imàgens 3D renderizadas en procés utilisant el mateix códec JPEG optimisat que utilisa TurboVNC. VirtualGL, a continuació, envia les imàgens comprimides sobre un socket TCP dedicat a una aplicació client de VirtualGL que s'eixecuta en la màquina client. El client VirtualGL és responsable de la descompressió de les imàgens i de dibuixar els píxels en la finestra X apropiada. Mentrestant, els elements no OpenGL de pantalla de l'aplicació són enviats a través de la ret per mig del protocol de control estàndar remot X11 i renderizados en l'equip client.
Este enfocament requerix que una pantalla X estiga present en l'equip client i que es confie en el protocol remot X11 per a portar a terme representació 2D, lo que significa que moltes aplicacions s'eixercitaran pobrement en utilisar el transport d'image VGL Image Transport en rets d'alta latencia. Ademés, el transport d'image VGL no permet inherentement la colaboració (varis clients per sessió), ya que les imàgens són 'espentades' als equips dels usuaris en lloc de tirar-se d'elles. Pero l'us del transport d'image VGL oferix una experiència d'aplicació completament integrada, per mig del qual cada finestra de l'aplicació correspon a una única finestra de l'escritori. El transport d'image VGL també reduïx la càrrega de CPU del servidor, ya que el renderizado 2D s'està produint en l'ordenador/computador client i el transport d'image VGL permet l'us de funcions alvançades de OpenGL, com estéreo cuadri-bufferado.
Els desenrolladors de VirtualGL varen visualisar que els principals usuaris del transport d'image VGL serien els usuaris de portàtils en conexió inalàmbrica a internet 802.11g o una conexió Ethernet ràpida al servidor d'aplicacions.
Referències
[editar | editar còdic]Vore també
[editar | editar còdic]- [[Archiu:{{#switch:Software lliure|20px|Vore el portal sobre Software lliure]] Portal:Software lliure. Contingut relacionat en Software lliure.
- X Window System
- Xgl
- AIGLX
- VNC
- OpenGL
- Este artícul conté una traducció derivada de «VirtualGL» de Wikipedia en castellà publicada baix la Llicència de documentació lliure de GNU i la Llicència Creative Commons Reconeiximent-CompartirIgual 4.0 Internacional.