スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 当然、自前ライブラリ化 | トップページ | 本実装を開始 »

明日には何とかなるかも

今はmacOS用AGMPlayerの開発フェーズで、まずは、開発的には、そのサブセット扱いになるmacOS用AG-ムービーカッターを開発しているのだが、今日の時点で、コントロール領域の一部が表示可能になった。多分、明日には、全領域の表示が可能になっている筈ではある。

AG-ムービーカッターのコントロール領域には、シークバーだとか、幾つかのボタンがあるのだが、シークバーについては、FillSolidRectみなしの処理と、DrawLineみなしの処理で描画している。

なので、シークバーを描画するためには、前述のAPIが必要になるのだが、それ以前の問題として、描画はウインドウに対して行っているのではなく、オフスクリーン、つまり、メモリコンテキストに対して行っている。

このため、まずは、描画用のメモリ領域を作成する必要があるのだが、この辺の扱いは、Windows / Java / GTK / macOSで異なる訳だ。

つまり、macOSで他OS用に開発した処理コードを動作させようとすると、まずは、このメモリコンテキストの扱いをどうするか、というのをハッキリさせておかなければならない。

また、AG-ムービーカッターのコントロール領域には、色々とボタンがあるのだが、これらのボタンは、PNGファイルにある画像をメモリコンテキストに描画する事で表示している。

更に、コントロール領域にはテキスト表示もあるのだが、このテキストについても、メモリコンテキストにOSのAPIを使って描画している訳だ。

なので、AG-ムービーカッターのコントロール領域をmacOSで描画したければ、前述のメモリコンテキストに対して、FillSolidRect/DrawLine/DrawImage/DrawText相当の処理が行えるAPIが必要になる。

もっとも、FillSolidRectだとかDrawLineだとかDrawImageなんかの処理については、その気になれば、描画用メモリに自前で必要な描画を行う事も可能だし、DrawTextについても、描画データをメモリ上に用意できれば、DrawImage!と同等の扱いになる。

このため、結局の所、最低限必要になるAPIは、メモリ上に用意した例えばRGB32形式のデータを画面上に描画できるAPIと、PNGファイルのデータをRGB32形式で読み出せるAPIと、テキストデータをRGB32形式で読み出せるAPI、という事になる。

ただ、macOSの場合、前述のメモリコンテキストに対して画像もテキストも描画可能なので、もう少し楽が出来る。

もっとも、描画可能なイメージは別途作成しなければならないし、テキストの描画についても、色々と属性指定が必要だ。

つまり、それほど単純には行かないのだが、作者的には、メモリコンテキストに対して、前述のFillSolidRect / DrawLine / DrawImage / DrawText相当の処理が行えれば十分な訳なので、それを行える自前ライブラリを作成してきた。

で、今日の時点で、必要な機能は、大体は、自前ライブラリに用意できた感じなので、明日には、コントロール領域の完全な描画が可能になっていると思われる訳だ。

ちなみに、macOSでは、他OSとは異なり、描画系の座標は、左下が(0,0)になっている。

つまり、Windows用の描画コードをmacOS用の描画関数を使って、素直に動作させようとすると、上下位置が逆転する格好になる。

なので、自前ライブラリでは、この辺の座標変換なんかも行っているのだが、それ以前の問題として、macOSの描画関数なんかは、基本的には、Objective-Cのコードで書く事になるのだが、Windows/Ubuntu版AG-ムービーカッターの全コードはC++で書かれている。

そして、C++からはObjective-Cのメソッドは呼び出せないので、どうしても、面倒な事になるのだが、そのためにも、C++とObjective-Cの仲介役になる自前ライブラリは必要になる訳だ。

« 当然、自前ライブラリ化 | トップページ | 本実装を開始 »

トラックバック

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

この記事へのトラックバック一覧です: 明日には何とかなるかも:

« 当然、自前ライブラリ化 | トップページ | 本実装を開始 »

2017年8月
    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 のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

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

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