スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 画像表示も出来た | トップページ | Cocoa版のキー入力とか »

マウスカーソルの合成等

今日も、OSX用Mirror-DTCクライアントのネイティブ版を開発していたのだが、まず、メインメニューの表示/画像/音声/圧縮に処理ルーチンを実装し、画像/音声の全モードを使える様にした。その後、マウスカーソルの合成処理も実装したのだが、Java版よりも良い感じだ。

現行版のMirror-DTCには圧縮方式としてデスクトップ圧縮と映像圧縮があって、画像形式にはインタレースだとかブロックスキャンなんかもある。

つまり、動作モードは色々とあるので、Java版の開発時には全モードに対応させるのは大変だったのだが、今回開発しているネイティブ版では、UI以外の部分については、Windows版のC++コードをそのまま使えているので、全モードに対応させる、といっても、大した作業にはならない。

なので、昨日の時点では、デフォルトモードでしか動作しなかったのだが、今日の時点では、全モードを切り替えつつ使える様になっている。

と、いう事なのだが、何の苦労も無かったのか、というと、そういう訳でもなくて、音声再生については、OSX用に独自のコードを追加した。

何故、追加する必要があったのか、というと、Mirror-DTCの「最低音質」というのは、ADPCMを使わない場合には、音声データを8ビットにしてあるのだが、OSXのCoreAudioでは、どうも、16Bitでないと受け付けてくれないみたいだったからだ。

つまり、CoreAudioへの出力時に8Bitデータを16Bitデータに変換する処理を追加した訳なのだが、そもそも、それ以前に、OSXのCoreAudioでは、インターリーブデータは受け取ってくれないみたいだったので、サーバーから送られてくるインターリーブデータはノンインタリーブデータに変換していた。

更に、それ以前に、CoreAudioに対する音声データの出力はコールバック関数によって行う格好になっていて、出力データの長さはCoreAudio側が指定する。

つまり、主導権は作者のルーチンには無い訳で、作者のルーチンは要求された長さのデータを要求されたタイミングで渡さなければならない訳だ。

で、他環境ではそうではないので、OSX用には、その為にリングバッファを追加していた。

と、いう事で、音声データの転送用コールバック関数一つをとっても、Windowsではユーザールーチン側が転送データ量を決められるのに対し、OSXではOS側が決めたサイズを転送しなければならない訳で、こういった目に見えない所にも、Appleという企業の性格が反映されている様な気がするのは作者だけだろうか?

ちなみに、マウスカーソルの合成処理は、Windows版/Java版/Android版で異なる方式になっているのだが、OSX用のネイティブ版では、この前リリースした最新のAndroid版相当の合成方式にした。

具体的には、マウスカーソルデータをOpenGLのテクスチャーに転送し、OpenGL上で合成させる様にした。

なので、処理負荷はCPUで合成するよりも軽いのだが、Java版やAndroid版とは違って、マウスカーソルの移動時に直接表示させる事が出来るので、カーソルの動きは非常にスムーズだ。

まあ、Windows版については、マウスカーソルは独立ウインドウに表示し、移動時には、そのウインドウを独立して移動させているので、こちらについても動きは非常にスムーズなのだが。

= この記事に関連する公開中ソフト =

Mirror-DTC

Mirror-DTC

(2015/02/15追加)

« 画像表示も出来た | トップページ | Cocoa版のキー入力とか »

トラックバック

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

この記事へのトラックバック一覧です: マウスカーソルの合成等:

« 画像表示も出来た | トップページ | Cocoa版のキー入力とか »

2017年9月
          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