ЗИФ-75
- 1 year ago
- 0
- 0
VirtualGL — свободное программное обеспечение , перенаправляет команды 3D-рендеринга из Unix и Linux OpenGL приложений в аппаратный 3D-ускоритель на выделенный сервер и отображает выходные данные интерактивно с помощью тонкого клиента , расположенного в других местах в сети.
Как правило, в тонких клиентах , например, в VNC и других для Unix и Linux либо не работает поддержка OpenGL для приложений, либо отображение предоставляется без использования аппаратного ускорения OpenGL. Дистанционное отображение 3D приложений с аппаратным ускорением традиционно требует использования «косвенного рендеринга».
Косвенный рендеринг использует -расширение X Window System («X11» или «Х») , чтобы включить команды OpenGL внутри протоколов и архитектуры X Window System , и передать их от приложения к X дисплею. Традиционно приложения выполняется на удаленном сервере приложений, а X дисплей запускается на пользовательском компьютере. В этом случае, все команды OpenGL осуществляется пользователем на рабочем столе компьютера, так что машина должна иметь быстрый ускоритель 3D-графики. Это ограничивает тип машины, которые могут дистанционно показывать 3D-приложения с использованием этого метода.
Косвенный рендеринг может быть использован, если сеть достаточно быстрая (например Gigabit Ethernet ), если приложению не надо изменять геометрию объекта динамически, если приложение использует списки отображения, и, если приложение не использует много текстур . Многие OpenGL-приложения, однако, не удовлетворяют этим критериям. Чтобы ещё более усложнить положение, некоторые расширения OpenGL не работают с косвенным рендерингом. Некоторые из этих расширений требуют возможности прямого доступа к аппаратным 3D-ускорителям и, следовательно, не могут работать косвенно. В других случаях, пользователи X дисплеев не могут обеспечить поддержку OpenGL расширений или возможность использовать может опираться на конкретные конфигурации оборудования, которое может не присутствует на рабочем месте пользователя компьютером.
Исполнительский OpenGL-рендеринг на сервере приложений обходит проблемы основанные на косвенном рендеринге, как для приложений в настоящее время имеющими быстрый и прямой доступ к аппаратному 3D - рендерингу . Если 3D-рендеринг происходит на сервере приложений, то в результате только двухмерные изображения будут отправлены на рабочее место пользователя. Изображения могут быть доставлены с любой нужной частотой кадров независимо от того, насколько большой объём 3D данных был использован для их создания, а также все проблемы 3D-рендеринга и эффективного 3D вывода преобразуются в проблемы двухмерного отображения. Эта проблема появляется также, как только появляется поток графических данных в 1-2 мегапикселя через сеть на переменной скоростью кадров, таких как в технологии ( HDTV ).
VirtualGL использует разделение, чтобы вынести OpenGL-рендеринг на сервер приложений . Приложения OpenGL для Unix (Linux), как правило, отправляют оба типа команд GLX X11 и простые команды на X дисплей. Команды GLX используются для связывания контекста рендеринга OpenGL с контекстом для конкретного X Window , получения списка цветовых форматов, которые поддерживает X дисплей и т. д. VirtualGL использует расширенные функции в Unix и Linux, что позволяет подгрузить «предварительные» библиотеки в приложение для эффективного перехвата определенных функций, которое требует приложение, и как правило, вынесено в разделяемые библиотеки , с которым она связана. После того как VirtualGL подключается к Unix или Linux OpenGL приложению, он перехватывает вызовы функции GLX от приложений и переписывает их таким образом, что соответствующие GLX команды отправляются X дисплеем на сервер приложений, который предположительно имеет аппаратный 3D ускоритель. Таким образом, VirtualGL предотвращает отправку GLX команд по сети к пользователю X дисплея или на виртуальный X дисплей («X прокси »), как, например, VNC, которые не поддерживают GLX. В процессе переписывания GLX запроса, VirtualGL также перенаправляет OpenGL рендеринг во внеэкранные буфера пикселов (Pbuffers). Между тем, остальные функции вызываемые из приложений, в том числе обычные X11 команды использующиеся для разработки пользовательского интерфейса приложений, проходят через VirtualGL без изменений.
Встроенный внутрь VirtualGL движок также поддерживает карты окна для Pbuffers, связку визуальных атрибутов между назначенным X дисплеем и X дисплеем на котором будет происходить 3D-рендеринг, а также выполняет ряд других функций хеширования чтобы обеспечить ровные GLX перенаправления. Но по существу, после того как OpenGL контекст устанавливается в X дисплей и на сервер приложений, VirtualGL получает способ который позволяет обеспечить беспрепятственный проход всех последующих команд OpenGL с сервера приложений в 3D оборудование. Таким образом, приложение может автоматически использовать любые функции OpenGL и расширений поддерживающиеся оборудованием сервера и драйверами.
Помимо
маршалинга
команд и управления ими Pbuffers, VirtualGL также читает назад созданные пикселы в соответствующее время (как правило, путём мониторинга
glXSwapBuffers()
или
glFinish()
), а затем занимается отрисовкой пикселей в приложения X Window с использованием стандартных команд отрисовки X изображения. С помощью VirtualGL осуществляется перенаправление GLX команд от назначенного Х дисплея, он может быть использован, чтобы добавить поддержку 3D ускорения для X прокси (например, VNC), а также для предотвращения косвенного OpenGL рендеринга при использовании удаленного X дисплея.
Использование VirtualGL во взаимодействии с VNC или иного X- прокси-сервера позволяет нескольким пользователям одновременно запускать 3D приложения на одном сервере приложений и многочисленными клиентами для обмена каждой сессии. Вместе с тем, VNC и подобные программы для обработки 2D приложений с большим областям сплошного цвета, несколькими цветами, и небольшим областях, а 3D приложения, с другой стороны, генерируют изображения с высоким разрешением, сложными цветовыми моделями и гораздо с меньшей корреляцией между последующими кадрами. Работа в основном с той же рабочей нагрузкой, используя вынесение изображений с OpenGL приложений в среде X Window, таких как видеоплеер, с помощью готовых программных тонких клиентов , как правило, тоже не хватает достаточно быстрого изображения кодеком , чтобы иметь возможность обрабатывать интерактивные кадры.
VirtualGL решает эти проблемы двумя способами:
TurboVNC — ответвление TightVNC , который ускоряет Tight и JPEG кодирование путей последнего, частично используя в своих интересах надстроенные мультимедиа примитивы от компаний Intel и Sun Microsystems . На 100 Мбит/с Ethernet сети, TurboVNC способен отображать полноэкранные изображения (размером 1280x1024 пикселей) с восприятием качества изображения без потерь со скоростью более чем 20 кадров в секунду. TurboVNC включает дальнейшую оптимизацию, которая позволяет ему отображать полноэкранные изображения в 7-10 кадрах/секундах по каналам широкополосной передаче, со значимой но пригодной для использования потерей качества изображения. TurboVNC также расширяет TightVNC, чтобы включать сторону клиента двойная буферизация и оптимизированные наборы из двух предметов для Solaris . TurboVNC и VirtualGL используются в вычислительном центре Техасского университета в Остине , чтобы позволить пользователям удаленный доступ к возможности 3D-рендеринга кластера .
Используя VGL Image Transport, VirtualGL сжимает выполненные трехмерные изображения в процессе, используя оптимизированный кодер-декодер того же самого JPEG это использование TurboVNC. VirtualGL тогда посылает сжатые изображения по специализированному протоколу TCP к Приложению-клиенту VirtualGL, работающему на клиентской машине. Клиент VirtualGL ответственен за то, что распаковал изображения и вовлек пиксели в соответствующее X окон. Тем временем, элементы неспецификации OpenGL дисплея приложения посылают по сети, используя стандартный отдаленный протокол X11 и выполнены на клиентской машине.
Этот подход требует, чтобы X дисплеев присутствовали на клиентской машине, и уверенность относительно отдаленного протокола X11 для того, чтобы выполнить 2-й рендеринг означает, что много приложений выступят плохо, используя VGL Image Transport на сетях высокого времени ожидания. Дополнительно, VGL Image Transport неотъемлемо не поддерживает сотрудничество (множественные клиенты в сеанс), так как изображения помещаются в машин пользователей вместо того, чтобы быть перемещенным. Но использование VGL Image Transport действительно обеспечивает прикладной опыт полностью без шва, посредством чего каждое окно приложения соответствует единственному настольному окну. Транспорт Изображения VGL также уменьшает сервер центральный процессор загрузка, так как 2-й рендеринг происходит на клиенте, и VGL Image Transport позволяет использовать продвинутые особенности спецификации OpenGL, такие как буферизированный quad-buffered стерео.
Разработчики VirtualGL представляют первичных пользователей VGL Image Transport как пользователей ноутбука с 802.11 g беспроводным или быстрым подключением к сети стандарта Ethernet с сервером приложений.
VirtualGL и TurboVNC являются основными компонентами продукта от Sun Microsystems . Два open source пакета в сочетании с closed source плагином, который позволяет VirtualGL отправить сжатые изображения на Sun Ray тонкие клиенты и другие пакеты с закрытым исходным кодом, которые интегрируют VirtualGL с Sun Grid Engine , предоставляя управление ресурсами и 3D графику для удаленных рабочих мест. Сочетание этих пакетов, назвали «Sun Shared Visualization», можно также бесплатно скачать (Sun берёт плату только за поддержку.)
v2.1 программное обеспечение от HP также включает в себя компоненты, которые интегрируются с VirtualGL и TurboVNC, что позволяет создавать 3D рабочие места, которые работают и удаленно отображают с помощью кластера визуализации.
С появлением "безголовых" видеокарт для ноутбуков VirtualGL стал использоваться в проектах типа Bumblebee. Суть в том, что при изготовлении комбинированных видеокарт одна "встроенная" делается полноценной, а вторая "дискретная" без возможности вывода на экран. При этом поддержки драйверами от производителя нет и не предвидится. VirtualGL же позволяет запускать приложение на "дискретной" видеокарте, а результат рендеренга направлять через тоннель на "встроенную".