Re: Android 環境で ImGui を使用したい ( No.1 ) |
- 名前:管理人 日時:2022/09/15 00:53
> 別のスレッドで「ANativeWindow_getWidth、ANativeWindow_getHeight」の二つを DxLib内部で使用しているようですので、
> DxLibの内部では ANativeWindow を正常に利用出来ていて外部に公開していないのかもとも思いました。(こちらを外部に公開していただければ、ImGui の初期化が成功するかも?)
はい、お察しの通りDXライブラリ内部では普通に ANativeWindow を使用しています
DXライブラリ内部で使用している ANativeWindow を取得するための関数を追加してみましたので、
よろしければこちらの暫定最新バージョンをダウンロードしてください m(_ _)m
https://dxlib.xsrv.jp/temp/DxLibAndroidTest.zip // Android版
以下の関数を追加しました
// アプリの ANativeWindow を取得する
const ANativeWindow *GetNativeWindow( void ) ;
よろしければお試しください m(_ _)m
|
Re: Android 環境で ImGui を使用したい ( No.2 ) |
- 名前:TAKU 日時:2022/09/15 22:14
管理人さん
ご対応ありがとうございます。
頂いた DxLib で無事 ImGui の初期化に成功し表示まで漕ぎつけました。
ただ、上下が反転された状態で描画されたり、別のアプリに切り替えて元の開発中アプリの戻ると imGui が非表示になったりなど問題がありますが、
ImGui 固有の問題だと思いますので別途対応していきたいと思います。
ご対応ありがとうございました。
|
Re: Android 環境で ImGui を使用したい ( No.3 ) |
- 名前:TAKU 日時:2022/09/16 23:35
管理人さん
お疲れ様です。
Android上の ImGui を操作するために、 ImGui 側へ入力データを渡さなければならないのですが、その関数が
> IMGUI_IMPL_API int32_t ImGui_ImplAndroid_HandleInputEvent(AInputEvent* input_event);
となっており AInputEvent を要求しています。
こちらについて現状取得方法が見つからず、どうしようもない状態です。
こちらは DxLib を拡張していただければ、ImGui へ入力を渡すことが出来るようになるのでしょうか?
また、表示している ImGui が上下反転する問題について調べているのですが、こちらについて進捗無しな状態になっています。。。
何か情報があればいただけないでしょうか?
大変お手数をお掛けしますが、以上の通りとなります。よろしくお願いいたします。
|
Re: Android 環境で ImGui を使用したい ( No.4 ) |
- 名前:管理人 日時:2022/09/17 05:24
AInputEvent は入力関係のイベントを検出したときにDXライブラリ内部で取得しているもので、
取得して使用したらすぐ廃棄、という類のものなので、ANativeWindow のような取得関数の形ではなく
DXライブラリ内部で AInputEvent を処理するタイミングで呼ばれるコールバック関数を登録する形にしました
コールバック関数を登録するための関数を追加したバージョンをこちらにアップしましたので、
よろしければダウンロードしてください m(_ _)m
https://dxlib.xsrv.jp/temp/DxLibAndroidTest.zip // Android版
以下の関数を追加しました
// アプリの入力イベントをフックするコールバック関数を登録する
// CallbackFunction : 入力イベント発生時に呼ばれるコールバック関数、NULL を渡すと設定解除
// InputEvent : 発生した入力イベントの AInputEvent
// Data : コールバック関数に渡すアドレス、不要な場合は NULL
int SetAndroidInputEventFookFunction( int32_t ( *CallbackFunction )( AInputEvent *InputEvent, void *Data ), void *Data ) ;
恐らくこのようなコールバック関数を用意して
int32_t InputCallbackFunction( AInputEvent *InputEvent, void *Data )
{
return ImGui_ImplAndroid_HandleInputEvent( InputEvent );
}
DxLib_Init の後にでも
SetAndroidInputEventFookFunction( InputCallbackFunction, NULL );
↑
このように関数を登録していただければ大丈夫だと思います
( 登録された InputCallbackFunction はDXライブラリが内部で AInputEvent を取得して扱うタイミングで呼ばれます )
> また、表示している ImGui が上下反転する問題について調べているのですが、こちらについて進捗無しな状態になっています。。。
> 何か情報があればいただけないでしょうか?
Android の OpenGL ES 2.0 の座標系が Direct3D とは上下が逆でDXライブラリ内部でも描画時にY座標を反転しています
ImGui にも上下反転するようなフラグや設定などが無いでしょうか?
 |
Re: Android 環境で ImGui を使用したい ( No.5 ) |
- 名前:TAKU 日時:2022/09/17 23:07
管理人さん
ライブラリの拡張ありがとうございます。
ImGui へ入力を渡すことが出来ました。問題なく動作しています。
ご対応ありがとうございました。
>Android の OpenGL ES 2.0 の座標系が Direct3D とは上下が逆でDXライブラリ内部でも描画時にY座標を反転しています
>ImGui にも上下反転するようなフラグや設定などが無いでしょうか?
github.com/ocornut/imgui/issues/1047
どうやら、射影行列をの Y を反転させることで解決できるらしいですが imGui の外部から射影行列の変更をする方法がなくて積んでます。。。
(実は自分が見つけることが出来ていないだけかもしれませんが・・・)
github.com/ocornut/imgui/issues/3143
また OpenGL4.5 が使えるのであれば、このような手法もあるみたいですが。。。
上下反転の問題を解決にするには少し時間がかかるかもしれません。。。
ライブラリの拡張に関しまして大変ありがとうございました。
|
Re: Android 環境で ImGui を使用したい ( No.6 ) |
- 名前:TAKU 日時:2022/09/18 15:30
管理人さん
お疲れ様です。
ImGui の表示が上下逆になる問題ですが、ImGui 側のコードを改造する方法で解決しました。
内部で計算している射影行列の Y を反転し、シザーの処理も上下が反転した座標を見るようにしています。
一応この対応で想定通りの挙動を行うようになりました。
コードを改造するという不本意ながらの対応でしたが、それ以外の解決方法が不可能そうでしたのでとりあえずこの形で完了ということにしておきます。。。
手助け本当に助かりました。ありがとうございました。
|