T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 更なる変更が必要となる | トップページ | 使える感じになった »

あとは仕上げ

今は、Mirror-DTC Ver1.4.4の開発フェーズで、既にWindows/macOS用のβ1版を公開中なのだが、その次のステップとして、トランスポーターを更新中だ。macOS版は、仕様的にはOkな感じになったのだが、まだ、クラッシュする事もある。

昨日書いた様に、元々のコードでは、合成ディスプレイ選択時、表示画面が、クライアントが扱えないくらいの高解像度になってしまっていたので、今日は、その対策として、合成ディスプレイ選択時には、サーバー側で、自動的に、映像を数分の1のサイズに縮小してクライアントに通知する格好にした。

なので、例えば、4kディスプレイを8個使用する様な場合、元々のコードでは、合成ディスプレイの解像度は、横方向の解像度は3840x8=30720ピクセルになっていたのだが、とりあえず、1/4にしてみた結果、3840x8/4=7680ピクセル相当になったので、Windows/macOSクライアントでは、問題なく表示できる様になった。

もっとも、クライアント側での表示を1/4に縮小したとしても、サーバー側のウインドウサイズは変わっていない。

なので、サーバー側では、まず、リアルサイズで画面キャプチャーし、そのキャプチャー結果を1/4のサイズになる様に縮小してから、クライアントに転送する必要がある。

つまり、サーバー側の仮想画面の解像度は変わらないので、サーバー側でも問題が出るか? と、思っていたら、画像縮小用のSIMDコードが、そんな解像度に対応できていなかったので、このコードについては、とりあえず、SIMD命令を使わない、よりシンプルなコードを使う格好にした。

その結果として、サーバーとクライアントの双方で表示上の問題は無くなったのだが、座標系的には、サーバー側ではリアルサイズを使っているのに対して、クライアント側では1/4サイズになるので、クライアントからのマウス操作指令なんかは、サーバー側で、リアルサイズに変換して処理する必要が出てきた。

マウス操作だけなら、まだ、大した問題でもなかったのだが、合成ディスプレイでも、領域指定は可能なので、そういった指定がクライアントから行われた場合にも、サーバー側では変換が必要になった。

更に言えば、macOS版の場合、元々、ウインドウ画像を、HiDPI解像度として扱うか、論理解像度として扱うか、という選択も可能だったし、合成ディスプレイというのは、旧バージョンではディスプレイ番号3だったのだが、新バージョンでは9になっている。

つまり、合成ディスプレイの判定だとかHiDPI解像度を使うかどうかの判定なんかも入り込んでくるので、macOS版のコードを見ていると、作者的にも、不安になってくる。

その結果として? 色々とテストしてみていると、たまに、クラッシュしたりもしているので、コードはもう少しちゃんとさせる必要がある感じの今日この頃だ。

ちなみに、クラッシュしている原因は、そのタイミングからして、キャプチャー対象のウインドウが無くなっているのに、キャプチャーしようとしているタイミングなんかがあるからの筈だ。

この様なタイミングは、最悪、回避しようはないので、その様なケースでは、問題が発生してもクラッシュしない様な作り込みが必要になるのかもしれない。

また、コードはマルチスレッド構造になっているので、異なるスレッドの動作をブロックせずに処理した結果、問題が発生してクラッシュしている様なケースもある筈だ。

なので、そういったコードの作りなんかも確認しつつ、仕上げ作業を行う必要があるのだが、そういった作業は、真面目にやりさえすれば、その内終わるので、新機能を実装する時に必要になる産みの苦しみはない、と、思ってはいる。

問題は、macOS版トランスポーターの次にはWindows版トランスポーターの更新も必要になるのだが、今回、合成ディスプレイに対する処理内容を変更している訳なので、普通のサーバーについても、更新が必要になった、という事だ。

と、いう事で、サポート対象ディスプレイ数を2→8に変更するのなんて簡単でしょ? と、思っていた人的には、この程度の変更を行うためにも、様々な関連変更が必要になる、と、いう事を理解してもらえれば幸いかなあ、と、思ったりもする今日この頃だ。

« 更なる変更が必要となる | トップページ | 使える感じになった »

2024年5月
      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