VirtualGL

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 7. listopadu 2020; kontroly vyžadují 2 úpravy .
VirtualGL
Zapsáno v C , C++ , Unix Shell
Operační systém Linux , Unix
Nejnovější verze 2.6.5 ( 18. listopadu 2020 [1] )
Testovací verze 2.6.90 (3.0 beta1) ( 16. června 2021 )
Licence GNU General Public License (GPL), wxWindows Library License
webová stránka virtualgl.org

VirtualGL je bezplatný software , který přesměrovává příkazy 3D vykreslování z unixových a linuxových aplikací OpenGL na 3D hardwarový akcelerátor na vyhrazeném serveru a zobrazuje výstup interaktivně pomocí tenkého klienta umístěného jinde v síti.

Hlavní problémy

Tencí klienti , jako je VNC a další pro Unix a Linux, obvykle buď nemají podporu OpenGL pro aplikace, nebo se zobrazují bez použití hardwarové akcelerace OpenGL. Vzdálené vykreslování hardwarově akcelerovaných 3D aplikací tradičně vyžaduje použití „nepřímého vykreslování“.

Nepřímé vykreslování používá rozšíření systému X Window System X11“ nebo „X“) k povolení příkazů OpenGL v rámci protokolů a architektury systému X Window System a jejich předání z aplikace na displej X. Tradičně aplikace běží na vzdáleném aplikačním serveru a X display běží na počítači uživatele. V tomto případě jsou všechny příkazy OpenGL prováděny uživatelem na ploše počítače, takže stroj musí mít rychlý 3D grafický akcelerátor. To omezuje typ stroje, který může pomocí této metody vzdáleně zobrazovat 3D aplikace.

Nepřímé vykreslování lze použít, pokud je síť dostatečně rychlá (např . Gigabit Ethernet ), pokud aplikace nepotřebuje dynamicky měnit geometrii objektů, pokud aplikace používá seznamy zobrazení a pokud aplikace nepoužívá mnoho textur . Mnoho aplikací OpenGL však tato kritéria nesplňuje. Aby to bylo ještě složitější, některá rozšíření OpenGL nefungují s nepřímým vykreslováním. Některá z těchto rozšíření vyžadují možnost přímého přístupu k 3D hardwarovým akcelerátorům , a proto nemohou fungovat nepřímo. V jiných případech uživatelé displejů X nemusí poskytovat podporu pro rozšíření OpenGL nebo možnost použití může záviset na konkrétních hardwarových konfiguracích, které nemusí být přítomny na pracovní stanici počítače uživatele.

Výkonné vykreslování OpenGL na aplikačním serveru obchází problémy založené na nepřímém vykreslování, jako je tomu u aplikací, které mají v současnosti rychlý a přímý přístup k hardwarovému vykreslování 3D . Pokud 3D vykreslování probíhá na aplikačním serveru, pak budou na pracoviště uživatele odeslány pouze 2D obrázky. Obrázky lze dodávat s libovolnou požadovanou snímkovou frekvencí, bez ohledu na to, kolik 3D dat bylo použito k jejich vytvoření, a všechny problémy s 3D vykreslováním a efektivním 3D výstupem se převádějí do problémů se zobrazením 2D. Tento problém se také objeví, jakmile dojde k toku 1-2 megapixelových grafických dat přes síť s proměnlivou snímkovou frekvencí, jako například v technologii ( HDTV ).

Řešení VirtualGL

