T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« Windows版の確認もしつつ | トップページ | 4モニタで動作を確認 »

意外と大変な事が判明

今は、Mirror-DTC Ver1.4.4の開発フェーズで、既に、Windows用はβ版を公開中だ。なので、作業はmacOS版の更新に移っているのだが、画面キャプチャーAPIが異なるので、対応モニター数を増やす変更は意外と大変な事が判明した。

Windowsの場合、画面キャプチャーは昔からあるBitBlt関数を使うか、Desktop Duplication APIを使う事になるのだが、作者製ソフトは、Desktop Duplication APIが登場する前から開発してきているので、初版の頃にはBitBlt関数を使っていた。

なので、プログラムの内部構造としては、BitBlt関数を使って画面キャプチャーが出来る様な構造になっていて、Desktop Duplication APIが利用可能になった後には、その構造の中で、このAPIを利用する格好に変更した。

その結果として、Windows版の画面キャプチャー処理は、全てのモニターが合成された仮想スクリーンに対して、必要な部分のみ領域指定して映像を取得する感じになっている。

つまり、「対象」を「ディスプレイ1」にしても「合成ディスプレイ」にしても、内部処理的には、画面キャプチャーする領域を変更するだけ! みたいな作りになっている。

これに対して、macOS版の場合、画面キャプチャー処理はmacOS用のAPIの影響が見える感じになっている。

具体的には、画面キャプチャーはモニター毎にしか行えないので、「合成ディスプレイ」が指定された場合には、2モニター分のキャプチャーを独立して行い、それらの結果を合成して出力用のデータを作成している。

問題は、2モニター分のキャプチャーを独立して行い、と、いう所で、今回の更新では、最大サポートモニター数は2から8に変更するので、今回の更新で、2モニター分しかなかった各種リソースを8モニター分に増やす必要がある訳だ。

まあ、リソースを増やすだけなら、大した事はないのだが、現行の処理ルーチンというのは、各モニター用のキャプチャー処理を独立したコードで記述してある訳だ。

つまり、元々は、APIのテスト用にシングルモニター用の処理コードを記述し、その後、デュアルモニター対応にする時には、デバッグの容易性も考慮して、そのコードをコピペして独立した2つのコードが存在する格好にする事で、2モニター分の処理を行える様にしてあった。

と、いう事で、Windows版の場合、2モニター対応から8モニター対応にする場合、雰囲気的には、配列の要素数を2から8に変えるだけで、対応モニター数を増やせた感じなのだが、macOS版の場合、まず、各モニター用の処理を一つの処理コードを共用できる構造に作り替える必要がある事が判明した訳だ。

まあ、今現在、2個のコードがあるのを8個のコードに増やす、というのも手ではあるのだが、実際の所としては、そんな事をしてしまうと、コードの見通しは悪くなるし、バグも発生しやすくなる筈だ。

なので、とりあえず、macOS版サーバーについては、画面キャプチャー処理の内部構造から更新し始めた今日この頃だ。

ちなみに、Windows版については、仮想モニターを増設できるフリーソフトの「spacedesk」を使う事で、8モニター環境を作り出し、動作確認を行なったのだが、macOS版については、今のところ、デュアルモニターのMac mini M2 ProにiPad AirとMacBook Pro M1モデルを接続して4モニター環境を作って動作確認環境にする予定だ。

なので、今のところ、8モニター環境での動作確認はしないかもしれない状況なのだが、4つのモニターを二回ずつキャプチャーすれば、8モニター分のデータを取得できたりはする訳なので、そんな感じのデバック環境は構築する事になるかもしれない。

しかしまあ、前述の様に、macOS版については、キャプチャー処理の構造から作り直す事になってしまう様なので、そこまで行くのに、まだ、2,3日は必要になるかもしれない今日この頃だ。

« Windows版の確認もしつつ | トップページ | 4モニタで動作を確認 »

2025年1月
      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 31  

広告

プライバシーポリシー

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

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

    収集された情報がGoogleによってどの様に使用されるか、収集される情報をユーザーが管理する方法については、以下のリンクを参照下さい。

    ポリシーと規約 - Google