トップページ > 記事閲覧
非同期でMV1LoadModelができない
名前:たま 日時: 2019/01/19 09:40

VisualStudio2015を使っていますが、 SetUseASyncLoadFlag(TRUE);をして、 非同期でMV1LoadModel()をすると、ロードが終わらず、メモリ使用量が増え続けるという 症状が起きています。 「C言語 3Dゲーム プログラミング教室」で使用している、 PC1.mv1と、Stage00.mv1で、症状が起きていました。 Anim_Attack1.mv1のようなアニメーションのファイルは問題ないようです。 何か、対応策はありますでしょうか?
メンテ

Page: 1 |

Re: 非同期でMV1LoadModelができない ( No.1 )
名前:sandbox 日時:2019/02/02 10:12

↓のようなプログラムを組んでいませんか? SetUseASyncLoadFlag(TRUE); nHandle = MV1LoadModel("Stage00.mv1"); while (CheckHandleASyncLoad(nHandle) != FALSE) { WaitTimer(1); // 終わるまで待とう } // いつまで待ってもここに到達しない 非同期読み込みは(メインスレッドの)ProcessMessage() 内で行われるので、↑のプログラムでは 読み込みは終わりません。 SetUseASyncLoadFlag(TRUE); nHandle = MV1LoadModel("Stage00.mv1"); while (CheckHandleASyncLoad(nHandle) != FALSE) { ProcessMessage(); WaitTimer(1); } か SetUseASyncLoadFlag(TRUE); nHandle = MV1LoadModel("Stage00.mv1"); while (CheckHandleASyncLoad(nHandle) != FALSE) { WaitTimer(5); } にすれば読み込みます。 (5msec以上だと内部で ProcessMessage() が呼ばれる) なお、デフォルトではVsyncを待ちますが、これだと待ち時間中に読み込みが実行されない 時間帯が結構あるので、Vsyncを待たない設定にして、かつ自前で60fpsを維持して ProcessMessage()を充分に呼び出すようにした方が速いです。 ※追記 ↑ゲームループに ScreenFlip() を入れた場合の話です。
メンテ
Re: 非同期でMV1LoadModelができない ( No.2 )
名前:たま 日時:2019/01/19 23:37

ありがとうございます。 アドバイスを元に、ソースを見直したところ、 無事に読み込めました。 ローディング中にProcessMessage()が1回だけ入るようになってました。 1回のVSyncで読めなかった時には、うまくいかなくなってました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存