VirtualGL používá oddělení k přenesení vykreslování OpenGL na aplikační server . Aplikace OpenGL pro Unix (Linux) obvykle odesílají na displej X oba typy příkazů GLX X11 i jednoduché příkazy. Příkazy GLX se používají k přidružení kontextu vykreslování OpenGL s kontextem pro konkrétní okno X , získání seznamu formátů barev, které displej X podporuje atd. VirtualGL využívá pokročilé funkce v systémech Unix a Linux, které umožňují „předběžné“ knihovny být načten do aplikace pro efektivní zachycení určitých funkcí, které aplikace vyžaduje, a je obvykle přesunut do sdílených knihoven , se kterými je propojen. Jakmile se VirtualGL připojí k unixové nebo linuxové OpenGL aplikaci, zachytí volání funkcí GLX z aplikací a přepíše je tak, aby byly příslušné příkazy GLX odeslány displejem X na aplikační server, který má pravděpodobně hardwarový 3D akcelerátor. Tímto způsobem VirtualGL zabraňuje GLX v odesílání příkazů přes síť uživateli displeje X nebo virtuálnímu displeji X ("X proxy "), jako je VNC, který nepodporuje GLX. V procesu přepisování požadavku GLX VirtualGL také přesměruje vykreslování OpenGL do vyrovnávací paměti pixelů mimo obrazovku (Pbuffery). Mezitím další funkce volané z aplikací, včetně obvyklých příkazů X11 používaných k vývoji uživatelského rozhraní aplikace, procházejí VirtualGL beze změny.

Interní VirtualGL engine také podporuje okenní mapy pro Pbuffery, váže vizuální atributy mezi přiřazeným X displejem a X displejem, na kterém bude probíhat 3D vykreslování, a provádí řadu dalších hashovacích funkcí pro zajištění plynulých GLX přesměrování. Ale v zásadě, jakmile je kontext OpenGL nastaven na displeji X a aplikačním serveru, VirtualGL získá způsob, jak zajistit, aby všechny následující příkazy OpenGL z aplikačního serveru na 3D hardware procházely hladce. Aplikace tak může automaticky používat jakékoli funkce a rozšíření OpenGL podporované serverovým hardwarem a ovladači.

Kromě zařazování příkazů GLX a jejich správy pomocí obvykle monitorováním glXSwapBuffers()nebo glFinish() a poté zpracovává vykreslování pixelů do aplikace X Window pomocí standardních příkazů pro kreslení obrázků X. VirtualGL přesměrovává příkazy GLX z určeného displeje X a lze jej použít k přidání podpory 3D akcelerace k X proxy (jako je VNC) a také k zamezení nepřímého vykreslování OpenGL při použití vzdáleného displeje X.

Použití VirtualGL ve spojení s VNC nebo jiným X proxy umožňuje více uživatelům současně spouštět 3D aplikace na stejném aplikačním serveru a více klientů sdílet každou relaci. VNC a podobné programy však zvládají 2D aplikace s velkými plochami plné barvy, málo barev a malými plochami, zatímco 3D aplikace na druhé straně generují obrázky s vysokým rozlišením, komplexními barevnými modely a mnohem menší korelací mezi po sobě jdoucími snímky. . Při práci s v podstatě stejným pracovním zatížením, pomocí vykreslování z aplikací OpenGL v prostředí X Window, jako je videopřehrávač, pomocí standardních softwarových tenkých klientů , obvykle také chybí dostatečně rychlý obrazový kodek , aby bylo možné zpracovávat interaktivní snímky.

VirtualGL řeší tyto problémy dvěma způsoby:

  1. Turbo VNC
  2. Transport pro obrázky VGL

TurboVNC

TurboVNC je větev TightVNC , která urychluje cesty kódování Tight a JPEG, částečně využitím vestavěných multimediálních primitiv od Intel a Sun Microsystems . Na 100 Mbps Ethernetové síti je TurboVNC schopno zobrazovat obrázky na celé obrazovce (1280x1024 pixelů) s vnímanou bezztrátovou kvalitou obrazu při rychlosti více než 20 snímků za sekundu. TurboVNC obsahuje další optimalizace, které mu umožňují zobrazovat obrázky na celé obrazovce rychlostí 7-10 snímků za sekundu přes širokopásmové kanály s významnou, ale použitelnou ztrátou kvality obrazu. TurboVNC také rozšiřuje TightVNC tak, aby zahrnovalo dvojité ukládání do vyrovnávací paměti na straně klienta a optimalizované binární soubory pro Solaris . TurboVNC a VirtualGL jsou používány v UT Austin Computing Center , aby umožnily uživatelům TeraGrid vzdálený přístup ke schopnosti clusteru

