お世話になっております
Android版においてのみ、SetWaitVSyncFlag()を使うとメインループの回転速度が上がってしまう現象が発生しています
下記のコードにおいて使い方を間違っていている部分があるか見ていただきたいです
確認はVC++版とAndroid版(Debug x86 emu)で行っております
タイトルとは別件になりますが現在高速化と最適化を行っておりVSync周りを触るなど色々やっておりまして
とりあえずVC++版で成功し、Android版のみ上手く行かずずっとその検証に難航している状態でして
その中でもうひとつ不可解な現象に合っています
SetDrawScreen( DX_SCREEN_BACK ) ;
を現在すでにDX_SCREEN_BACKが指定されている状態でさらに呼ぶとAndroid版のみ描画が行われなくなる現象が同作業中に発現してしまいました
こちらにつきましては最小化したサンプルで再発できずソースを提示できないのですが、
もし何かやりがちなミスまたはバグの可能性が簡単に分かりそうでしたら確認いただけないでしょうか
バグが起こるプロジェクトのソースをピンポイントで抜き出すとこうなります
SetDrawScreen(DX_SCREEN_BACK);//一回目
SetDrawScreen(DX_SCREEN_BACK);//二回目※これをコメントアウトしないとAndroidのみ不具合を起こす
DrawBox(0, 0, 3000, 3000, 0xff000020, true);//適当に塗りつぶし
以上となります
よろしくお願いいたします
#include "DxLib.h"
#if defined(_WINDOWS)
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode(TRUE);
SetAlwaysRunFlag(TRUE);
int window_w = 1000;
int window_h = 600;
SetGraphMode( window_w, window_h , 32 ) ;
SetWindowSize( window_w, window_h ) ;
#else
int android_main( void )
{
#endif
int GrHandle ;
bool isManualVSyncWait = true;//VSync待ち マニュアル化
if(isManualVSyncWait){
SetWaitVSyncFlag(FALSE);//VSync待ち マニュアル化
}
// DXライブラリ初期化処理
if( DxLib_Init() == -1 )
{
// エラーが起きたら直ちに終了
return -1 ;
}
// BMP画像の読み込み
GrHandle = LoadGraph( "test1.bmp" ) ;
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
// 背景色をグレーに変更
SetBackgroundColor( 128, 128, 128 ) ;
int mainLoopCount = 0;
// メインループ
while( ProcessMessage() == 0 )
{
mainLoopCount++;
// 画面をクリア
ClearDrawScreen() ;
// BMP画像の描画
DrawGraph( mainLoopCount%300, 0, GrHandle, TRUE ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
if(isManualVSyncWait){
WaitVSync(1);//VSync待ち
}
}
// DXライブラリ使用の終了処理
DxLib_End() ;
// ソフトの終了
return 0 ;
}