始めまして麦粉と申します.
ちょっと自分では解決出来そうにないので相談に来ました.
CreateGraphFromSoftImage関数をループ内で使用した際
メモリ使用量がどんどん増えていきます.
以下のサンプルソース(ちょっと変更したもの)でも
同様に増え,CreateGraphFromSoftImage関数を
コメントアウト等で消すとそういった問題が起きません
使い方が悪いのでしょうか...
【仕様Var】DXライブラリ VisualC++用(Ver3.07a)
【環境】
O S : Win7 x64 Enter
CPU : i3-2100
MEM : 12GB
GPU : GeForce8800GTS(256)
【問題の発生するテストコード】
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int handle, i, j, grhandle ;
SetGraphMode( 640 , 480 , 32 ) ; // 画面モードの変更
ChangeWindowMode( true ) ; // ウインドウモードに変更
SetWaitVSyncFlag( false ); // 垂直同期
SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先画面を表にする
if( DxLib_Init() == -1 ){ // DXライブラリ初期化処理
printfDx("[Dxlib]初期化に失敗しました\n");
WaitKey();
return -1;
}
while(true){
handle = MakePAL8ColorSoftImage( 256, 256 ) ; // 空のパレット画像を作成する
for( i = 0 ; i < 256 ; i ++ ){
SetPaletteSoftImage( handle, i, 0, i, 0, 0 ) ; // パレット0から255に掛けて緑色のグラデーションをセットする
}
// 縦方向に黒から赤にグラデーションした画像を作成する
for( i = 0; i < 256; i ++ ){
for( j = 0; j < 256; j ++ ){
DrawPixelPalCodeSoftImage( handle, j, i, i ) ; // パレット番号をセット
}
}
grhandle = CreateGraphFromSoftImage( handle ) ; // グラフィックハンドルを作成
DeleteSoftImage( handle ) ; // 使い終わったら解放
DrawGraph( 0, 0, grhandle, TRUE ) ; // グラフィックハンドルを描画
::DxLib::ScreenFlip(); // 1フレーム処理結果の描画
if( ProcessMessage() < 0 ) break; // Windows 特有の面倒な処理をDXライブラリにやらせる // -1 が返ってきたらループを抜ける
if( CheckHitKey( KEY_INPUT_ESCAPE ) ) break; // もしESCキーが押されていたらループから抜ける
}
WaitKey(); // キー入力待ち
DxLib_End(); // DXライブラリの後始末
return 0;
}