トップページ > 記事閲覧
MV1SetUseOrigShaderとMV1DrawModelを行った後MakeScreenなどが失敗する
名前:pikixu 日時: 2025/12/20 15:58

こんばんは、はじめまして。 DxLibいつも利用させていただいてます。 恐らく不具合かと思うのですが 3.24fのバージョンでMV1SetUseOrigShaderとMV1DrawModelを行った後にMakeScreenやCreateGraphFromSoftImageを行うと失敗する事があるようです。 手元環境の症状かもしれませんがサンプルコードとログを添付しますのでご確認ください。 所管など ・MV1SetUseOrigShaderとMV1DrawModel>MakeScreenの順で実行すると生成に失敗する ・何かスレッド処理があるのか、待ちを加えず直後に実行するとたまに通過する事もある? ・MakeScreenを行った後にMV1SetUseOrigShaderとMV1DrawModel>MakeScreenの順だと成功している(気がする) ・MV1SetUseOrigShaderを(TRUE)にしなければどちらも成功する、恐らく何かシェーダーの切り替えフラグが残ったまま、画面以外に描画する類の処理でコケてる? ・MV1SetUseOrigShaderを(FALSE)に戻してから生成しても失敗する サンプルプロジェクトのコードとログです(ダブルスラッシュは禁則判定みたいなので全角スペースを挿入しています) https:/ /drive.google.com/file/d/1FGb8c0QRc1Nxeghr1zYXlo5uv9gynfcs/view?usp=drive_link #include "DxLib.h" #if true int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // ウィンドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが起きたら直ちに終了 return -1 ; } //(※)MV1SetUseOrigShaderをTRUEの状態で何度かMV1DrawModelを実行するとその後グラフィックハンドラの生成系関数が失敗する MV1SetUseOrigShader( TRUE ) ; // 描画を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; int ModelHandle = MV1LoadModel( "NormalBox.mqo" ) ; MV1SetPosition( ModelHandle, VGet( 160, 240.0f, 0.0f ) ) ; //何回か描画、または時間を置く for(int i=0; ProcessMessage() == 0 && i < 4; ++i){ // 画面をクリア ClearDrawScreen() ; MV1DrawModel( ModelHandle ) ; ScreenFlip() ; } // (※)チェック、グラフィックハンドルを作成する類の処理で失敗する、恐らくシェーダーの設定が何か残って悪さしている? MV1SetUseOrigShader( FALSE ) ; // レンダーターゲットの作成 int screenHandle = 0; screenHandle = MakeScreen(1024, 1024, true); if (screenHandle == -1) { DxLib_End(); return -1; } DeleteGraph(screenHandle); // ソフトイメージからグラフィック作成 int imageHandle = LoadSoftImage("test.png"); if(imageHandle == -1){ // ロード失敗 return -1; } for(int i=0; i < 256; ++i){ int a, r, g, b; GetPaletteSoftImage(imageHandle, i, &r, &g, &b, &a); SetPaletteSoftImage(imageHandle, i, i, i, i, a); } int texhandle = CreateGraphFromSoftImage(imageHandle); DeleteSoftImage(imageHandle); if (texhandle == -1) { DxLib_End(); return -1; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } #endif
メンテ

Page: 1 |

Re: MV1SetUseOrigShaderとMV1DrawModelを行った後MakeScreenなどが失敗する ( No.1 )
名前:管理人 日時:2025/12/22 00:48

再現用サンプルプロジェクトのご提供ありがとうございます、手元でも現象が再現できました m(_ _)m 現象としては MV1SetUseOrigShader( TRUE ); が実行された後、SetUsePixelShader 等で 自前シェーダーを設定すること無く MV1DrawModel を実行すると不具合が発生する、 というものでした 自前シェーダーを設定していない状態で MV1DrawModel を実行しても正常に動作するように 修正したバージョンをアップしましたので、よろしければお試しください 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 10.2 用 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 // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: MV1SetUseOrigShaderとMV1DrawModelを行った後MakeScreenなどが失敗する ( No.2 )
名前:pikixu(解決済み) 日時:2025/12/23 02:25

返信ありがとうございます。 確かにSetUsePixelShaderすることでも再現しなくなるようですね。詳細情報ありがとうございます。 添付のLibでもエラーが起きなくなることも確認できました。 修正助かります!
メンテ

Page: 1 |

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

   クッキー保存