トップページ > 記事閲覧
SetUseASyncLoadFlagとMV1DuplicateModelを組み合わせた際の挙動について
名前:noname 日時: 2025/06/21 13:59

いつもお世話になっております。 SetUseASyncLoadFlagで非同期読み込み中にMV1LoadModelしたモデルをモデルA、読み込み完了をGetASyncLoadNumで待った後にモデルAのハンドルをMV1DuplicateModelで複製したものをモデルBとします。 このとき、モデルBをMV1DeleteModelするとモデルAまで破棄されているような挙動をバージョン3.24fで確認しております。 (モデルBをMV1DeleteModel後、モデルAをMV1DrawModelするとエラー・再度モデルAのハンドルでMV1DuplicateModelをしても正しく動作しない等) MV1DeleteModelのリファレンスに記載のサンプルプログラムを非同期読み込みにした版を下記に掲載いたします。 モデルhoge.mv1につきましては、手持ちのmv1いずれも同様の挙動でしたので、恐れ入りますがお手元のモデルにて代用いただけますでしょうか。 お手数をおかけしますが、ご確認いただけますと幸いです。 ================================ #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ChangeWindowMode(1); // ウィンドウモードで起動 SetGraphMode(600, 400, 32); // ウィンドウサイズ // DXライブラリの初期化 if (DxLib_Init() < 0) { // エラーが発生したら直ちに終了 return -1; } // 描画先を裏画面に変更 SetDrawScreen(DX_SCREEN_BACK); // 非同期読み込み SetUseASyncLoadFlag(true); // 3Dモデルの読み込み int ModelHandle = MV1LoadModel("hoge.mv1"); // 非同期読み込みが終わるまで待機 while (GetASyncLoadNum() > 0) ProcessMessage(); //while (CheckHandleASyncLoad(ModelHandle)) ProcessMessage(); CreateDirLightHandle(VGet(0, -1, 0)); SetCameraNearFar(1, 1000); SetCameraPositionAndTarget_UpVecY(VGet(0, 0, -2), VGet(0, 0, 0)); // 何かボタンが押されるかウインドウが閉じられるまでループ while (ProcessMessage() == 0 && CheckHitKeyAll() == 0) { // 画面をクリア ClearDrawScreen(); // 読み込んだデータと同じデータを使用するモデルハンドルを作成する int DupeModelHandle = MV1DuplicateModel(ModelHandle); // 画面に映るランダムな位置に3Dモデルを移動 MV1SetPosition(DupeModelHandle, VGet(GetRand(2)-1, 0, 0)); // 3Dモデルの描画 MV1DrawModel(ModelHandle); // 3Dモデルの描画 MV1DrawModel(DupeModelHandle); // 3Dモデルの削除 MV1DeleteModel(DupeModelHandle); // 裏画面の内容を表画面に反映 ScreenFlip(); } // モデルハンドルの削除 MV1DeleteModel(ModelHandle); // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; } ================================
メンテ

Page: 1 |

Re: SetUseASyncLoadFlagとMV1DuplicateModelを組み合わせた際の挙動について ( No.1 )
名前:管理人 日時:2025/06/22 16:43

載せていただいたプログラムで手元の環境でも不具合が発生することを確認しました 調べてみたところ、MV1DuplicateModel で作成した3Dモデルハンドルを SetUseASyncLoadFlag( TRUE ); を実行した状態で MV1DeleteModel で削除すると 派生元モデルの情報まで削除してしまうというバグがありました 修正したバージョンをこちらにアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 12 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) また、MV1DuplicateModel も SetUseASyncLoadFlag( TRUE ); で非同期読み込みONの状態で 実行すると非同期実行となりますのでご注意ください m(_ _)m
メンテ
Re: SetUseASyncLoadFlagとMV1DuplicateModelを組み合わせた際の挙動について ( No.2 )
名前:noname(解決) 日時:2025/06/23 10:16

管理人様 早急なご対応、誠にありがとうございます。 頂戴しましたバージョンにて、こちらでも修正を確認できました。 >MV1DuplicateModel も SetUseASyncLoadFlag( TRUE ); で非同期読み込みONの状態で実行すると非同期実行 存じ上げておりませんでした。 ご教示ありがとうございます。 今後ともよろしくお願いいたします。
メンテ

Page: 1 |

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

   クッキー保存