トップページ > 記事閲覧
Android版でのフレーム数
名前:ギウ 日時: 2017/03/05 11:40

度々すみません。 Android版ですが、実機もエミュレータも30fpsくらいしか出てないようです。 ・中身の処理は絵を少し表示してる程度です。 ・描画後にScreenFlip()を1回実行してるだけです。 ・Windows版で同じプログラムを動かすと60fps出ます。  (ScreenFlip();を2回連続で実行すると、Android版と同じくらいの速度になります) 原因がわかりましたら教えてください。 (それとも現状の仕様でしょうか?)
メンテ

Page: 1 |

Re: Android版でのフレーム数 ( No.1 )
名前:ギウ 日時:2017/03/05 11:52

追記 ・どちらもReleaseモードでの実行結果です。
メンテ
Re: Android版でのフレーム数 ( No.2 )
名前:管理人 日時:2017/03/05 21:05

手元の環境ではエミュレータも実機( ARROWS NS F-05F )でも 60fps 出ているので、 DXライブラリの処理とお使いの環境によるものである可能性があります ( DXライブラリAndroid版はバックバッファに直接描画せず、一度仮のゲーム画面( SetGraphMode で 指定した解像度の画面 )に描画してから、ScreenFlip の際にバックバッファに仮画面を拡大描画する 方式なので、バックバッファに直接描画する方式のアプリより処理負荷が高い設計になっています ) よろしければお使いの PC と Android 機器のスペックを教えていただけないでしょうか?
メンテ
Re: Android版でのフレーム数 ( No.3 )
名前:ギウ 日時:2017/03/06 08:47

ご返信有難うございます! なるほど、仕様ではないのですね。 PCは、 CPU:i7-4720HQ 2.60GHz mem: 8GB Windows 8.1 64Bit GRP: NVIDIA GTX950M Androidは、 Xperia Z3 SOL26 CPU: Qualcomm Snapdragon 801(MSM8974AC) Quad-core with 2.5GHz です。 ゲームの解像度は、 960x540x16Bit(32Bitでも同じ結果) と標準の640x480で試しました。 環境的にはそんなに悪くないと思うのですが、如何でしょう。 あとで時間も計測してみます。
メンテ
Re: Android版でのフレーム数 ( No.4 )
名前:ギウ 日時:2017/03/06 09:52

計測してみました。(リリースモードで) 原因は ProcessMessage かもです。 ===================================== 計測表 : Windows, Android(エミュ) ===================================== ProcessMessage : 400us, 16000us ゲーム処理 : 600us, 1900us ScreenFlip : 16000us, 16000us ===================================== 感覚としては、Android側のProcessMessageで、垂直同期してるような時間ですね。 試しにProcessMessageを外してみたら、入力が検出できてない(?)ような動きになりました。(ここはちゃんと調べてないですが)
メンテ
Re: Android版でのフレーム数 ( No.5 )
名前:ギウ 日時:2017/03/06 11:03

<追記> Androidの実機でも同じ感じでした。
メンテ
Re: Android版でのフレーム数 ( No.6 )
名前:管理人 日時:2017/03/06 13:42

ご返答ありがとうございます、仰られる通り 60fps 出すには十分な性能ですね… 検証用のプログラムを拝見してみないと分かりませんが、ProcessMessage で ScreenFlip のような待ちが 入ってしまうというところから、もしかすると SetDrawScreen( DX_SCREEN_BACK ) ;を実行していない、 若しくは DxLib_Init の呼び出し前に SetDrawScreen( DX_SCREEN_BACK ) ;を実行してしまっている、ということはないでしょうか? // 誤った例 #include "DxLib.h" int android_main( void ) { SetDrawScreen( DX_SCREEN_BACK ) ; // DxLib_Init の前では SetDrawScreen を呼んでも無効 if( DxLib_Init() < 0 ) { return -1; } while( ProcessMessage() == 0 ) { ClearDrawScreen() ; ScreenFlip() ; } DxLib_End() ; return 0 ; } ----------------------------- // 正しい例 #include "DxLib.h" int android_main( void ) { if( DxLib_Init() < 0 ) { return -1; } SetDrawScreen( DX_SCREEN_BACK ) ; // DxLib_Init の後で SetDrawScreen を呼ぶと有効 while( ProcessMessage() == 0 ) { ClearDrawScreen() ; ScreenFlip() ; } DxLib_End() ; return 0 ; } SetDrawScreen( DX_SCREEN_BACK ) ; を呼んでいない状態では『定期的に、自動で ScreenFlip が実行されるモード』となり 確認してみないとわかりませんが Android環境では ProcessMessage が呼ばれるタイミングで『定期的に呼ばれる ScreenFlip』が 実行されているのかもしれません 違ったらすみません m(_ _;m
メンテ
Re: Android版でのフレーム数 ( No.7 )
名前:ギウ 日時:2017/03/06 16:45

ああああ! それでした。 申し訳ありません、DX_SCREEN_BACKの処理が入ってませんでした。(入れてるつもりが) 土下座レベルのミスですね。 お手数おかけしました。 ご指摘有難うございます。
メンテ

Page: 1 |

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

   クッキー保存