トップページ > 記事閲覧
Android版の全画面書き直しタイミングの取得
名前:大和団次郎 日時: 2018/07/31 16:39

大和団次郎と申します。 「9VAeきゅうべえ」という 2次元のアニメーション作成フリーソフトを開発しています。 9VAeきゅうべえは、C で開発されており、Win/Mac/Linux/iOS に移植されています。 今回、Android版を作成するために、C から呼べる描画ライブラリを 探していたところ、DXライブラリを見つけました。 サンプルやドキュメントが整備されていて、すばらしいです。 今、移植を行っているところで、かなり動作しています。 最初、DXライブラリで、ドーナツのような穴のあいた多角形塗りつぶしが サポートされてないのが問題だったのですが 自前の描画ルーチンをつかってなんとかできそうです。 多角形塗りつぶしが必要な部分だけ、自前のビットマップ上で描画し、 それをDXライブラリにわたして画面に反映させるという方法を使っています。 ただひとつ問題点があり、質問させてください。 DXライブラリは、ダブルバッファを使って 画面を毎回書き換えるのが基本だと思います。 そうすると、画面全体がつねに書き換わるので 再描画の問題はあまりおこらないのかなと思います ところが、9VAeは、多角形塗りつぶしを自前(CPU処理)で おこなっているので、画面全体を一瞬に書き直すことができません。 図形数が多くなると数秒かかることもあります。 そのため、ダブルバッファは使わずに 重要な部分から順番に再描画していき、書き直しが完了したら もう描かないという仕組みで動作しています。 問題なのは、Android アプリが裏にまわって 画面が消えたあと、再び出現した場合です。 DXライブラリでは、自動的にダブルバッファを切り替えて 裏画面を再現させているようですが 9VAeの場合は、画面全体を書き直しするフラグを たてなければ再描画されません。 画面全体を書き直すタイミングはどうすればわかるでしょうか。 アプリが再開したなど、画面全体を書き直す必要が 発生したタイミングがわかる方法がほしいです。 もし方法がありましたら教えていただけないでしょうか。
メンテ

Page: 1 |

Re: Android版の全画面書き直しタイミングの取得 ( No.1 )
名前:管理人 日時:2018/08/01 01:49

> 画面全体を書き直すタイミングはどうすればわかるでしょうか。 SetRestoreGraphCallback という関数にコールバック関数を登録できるのですが、画面全体を書き直す必要が発生した タイミングで登録したコールバック関数が呼ばれます // グラフィックハンドル復元関数を登録する int SetRestoreGraphCallback( void (* Callback )( void ) ) ; <SetRestoreGraphCallback のリファレンス> https://dxlib.xsrv.jp/function/dxfunc_other.html#R15N33 この関数が呼ばれた際に ReloadFileGraphAll(); を実行して画像ファイルから読み込んだグラフィックハンドルの 内容を復帰した後、画面全体への描画処理を行っていただければご希望の処理が実現できると思います よろしければお試しください m(_ _)m
メンテ
Re: Android版の全画面書き直しタイミングの取得 ( No.2 )
名前:大和団次郎 日時:2018/08/04 00:13

この関数が知りたかったです。マニュアルをみたのですが気が付きませんでした。 つかってみたところ、ちゃんと画面がかけなかった場合と、ちゃんと書けた場合があるのですが 手がかりが得られたので、調べてみます。 ありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存