VirtualGL
一般的にVNCやUnix/Linux向けのその他シンクライアント環境は、OpenGLアプリケーションの実行に全く対応していないか、あるいはハードウェアアクセラレーション効果なしでOpenGLアプリケーションに描画を強制するかのいずれかである。3Dアプリケーションのリモート表示でハードウェアアクセラレーションを有効にするには、間接的なレンダリング手法を用いる必要があった。
間接レンダリングを実行する場合は、Xウィンドウシステム("X11"や"X")の拡張機能であるGLXを使用してX11プロトコルストリーム中にOpenGLコマンドをカプセル化し、アプリケーションからXディスプレイへと運ぶ。通常、アプリケーションは遠隔地のアプリケーションサーバーで実行され、Xディスプレイはユーザーのデスクトップで実行される。
このシナリオでは、OpenGLの全コマンドがユーザーのデスクトップマシンで実行されるため、そのマシンに高速な3Dグラフィックアクセラレータを必要とする。したがって、この方法で3Dアプリケーションをリモート表示できるマシンの種類は限られていた。
ネットワークが十分に速い場合(たとえばギガビットイーサネット)や、アプリケーションが描画されるオブジェクトのジオメトリーを動的に変更しない場合、アプリケーションがディスプレイリストを使う場合、アプリケーションが大量のテクスチャーマッピングを使用しない場合には、間接レンダリングでも優れた性能を発揮できる。
VirtualGLはGLXの分岐(GLX forking)を使用して、アプリケーションサーバー上でOpenGLレンダリングを実行する。UnixとLinuxのOpenGLアプリケーションは、通常GLXコマンドと普通のX11コマンドの両方を同じXディスプレイに送信する。 GLXコマンドはOpenglレンダリングコンテクストと特定のXウィンドウとのバインディングや、Xディスプレイが対応するピクセルフォーマットリストの取得などに使用される。VirtualGLはアプリケーションへのライブラリのプレロード(preload)が可能であるというUnixとLinuxの特徴をうまく利用して、通常はアプリケーションがリンクされた共有ライブラリに対して実行する特定のファンクションコールを効果的に横取りする(これを「割り込み」(interposing)という)。
いったんVirtualGLが、UnixやLinuxのOpenGLアプリケーションにプレロードされると、VirtualGLはアプリケーションから発行されるGLXファンクションコールを割り込みによって取得し、それらを書き換えて、対応するGLXコマンドが3Dハードウェアアクセラレーターを搭載しているアプリケーションサーバのXディスプレイへ送信されるようにする。