トップページ > 過去ログ > 記事閲覧
CreateGraphFromSoftImageでメモリリー
名前:麦粉 日時: 2012/02/06 03:47

始めまして麦粉と申します. ちょっと自分では解決出来そうにないので相談に来ました. 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; }

Page: 1 |

Re: CreateGraphFromSoftImageでメモリリー ( No.1 )
名前:いっち 日時:2012/02/06 19:18

> grhandle = CreateGraphFromSoftImage( handle ) ; grhandle を DeleteGraph で削除する前に新しいグラフィックハンドルを作っていることが原因だと思います。 ご提供いただいたコードを見る限り、ループの中で MakePAL8ColorSoftImage や CreateGraphFromSoftImage を 行う必要性が無いように思います。これらをループの外に出してはいかがでしょうか?
Re: CreateGraphFromSoftImageでメモリリー ( No.2 )
名前:麦粉(解決) 日時:2012/02/06 19:35

ご返答ありがとうございます. DeleteGraphなんてものががあったのですね グラフィックハンドル作成前に削除することで解決できました. ありがとうございました. (実装部分ではSoftImageで作る部分はフレーム毎に変化するのですが, 長ったらしいので同様の症状が起こるサンプルを掲載させていただきました.)

Page: 1 |