VirtualGL | |
---|---|
Escrito en | C , C++ , shell de Unix |
Sistema operativo | linux , unix |
ultima versión | 2.6.5 ( 18 de noviembre de 2020 [1] ) |
Versión de prueba | 2.6.90 (3.0 beta1) ( 16 de junio de 2021 ) |
Licencia | Licencia pública general GNU (GPL), licencia de biblioteca wxWindows |
Sitio web | virtualgl.org |
VirtualGL es un software gratuito que redirige los comandos de representación 3D de las aplicaciones OpenGL de Unix y Linux a un acelerador de hardware 3D en un servidor dedicado y muestra la salida de forma interactiva mediante un cliente ligero ubicado en otra parte de la red.
Por lo general, los clientes ligeros , como VNC y otros para Unix y Linux, no tienen compatibilidad con OpenGL para aplicaciones o se muestran sin usar la aceleración de hardware de OpenGL. La representación remota de aplicaciones 3D aceleradas por hardware requiere tradicionalmente el uso de "representación indirecta".
El renderizado indirecto usa la extensión del Sistema X Window X11" o "X") para habilitar los comandos OpenGL dentro de los protocolos y la arquitectura del Sistema X Window , y pasarlos de la aplicación a la pantalla X. Tradicionalmente, las aplicaciones se ejecutan en un servidor de aplicaciones remoto y la pantalla X se ejecuta en la computadora del usuario. En este caso, todos los comandos de OpenGL son ejecutados por el usuario en el escritorio de la computadora, por lo que la máquina debe tener un acelerador de gráficos 3D rápido. Esto limita el tipo de máquina que puede mostrar aplicaciones 3D de forma remota utilizando este método.
La representación indirecta se puede usar si la red es lo suficientemente rápida (p. ej ., Gigabit Ethernet ), si la aplicación no necesita cambiar la geometría del objeto dinámicamente, si la aplicación usa listas de visualización y si la aplicación no usa muchas texturas . Sin embargo, muchas aplicaciones de OpenGL no cumplen con estos criterios. Para complicar aún más las cosas, algunas extensiones de OpenGL no funcionan con renderizado indirecto. Algunas de estas extensiones requieren la capacidad de acceder directamente a los aceleradores de hardware 3D y, por lo tanto, no pueden funcionar indirectamente. En otros casos, es posible que los usuarios de pantallas X no brinden soporte para extensiones OpenGL, o que la capacidad de uso dependa de configuraciones de hardware específicas que pueden no estar presentes en la estación de trabajo de la computadora del usuario.
La representación OpenGL ejecutiva en el servidor de aplicaciones evita los problemas basados en la representación indirecta, como es el caso de las aplicaciones que actualmente tienen acceso rápido y directo a la representación 3D del hardware . Si la representación 3D se lleva a cabo en el servidor de aplicaciones, como resultado solo se enviarán imágenes 2D al lugar de trabajo del usuario. Las imágenes se pueden entregar a cualquier velocidad de cuadro deseada, sin importar cuántos datos 3D se usaron para crearlas, y todos los problemas de renderizado 3D y salida 3D eficiente se traducen en problemas de visualización 2D. Este problema también aparece tan pronto como hay un flujo de datos gráficos de 1 a 2 megapíxeles a través de una red a una velocidad de cuadro variable, como en la tecnología ( HDTV ).
VirtualGL usa la separación para descargar el renderizado de OpenGL al servidor de aplicaciones . Las aplicaciones OpenGL para Unix (Linux) normalmente envían ambos tipos de comandos GLX X11 y comandos simples a la pantalla X. Los comandos GLX se usan para asociar un contexto de renderizado OpenGL con un contexto para una ventana X específica , obtener una lista de formatos de color que admite una pantalla X, etc. VirtualGL usa funciones avanzadas en Unix y Linux para permitir que las bibliotecas "prelanzadas" cargarse en una aplicación para interceptar de manera eficiente ciertas funciones que requiere la aplicación y, por lo general, se traslada a las bibliotecas compartidas con las que está vinculado. Una vez que VirtualGL se conecta a una aplicación OpenGL de Unix o Linux, intercepta las llamadas de función GLX de las aplicaciones y las reescribe para que la pantalla X envíe los comandos GLX apropiados al servidor de aplicaciones, que presumiblemente tiene un acelerador 3D de hardware. De esta forma, VirtualGL evita que GLX envíe comandos a través de la red a un usuario de pantalla X o a una pantalla X virtual (" proxy X "), como VNC, que no es compatible con GLX. En el proceso de reescribir una solicitud GLX, VirtualGL también redirige la representación de OpenGL a búferes de píxeles fuera de la pantalla (Pbuffers). Mientras tanto, otras funciones llamadas desde las aplicaciones, incluidos los comandos habituales de X11 utilizados para desarrollar la interfaz de usuario de una aplicación, pasan a través de VirtualGL sin cambios.
El motor VirtualGL interno también admite mapas de ventana para Pbuffers, vinculando atributos visuales entre la pantalla X asignada y la pantalla X en la que se realizará la representación 3D, y realiza una serie de otras funciones hash para garantizar redireccionamientos GLX fluidos. Pero esencialmente, una vez que el contexto de OpenGL se establece en la pantalla X y el servidor de aplicaciones, VirtualGL obtiene una forma de garantizar que todos los comandos posteriores de OpenGL desde el servidor de aplicaciones al hardware 3D pasen sin problemas. Por lo tanto, la aplicación puede usar automáticamente cualquier característica y extensión de OpenGL admitida por el hardware y los controladores del servidor.
Además de los comandos GLX y administrarlos con Pbuffers , VirtualGL también lee los píxeles renderizados en el momento apropiado generalmente al monitorear o , y luego maneja la renderización de los píxeles en una aplicación X Window usando comandos estándar de dibujo de imágenes X. VirtualGL redirige los comandos GLX desde una pantalla X designada y se puede usar para agregar soporte de aceleración 3D a proxies X (como VNC), así como para evitar la representación indirecta de OpenGL cuando se usa una pantalla X remota. glXSwapBuffers()glFinish()
El uso de VirtualGL junto con VNC u otro proxy X permite que múltiples usuarios ejecuten simultáneamente aplicaciones 3D en el mismo servidor de aplicaciones y múltiples clientes para compartir cada sesión. Sin embargo, VNC y programas similares manejan aplicaciones 2D con grandes áreas de color sólido, pocos colores y áreas pequeñas, mientras que las aplicaciones 3D, por otro lado, generan imágenes con alta resolución, modelos de color complejos y mucha menos correlación entre cuadros sucesivos. . Trabajando básicamente con la misma carga de trabajo, usando la representación de aplicaciones OpenGL en un entorno X Window, como un reproductor de video, usando clientes ligeros de software listos para usar , por lo general también carece de un códec de imagen lo suficientemente rápido para poder manejar marcos interactivos.
VirtualGL resuelve estos problemas de dos maneras:
TurboVNC es una bifurcación de TightVNC que acelera las rutas de codificación Tight y JPEG de este último, en parte aprovechando las primitivas multimedia integradas de Intel y Sun Microsystems . En una red Ethernet de 100 Mbps , TurboVNC es capaz de mostrar imágenes de pantalla completa (1280x1024 píxeles) con una calidad de imagen sin pérdida percibida a más de 20 fotogramas por segundo. TurboVNC incluye optimizaciones adicionales que le permiten mostrar imágenes de pantalla completa a 7-10 fps en canales de banda ancha, con una pérdida significativa pero utilizable en la calidad de la imagen. TurboVNC también amplía TightVNC para incluir almacenamiento en búfer doble del lado del cliente y binarios optimizados para Solaris . TurboVNC y VirtualGL se están utilizando en el Centro de Cómputo de UT Austin para permitir que los usuarios de TeraGrid accedan de forma remota a la capacidad de representación del clúster
Con el transporte de imágenes VGL, VirtualGL comprime las imágenes 3D renderizadas en el proceso utilizando el mismo códec optimizado de JPEG que utiliza TurboVNC. Luego, VirtualGL envía las imágenes comprimidas a través del protocolo TCP propietario a la aplicación de cliente VirtualGL que se ejecuta en la máquina cliente. El cliente VirtualGL se encarga de descomprimir las imágenes y dibujar los píxeles en las ventanas X correspondientes. Mientras tanto, los elementos no especificados de visualización de OpenGL de una aplicación se envían a través de la red utilizando el protocolo remoto X11 estándar y se ejecutan en la máquina cliente.
Este enfoque requiere que las pantallas X estén presentes en la máquina del cliente, y la dependencia del protocolo X11 remoto para realizar una segunda representación significa que muchas aplicaciones tendrán un desempeño deficiente al usar VGL Image Transport en redes de alta latencia. Además, VGL Image Transport no admite de forma inherente la colaboración (múltiples clientes por sesión), ya que las imágenes se colocan en las máquinas de los usuarios en lugar de moverse. Pero el uso de VGL Image Transport proporciona una experiencia de aplicación completamente fluida, en la que cada ventana de aplicación corresponde a una sola ventana de escritorio. El transporte de imágenes VGL también reduce la carga de la CPU del servidor , ya que la segunda representación ocurre en el cliente, y el transporte de imágenes VGL permite el uso de características avanzadas de la especificación OpenGL, como estéreo con búfer cuádruple.
Los desarrolladores de VirtualGL presentan a los usuarios principales de VGL Image Transport como usuarios de una computadora portátil con conexión de red inalámbrica 802.11 g o Fast Ethernet con un servidor de aplicaciones.
VirtualGL y TurboVNC son los componentes centrales del producto Sun Visualization System de Sun Microsystems . Dos paquetes de código abierto combinados con un complemento de código cerrado que permite a VirtualGL enviar imágenes comprimidas a clientes ligeros Sun Ray y otros paquetes de código cerrado que integran VirtualGL con Sun Grid Engine , lo que proporciona administración de recursos y gráficos 3D para escritorios remotos. La combinación de estos paquetes, llamada "Visualización compartida de Sun", también se puede descargar de forma gratuita (Sun solo cobra por el soporte).
El software Scalable Visualization Array v2.1 de HP también incluye componentes que se integran con VirtualGL y TurboVNC, lo que le permite crear espacios de trabajo 3D que se ejecutan y muestran de forma remota mediante un clúster de visualización.
Con la llegada de las tarjetas gráficas para portátiles sin periféricos, VirtualGL se ha utilizado en proyectos como Bumblebee. La conclusión es que en la fabricación de tarjetas de video combinadas, una "incorporada" se hace de pleno derecho y la segunda es "discreta" sin la posibilidad de mostrarla en la pantalla. Al mismo tiempo, no hay soporte para controladores por parte del fabricante y no se espera. VirtualGL, por otro lado, le permite ejecutar una aplicación en una tarjeta de video "discreta" y enviar el resultado de la renderización a través de un túnel a la tarjeta "incorporada".