スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 今週は色々とリリース | トップページ | Ubuntu版の問題点と対策 »

Parallelsにも対応させた

昨日書いた様に、Mac / Ubuntu用Mirror-DTCを更新しようとしているのだが、現行版ではParallels(Mac用仮想化ソフト)のゲストOSとしてUbuntuをインストールし、3Dアクセラレーションを有効化すると、サーバーがマトモに使えない。なので、この問題にも対処した。

数日前に書いた様に、現行版のUbuntu用Mirror-DTCサーバーは、ParallelsのゲストOSにしているUbuntu上では、Parallelsの3DアクセラレーションをOffにしないと、画面キャプチャーが偶にしか行われないので、使い物にならない。

で、上記の問題は、Parallelsの3DアクセラレーションをOffにすると回避できるのだが、その場合には、Parallelsの処理が異常に重くなり、Ubuntu上でOpenGL描画のNostalgic UFO Battlerを動作させるだけで、macOS上のParallels画面では、Ubuntuの操作が実質的に出来なくなるし、Parallelsのメニュー操作も無応答になったりする。

と、いう事で、どっちに転んでも、気分は宜しくない訳なのだが、これも数日前に書いた様に、Parallelsの場合、VirtualBoxとは異なり、3DアクセラレーションをOnにしていても、Ubuntuに標準搭載されているスクリーンキャプチャーソフトだとかリモートデスクトップソフトの画面描画は出来ていた訳だ。

なので、普通に鑑みて、Parallelsは画面キャプチャー用APIをHookしていて、そのAPIが呼び出された時に、アクセラレーターが作成した画面をキャプチャー用データ領域にコピーしている、と、考えられる訳だ。

にも関わらず、現行のUbuntu版Mirror-DTCサーバーでは、画面キャプチャーが行えない訳なのだが、その理由として考えられたのは、現行版のMirror-DTCサーバーの画面キャプチャールーチンは、GDKに依存しない作りになっている、という事だった。

つまり、Xのライブラリを直接使って画面キャプチャーを行なっているのだが、前述の標準搭載されているスクリーンキャプチャーソフトである所のgnome-screenshotのソースコードをダウンロードして調べてみた所、このソフトでは、やはり、画面キャプチャーにgdkの関数を使っていた訳だ。

具体的には、画面キャプチャールーチンは以下の様になっている。

GdkWindow *root = gdk_get_default_root_window();

GdkPixbuf *screenshot = gdk_pixbuf_get_from_window(root,orgx,orgy,sizex,sizey);

g_object_unref(screenshot);

と、いう事で、Mirror-DCTサーバー的には、XGetImage関数を使って画面キャプチャーしているのだが、その前に、前述のgdk_pixbuf_get_from_window関数をParallelsの3Dアクセラレータ対策として入れてみた訳だ。

その結果、Parallelsの3DアクセラレータがOnの場合にも、問題なくサーバーが動作する様に出来たので、この前、Parallelsを使う事を前提に、高性能なMacBookPro 15インチ 2016モデルを大枚をはたいて購入した作者的には、何とか、当初の予定通り、MacBook Proの性能をParallels上のUbuntu用に使える目処がついた事になる。

ちなみに、前述の通りなので、次バージョンのMirror-DTCサーバーでも、画面キャプチャーはXGetImage関数で行なっている点に変わりはない。

つまり、画面キャプチャーの前に、通常は必要ないgdk_pixbuf_get_from_window関数を呼ぶ格好になっているので、オーバーヘッドは若干増えている筈なのだが、この関数のパラメータである所のsizexとsizeyは共に8にしている。

このため、オーバーヘッドの増加は微々たるモノの筈だし、手持ちのUbuntuの実機環境で動作させても、別段、重くなった印象は無かったので、このParallels対応の無駄な画面キャプチャー処理を行わせない様にする設定は追加しなかった。

なお、 作者的には、Ubuntu14.04LTS上でVirtualBoxを使ってUbuntu16.04LTSを動かしたりもしているのだが、VirtualBoxの場合、3Dアクセラレーションを有効にすると、標準添付のスクリーンキャプチャーソフトでも、正しい画面データをキャプチャー出来ない。

なので、今回、Mirror-DTCサーバーには、前述の様な対策を打ったのだが、VirtualBoxでは、その対策にも意味はないので、引き続き、 Mirror-DTCサーバーを使いたければ、VirtualBoxでは3Dアクセラレーションは有効化出来ない。

しかし、VirtualBoxの場合、Ubuntu16.04LTSをゲストOSにすると、3Dアクセラレーションが無効だと、何故か、ソフト起動時の初期ウインドウ位置が可笑しくなる。

つまり、現状のUbuntuホストのVirtualBoxでは、Mirror-DTCサーバーを動作させたい場合には、Ubuntu16.04LTSをゲストOSとしては使えない状況なのだが、この点については、次バージョンでも変化はない。

しかしまあ、Parallelsでは、3Dアクセラレーションと画面キャプチャーが共存できている訳なので、この問題については、作者的なスタンスとしては、文句があったらOracleに言ってくれ、という事になる。

« 今週は色々とリリース | トップページ | Ubuntu版の問題点と対策 »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/534482/65140347

この記事へのトラックバック一覧です: Parallelsにも対応させた:

« 今週は色々とリリース | トップページ | Ubuntu版の問題点と対策 »

2017年6月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    Cookieを無効にする設定およびAdsenseに関する詳細については、以下のリンクを参照下さい。

    広告 - ポリシーと規約 - Google