ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1234
このログを見て気になりましたので早速テスト。
※既出ならゴメンナサイ…。
7つある描画関数の内、一番遅いのが、機能最小限のはずの
DrawGraphという結果に…。
なんか納得できないのでみなさんの環境ではどういう結果になるのかお聞かせください。
#include "DxLib.h"
#define DRAW_TIMES 10000
char Key[256];
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
LONGLONG StartTime, EndTime[7] ;
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
SetDrawScreen( DX_SCREEN_BACK );
// test1.bmpの読み込み
int GHandle = LoadGraph( "test1.bmp" ) ;
// 文字列の描画
DrawString( 250 , 240 - 32 , "計測中" , GetColor( 255 , 255 , 255 ) );
ScreenFlip();
//==============================================
// 描画時間計測
//==============================================
StartTime = GetNowHiPerformanceCount() ; // 現在経過時間を得る
for(int i=0;i<DRAW_TIMES;i++){
// 読みこんだグラフィックを画面左上に描画
DrawGraph( 0 , 0 , GHandle , TRUE ) ;
}
EndTime[0] = GetNowHiPerformanceCount() - StartTime;
StartTime = GetNowHiPerformanceCount() ; // 現在経過時間を得る
for(int i=0;i<DRAW_TIMES;i++){
// 読みこんだグラフィックを反転描画
DrawTurnGraph( 0 , 0 , GHandle , TRUE ) ;
}
EndTime[1] = GetNowHiPerformanceCount() - StartTime;
StartTime = GetNowHiPerformanceCount() ; // 現在経過時間を得る
for(int i=0;i<DRAW_TIMES;i++){
// 読みこんだグラフィックを拡大描画
DrawExtendGraph( 0 , 0 , 119 , 480 , GHandle , TRUE ) ;
}
EndTime[2] = GetNowHiPerformanceCount() - StartTime;
StartTime = GetNowHiPerformanceCount() ; // 現在経過時間を得る
for(int i=0;i<DRAW_TIMES;i++){
// 読みこんだグラフィックを回転描画
DrawRotaGraph( 0 , 0 , 1.0f , 0.00 , GHandle , TRUE ) ;
}
EndTime[3] = GetNowHiPerformanceCount() - StartTime;
StartTime = GetNowHiPerformanceCount() ; // 現在経過時間を得る
for(int i=0;i<DRAW_TIMES;i++){
// 読みこんだグラフィックを回転描画
DrawRotaGraph2( 0, 0, 0, 0, 1.0f, 0.00, GHandle, TRUE ) ;
}
EndTime[4] = GetNowHiPerformanceCount() - StartTime;
StartTime = GetNowHiPerformanceCount() ; // 現在経過時間を得る
for(int i=0;i<DRAW_TIMES;i++){
// 読みこんだグラフィックを自由変形描画
DrawModiGraph( 0 , 0 , 119 , 0 , 119 , 480 , 0 , 480 , GHandle , TRUE ) ;
}
EndTime[5] = GetNowHiPerformanceCount() - StartTime;
StartTime = GetNowHiPerformanceCount() ; // 現在経過時間を得る
for(int i=0;i<DRAW_TIMES;i++){
// グラフィック中の(0,0)-(119,480)の部分を画面座標(100,100)に
// 透過色処理あり、反転処理なしで描画
DrawRectGraph( 0, 0, 0, 0, 119, 480, GHandle, TRUE, FALSE ) ;
}
EndTime[6] = GetNowHiPerformanceCount() - StartTime;
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && Key[KEY_INPUT_ESCAPE]==0){
for(int i=0;i<7;i++){
DrawFormatString( 0, 40+ i*32, GetColor( 255 , 255 , 255 ), " タイム %d:%I64d ", i, EndTime[i]) ;
}
ScreenFlip();
}
DxLib_End();
return 0;
}
●僕自身の結果(一回のみexe実行。平均値とかじゃないです)
DrawGraph :2840 ←明らかに遅い^^;
DrawTurnGraph :1238 ←ひっくり返るけど最速・・・
DrawExtendGraph :1244
DrawRotaGraph :1833
DrawRotaGraph2 :1377
DrawModiGraph :1303
DrawRectGraph :1390
※画像などプロジェクトはライブラリ(ver. 2.25b)のzipの中のサンプル実行用フォルダのものを使用。
DrawRotaGraph2が機能的にも速度的にも申し分なし?
計測用のプログラムに問題などあればご指摘願いますm(_ _)m
*Masaoさんからご指摘の場所後からコード修正しました。