VGL Image Transport (dříve ("Přímý režim"))

Pomocí VGL Image Transport, VirtualGL komprimuje vykreslené 3D obrázky v procesu pomocí stejného JPEG optimalizovaného kodeku, který používá TurboVNC. VirtualGL poté odešle komprimované obrázky přes proprietární protokol TCP do klientské aplikace VirtualGL spuštěné na klientském počítači. Klient VirtualGL je zodpovědný za dekompresi obrázků a vykreslování pixelů do odpovídajících X oken. Mezitím jsou nespecifikované prvky aplikace pro zobrazení OpenGL odesílány přes síť pomocí standardního vzdáleného protokolu X11 a spouštěny na klientském počítači.

Tento přístup vyžaduje, aby byly na klientském počítači přítomny X displeje a spoléhání se na vzdálený protokol X11 pro provádění 2. vykreslování znamená, že mnoho aplikací bude fungovat špatně pomocí VGL Image Transport v sítích s vysokou latencí. Navíc VGL Image Transport ze své podstaty nepodporuje spolupráci (více klientů na relaci), protože obrázky jsou umístěny na počítačích uživatelů, místo aby byly přesouvány. Ale použití VGL Image Transport poskytuje zcela bezproblémový aplikační zážitek, přičemž každé okno aplikace odpovídá jedinému oknu pracovní plochy. VGL Image Transport také snižuje zatížení procesoru serveru , protože 2. vykreslování probíhá na klientovi, a VGL Image Transport umožňuje použití pokročilých funkcí specifikace OpenGL, jako je stereo s vyrovnávací pamětí se čtyřmi vyrovnávací paměti.

Vývojáři VirtualGL představují primární uživatele VGL Image Transport jako uživatele notebooku s bezdrátovým nebo rychlým ethernetovým připojením k síti 802.11 g s aplikačním serverem.

Komerční produkty využívající VirtualGL

VirtualGL a TurboVNC jsou základní komponenty produktu Sun Visualization System od Sun Microsystems . Dva balíčky s otevřeným zdrojovým kódem v kombinaci s pluginem s uzavřeným zdrojovým kódem , který umožňuje VirtualGL posílat komprimované obrázky tenkým klientům Sun Ray a další balíčky s uzavřeným zdrojovým kódem, které integrují VirtualGL se Sun Grid Engine a poskytují správu zdrojů a 3D grafiku pro vzdálené plochy. Kombinaci těchto balíčků, nazvanou „Sdílená vizualizace Sun“, lze také stáhnout zdarma (Sun si účtuje pouze podporu.)

Software v2.1 Scalable Visualization Array od HP obsahuje také komponenty, které se integrují s VirtualGL a TurboVNC, což vám umožňuje vytvářet 3D pracovní prostory, které běží a zobrazují vzdáleně pomocí vizualizačního clusteru.

Použití VirtualGL v Bumblebee

S příchodem grafických karet pro notebooky bez hlavy se VirtualGL začalo používat v projektech jako Bumblebee. Pointa je, že při výrobě kombinovaných grafických karet je jedna „vestavěná“ plnohodnotná a druhá je „diskrétní“ bez možnosti jejího zobrazení na obrazovce. Zároveň chybí podpora ovladačů od výrobce a ani se neočekává. VirtualGL na druhé straně umožňuje spustit aplikaci na „diskrétní“ grafické kartě a odeslat výsledek vykreslování tunelem na „vestavěnou“.

Viz také

Poznámky

  1. VirtualGL – Procházení souborů na SourceForge.net . Získáno 30. září 2021. Archivováno z originálu dne 30. září 2021.

Odkazy