トップページ > 記事閲覧
Android版:60FPS以上で動かしたい
名前:was-blue.0793 日時: 2018/02/27 18:16

Android版で60FPS以上の速度で処理を行う必要が出てきました。 Windows版では垂直同期を切ることで性能にもよりますが60FPS以上を実現できますが、Android版では垂直同期を切る関数が使えないようです。 描画速度は60FPSでもよいのですが、内部的な処理速度を60FPSより速くできるようにしたいです。 Androidでは60FPS以上で動作させることは難しいのでしょうか……?
メンテ

Page: 1 |

Re: Android版:60FPS以上で動かしたい ( No.1 )
名前:SUIMA 日時:2018/02/27 18:52

Android版ではなく、Windows版の知識をベースの答えになってしまうのですが・・・ 通常はメインループ内で while(true){ 計算処理(); 描画処理(); } この様な動作になっていると思いますが while(true){ 計算処理(); 計算処理(); 描画処理(); } とすることで、処理タイミングにムラはできますが、120FPS相当の処理が可能かと思います。
メンテ
Re: Android版:60FPS以上で動かしたい ( No.2 )
名前:管理人 日時:2018/02/28 01:29

少し調べたところ垂直同期を切ることができそうです ( なんとなく先入観で Android は垂直同期を切れないような気がしていましたが、ちゃんと設定するための API がありました・・・ ) 実際に機能するのか試してみますので、数日ほどお待ちください m(_ _)m ( SUIMAさんの方法の方がテアリングが発生しないので良いかもしれませんが )
メンテ
Re: Android版:60FPS以上で動かしたい ( No.3 )
名前:管理人 日時:2018/02/28 23:23

お待たせしました、Android版でも SetWaitVSyncFlag で垂直同期を切れるようにしてみましたので、 よろしければお試しください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.exe // Android版 ARM用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.exe // Android版 x86用
メンテ
Re: Android版:60FPS以上で動かしたい ( No.4 )
名前:was-blue.0793 日時:2018/03/06 18:57

テスト版で垂直同期を切ることができるようになっていたことを確認しました。 (参考までに処理の内容もありますがXperia XZ、Androidバージョン7.0ではおよそ180FPS〜200FPSで動作します) しかし、垂直同期を切って処理したい場合と垂直同期を待ってもいい処理で垂直同期を待つかどうか切り替えられるようにしたいのですが、 WaitVSyncが実装されていないのか、WaitVSyncを使っても垂直同期を待つことができません。 こちらもご対応いただけると幸いです。
メンテ
Re: Android版:60FPS以上で動かしたい ( No.5 )
名前:管理人 日時:2018/03/07 00:48

すみません、Android環境では垂直同期を検出する機能が無いので、WaitVSync は未実装となっています 申し訳ありませんが ScreenFlip で代用してください m(_ _;m
メンテ
Re: Android版:60FPS以上で動かしたい ( No.6 )
名前:BayLeaf 日時:2018/03/07 09:07

横槍で失礼します。 > 管理人さん 現在 SetWaitVSyncFlag は初期化前でしか効果がないと思うのですが、 SetWaitVSyncFlag を初期化以降でも行うことができれば WaitVSync がなくても ScreenFlip の処理を分ける必要がなくなり便利になると思います。 SetWaitVSyncFlag を初期化以降でも使用できるようにすることはできないのでしょうか?
メンテ
Re: Android版:60FPS以上で動かしたい ( No.7 )
名前:was-blue.0793 日時:2018/03/07 21:13

>>管理人さん SetWaitVSyncFlagを切った時点でScreenFlipで垂直同期が待たれなくなります。 >>BayLeafさん Windows版ではDirectX9以降の仕様から初期化前にしか使えなかったと記憶しておりますが、 Android版ではOpenGL ESを使っていることから、Android版限定で初期化以降も使えるようになりそうに思います。 Windows版とAndroid版で動作を統一する方針があるとしたら、初期化以降も使えるようにする実装は難しくなりそうですが……
メンテ
Re: Android版:60FPS以上で動かしたい ( No.8 )
名前:管理人 日時:2018/03/08 01:22

すみません、Android版では was-blue.0793さんが仰られている通り初期化後でも垂直同期を待つかどうかを変更することができるので 初期化後でも SetWaitVSyncFlag で垂直同期を待つかどうかを変更できるようにしたつもりだったのですが、バグで変更できないようになっていました Android版のみ DxLib_Init の後でも SetWaitVSyncFlag が使用できるように修正したバージョンをアップしましたので、 お手数で申し訳ありませんが再度こちらをダウンロードしてください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.exe // Android版 ARM用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.exe // Android版 x86用 > BayLeafさん > SetWaitVSyncFlag を初期化以降でも使用できるようにすることはできないのでしょうか? 今回 Android版限定で初期化後でも SetWaitVSyncFlag が使用できるようにしました Windows版は DirectX9以降、初期化後に VSYNC待ちをするかどうかの設定が変更できなくなってしまったので Windows版は今まで通り初期化後に使用することはできません( DXライブラリが DirectX7 を使用していた頃は Windows版も途中変更に対応していたのですが・・・ ) > was-blue.0793さん > SetWaitVSyncFlagを切った時点でScreenFlipで垂直同期が待たれなくなります。 すみません、バグだったので DxLib_Init 後も使用できるように修正しました m(_ _;m > Windows版とAndroid版で動作を統一する方針があるとしたら、初期化以降も使えるようにする実装は難しくなりそうですが…… 個人的には初期化後も設定を変更できる仕様にしたいと思っているので、動作の統一は崩れてしまいますが Android版だけでも初期化後に設定を変更できるようにしました
メンテ
Re: Android版:60FPS以上で動かしたい ( No.9 )
名前:BayLeaf 日時:2018/03/08 07:46

ありがとうございます。 Android版で最新バージョンを試しましたところ、 初期化後でも SetWaitVSyncFlag が使用できることを確認しました。 Windows版に関しても了解です。分岐させて処理しておきます。 なお、今回のスレッドは Android版に関してのことでしたので Windows版に関しては考慮しないで聞いたので特に問題ないです。 突然のお邪魔で済みませんでしたがご対応ありがとうございました。
メンテ
Re: Android版:60FPS以上で動かしたい ( No.10 )
名前:was-blue.0793(解決) 日時:2018/03/08 22:24

BayLeafさん同様、SetWaitVSyncFlag関数が初期化後でも使えることを確認しました。 ご対応ありがとうございます。 >>BayLeafさん 私はWindows版では垂直同期を待つかどうか切り替えるためにWaitVSync(1)を使っていました。 フラグ変数を用意しておき、そのフラグがtrueの時にこの関数が呼ばれるようにして垂直同期を待つかどうかを切り替えるようにしています。
メンテ

Page: 1 |

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

   クッキー保存