***本記事にはプロモーションが含まれています。***
ゲストOS内のOpenGLの呼び出しをホストに伝えて、OpenGLの高速化を図るパッチが登場しました。Proof of conceptと言って、アイデアの検証をしてみたとのことですが、こちらで検証しようとしてもプログラムがうまく作れなくて検証できません。
LibGL.soというライブラリ作って、ゲストOS内のOpenGLの呼び出しを横取りし、ホストOSで普通のプログラムのOpenGLの関数の呼び出しに変換して表示するという仕組みみたいです。ユーザーモードネットワークの仕組みを、グラフィックの表示でも行うみたいな感じかな。
同じような仕組みで、Direct3Dを表示することもできるんじゃないかという気がします。かなりのハックが必要になると思いますけど。
ゲストの表示速度の遅さは問題でしたので、安定して動くようになるといいのですけど。ただ、高速化の仕組みには問題があって、ゲストのメモリを直接コピーしたりしていて、i386のLinuxホスト/ゲストでしか使えません。PCIの仮想ディスプレイアダプタをアクセスしてデータをやり取りする方法がいいという意見が出てましたけれど、作れる人がいるのかな。メンテナンスする人が現れないと、このまま消えていってしまうような気がします。
まずは、自分の目で確かめたいのですが、OpenGLをよくわかってなかったりするのでした。
D3D→openGLのブリッジとしてWineのDLL類を流用して、エミュレータ側でOpenGLの実現に注力したほうが多分楽でしょうね。
もっとも、VMwareのD3D機能はD3DのグラフィックスドライバをOpenGL経由で実現する形ですが。
他に、QuickTransitのOpenGL機能がやっているように、ホストのDLL(というか.so)をゲストのDLLのように扱えるようにするなど。。これはかなり応用が利きますが、DirectX通したいとなるとCOMに対するそれなりに深い理解が必要になるでしょう。
mrtさん
コメントありがとうございます。いろいろな方法があるんですね。どれも大変そうです。こういうものを作れてしまう人ってすごいですよね。