スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 64Bit版も追加 | トップページ | Unicode化を推進 »

描画はGDIのまま高速化

今は、MasterReversiの次バージョンを開発中で、付属アプリである所のWaveClipperの変更も完了したので、今度は完成度を高めるべく、再度、本体の変更作業に戻ったのだが、最低限やる、と、書いていた描画の高速化については、GDI描画のまま、改良した。

この前リリースしたMirror-DTCのWindows版クライアントでは、描画用APIとしてDirect2Dを使用している。また、OS X / Ubuntu / Android版クライアントでは、OpenGLを使用しているし、AG-ムービーカッター/AGMPlayerの画面描画についても、Mirror-DTCクライアントと同様になっている。

これは何故なのか、というと、その方が、普通の描画用APIを使用するよりも、CPU負荷をかけずに、高速に描画出来るからなのだが、上記のソフトに共通しているのは、表示時に描画データの拡大/縮小処理が必要になる、という点だ。

つまり、過去のブログ記事を見れば判る筈なのだが、描画データの拡大/縮小処理をCPUで行うと、処理負荷が結構かかるので、作者的には、これらの処理はGPUでやらせたい所なので、上記ソフトでは、Direct2DとOpenGLを使用した、という経緯がある。

これに対して、MasterReversiのメイン盤面というのは、ウインドウサイズに合わせてレンダリングされるので、描画時には、描画データの拡大/縮小処理は不要だ。

と、いう事なので、作者的には、メイン盤面については、石のアニメーションがあるので、描画速度は上げたかったのだが、Direct2Dを使っても効果は然程ないだろう、という事で、GDI描画のまま、処理を高速化する事にした訳だ。

で、どうやって高速化したのか、というと、数日前に書いた様に、MasterReversiの描画処理では、描画データをRGB32データとしてメモリ上に作成しておき、描画時には、それからGDIのビットマップを作成し、それを使用するメモリデバイスコンテキストから、BitBltで画面デバイスに表示しているのだが、このGDIのビットマップ作成を毎回行う必要を無くした。

具体的には、CreateDIBSectionという関数で最初のビットマップを作成し、それを使用するメモリデバイスコンテキストも、最初に作成しておく格好にした。

CreateDIBSectionという関数を使うと、上記のRGB32のメモリデータを変更すると、同時に、GDIのビットマップも変更される格好になるので、描画時にGDIのビットマップを新たに作成する必要がなくなる。なので、処理は高速化される訳だ。

と、いう事で、次バージョンのMasterReversiでは、メイン盤面の描画速度は高速化されるのだが、現行版でも、普通のPCを普通に使用している分には、描画が遅いという事は無い筈なので、その違いは、普通は、判らないかもしれないのだが、少なくとも、処理負荷は減った筈なので、地球には優しくなった筈ではある。

ちなみに、メイン盤面の描画処理では、上記とは別の変更も一つ行っている。

それは何なのか、というと、現行版だと、ウインドウサイズを小さくしていくと、その最中には、盤面表示が汚くなるので、そうなるのを防いだ。

何故、上記のタイミングで盤面表示が汚くなるのか、というと、MasterReversiはウインドウサイズに合わせて描画オブジェクトをレンダリングするので、ウインドウサイズの変更中には、表示出来る正規のオブジェクトは存在しないからだ。

にも関わらず、盤面表示は継続されるのだが、これは何故なのか、というと、最後に描画したデータを拡大/縮小表示しているからだ。

で、この処理は一時的なモノでしかないので、大げさな事をやるまでもない、という事で、自前の拡大/縮小ルーチンは使わず、普通にStretchBltを使って拡大/縮小表示させているのだが、デフォルト状態だと、このStretchBltの縮小画質が、かなり、悪いので、現行版の様な汚い画像になってしまう訳だ。

もっとも、StretchBltでも、動作モードを変更すれば、綺麗に縮小してくれるので、今回、そういうモードを使うように変更した訳だ。

こちらについては、処理負荷は若干増える筈なのだが、StretchBltはウインドウサイズの変更中にしか使っていないので、普通は、気にする程の事ではない筈だ。

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

MasterReversi

MasterReversi

(2016/05/04追記)

« 64Bit版も追加 | トップページ | Unicode化を推進 »

トラックバック

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

この記事へのトラックバック一覧です: 描画はGDIのまま高速化:

« 64Bit版も追加 | トップページ | Unicode化を推進 »

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