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の処理が入ってませんでした。(入れてるつもりが)
土下座レベルのミスですね。 お手数おかけしました。
ご指摘有難うございます。
|