トップページ > 記事閲覧
マスクを使うとエラーがでる
名前:Nameless 日時: 2014/09/25 22:19

いつもお世話になっています。 マスクを利用した壁画を行うとアクセス違反が起こることがあるようです。 アクセス違反が起こることのあるパソコンではCreateMaskScreenのサンプルプログラムでもアクセス違反が起きました。 CreateMaskScreenのサンプルプログラムでは ・何も壁画されずにDxLib_Endの呼び出し時にアクセス違反が起きる(DrawBoxは-1を返しませんでした) ・正常に壁画されエラーもでない の二通りでした。 ただ、DxLib_Endを呼び出さなくても壁画関係の関数(ScreenFlip,DrawBox,GrawGraph,DrawStringToHandleなど)を 何度も呼んでいるとそのうち発生します。 以下はCreateMaskScreenのサンプルプログラムにChangeWindowMode(TRUE);を追加しただけのプログラムで アクセス違反が発生した時のLog.txtです。 ----------------------------------------------------------------------------------------------- 0:システムの情報を出力します 0: DXライブラリ Ver3.12e 0: 論理プロセッサの数 : 2 15: OS Windows8 ( Build 9200 ) 185: 現時点のCPU動作速度:大体1.94GHz 192: MMX命令を使用します 206: SSE命令が使用可能です 213: SSE2命令が使用可能です 218: CPUベンダ:GenuineIntel 258: CPU名: Intel(R) Celeron(R) CPU 1005M @ 1.90GHz 261:COMの初期化... 成功しました 273:メモリ総量:3993.77MB 空きメモリ領域:1341.23MB 276:タイマーの精度を検査します 280:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 283: パフォーマンスカウンターを使用します タイマー精度 : 1851.264000 KHz 292: ソフトの二重起動検査... 二重起動はされていませんでした 302:ウインドウクラスを登録します... 登録に成功しました 309:ウインドウモード起動用のウインドウを作成します 315:ウインドウの作成に成功しました 319:ウインドウを表示します 330:IMEを無効にしました 334:ウインドウスタイルをウインドウモード用に変更します... 完了 368:DirectInput関係初期化処理 371: XInput DLL の読み込み中... 成功 380: DirectInput7 の取得中... 成功 416: 引き続き初期化処理... 初期化成功 422: ジョイパッドの初期化... 428: ジョイパッドの初期化は正常に終了しました 431: マウスデバイスの初期化... 初期化成功 438: キーボードデバイスの初期化... 初期化成功 446:DirectInput 関連の初期化は正常に終了しました 451:XAudio2 の初期化を行います 457: XAudio2_8.dll を使用します 462: XAudio2 インターフェースの取得と初期化を行います.... 成功 Ver2.8 533:XAudio2 の初期化は正常に終了しました 555:DirectDraw オブジェクトの取得を行います.... 成功 566:引き続き初期化処理... 初期化に成功しました 588:IDirect3D9Ex オブジェクトを取得します.... 成功 598:IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します 858:成功 862:Driver:igdumdim32.dll Description:Intel(R) HD Graphics 865:画面のフォーマットは D3DFMT_X8R8G8B8 です 868:16bit Zバッファフォーマットは D3DFMT_D16 です 872:24bit Zバッファフォーマットは D3DFMT_D24X8 です 876:32bit Zバッファフォーマットは D3DFMT_D24X8 です 879:16bit カラーフォーマットは D3DFMT_R5G6B5 です 885:32bit カラーフォーマットは D3DFMT_X8R8G8B8 です 889:アルファ付き 16bit カラーフォーマットは D3DFMT_A4R4G4B4 です 892:アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 896:アルファテスト用 16bit カラーフォーマットは D3DFMT_A1R5G5B5 です 899:アルファテスト用 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 903:DXT1テクスチャフォーマットはD3DFMT_DXT1 です 906:DXT2テクスチャフォーマットはD3DFMT_DXT2 です 909:DXT3テクスチャフォーマットはD3DFMT_DXT3 です 927:DXT4テクスチャフォーマットはD3DFMT_DXT4 です 931:DXT5テクスチャフォーマットはD3DFMT_DXT5 です 934:描画用 16bit カラーフォーマットは D3DFMT_R5G6B5 です 939:描画用 32bit カラーフォーマットは D3DFMT_X8R8G8B8 です 943:描画用アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 946:描画用ABGR整数16ビット型カラーフォーマットは D3DFMT_A16B16G16R16 です 949:描画用ABGR浮動小数点16ビット型カラーフォーマットは D3DFMT_A16B16G16R16F です 953:描画用ABGR浮動小数点32ビット型カラーフォーマットは D3DFMT_A32B32G32R32F です 956:描画用1チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8R8G8B8 です 960:描画用1チャンネル整数16ビット型カラーフォーマットは D3DFMT_G16R16 です 963:描画用1チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_R16F です 966:描画用1チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_R32F です 970:描画用2チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8B8G8R8 です 974:描画用2チャンネル整数16ビット型カラーフォーマットは D3DFMT_G16R16 です 977:描画用2チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_G16R16F です 981:描画用2チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_G32R32F です 985:一度に描画できるプリミティブの最大数:1048575 989:対応している最大頂点インデックス:16777215 993:同時にレンダリングできるバッファの数:4 996:最大テクスチャサイズ 幅:8192 高さ:8192 1000:テクスチャステージテンポラリレジスタ:使用可 1004:減算合成のハードウェア対応:ネイティブ 1007:ハードウェア頂点シェーダーバージョンコード:300 1011:エミュレーション頂点シェーダーバージョンコード:エミュレーション無し 1014:ピクセルシェーダーバージョンコード:300 1036:バックバッファロック転送の時間:3459nsec 一時的な描画可能バッファを使用した転送の時間:1814nsec 1040:バックバッファロックを使用しません 1044:Zバッファを作成します.... 成功 5435:プログラマブルシェーダーを使用します 5508:フォントの初期化を行います 5513:フォントの初期化は正常に終了しました 5555:文字コードバッファの初期化を行います... 完了しました 8745:フォントの初期化を行います 8749:フォントの初期化は正常に終了しました ----------------------------------------------------------------------------------------------- お忙しい中大変だとは思いますがどうかよろしくお願いします。
メンテ

Page: 1 |

追記 ( No.1 )
名前:Nameless 日時:2014/09/26 22:09

追記です。 ほかのパソコンでCreateMaskScreenのサンプルプログラムを試したところ 1.まったく壁画されない。たまにDxLib_Endでエラーがでる。 2.LoadMaskで0が返され、そのハンドルを使ったDrawMaskが失敗し、マスクが壁画されない。  それ以外は正常に動く? という結果になるパソコンもありました。 この類のバグはあまり慣れていないので、 情報が足りてないようでしたら指摘してください。
メンテ
Re: マスクを使うとエラーがでる ( No.2 )
名前:管理人 日時:2014/09/27 12:48

ご報告ありがとうございます 手元の環境で CreateMaskScreen のサンプルプログラムを試してみましたが、問題なく動作しました グラフィックスデバイスかOSがエラーが発生するかどうかに関わってそうですので、 もし可能でしたらNamelessさんが試された「ほかのパソコン」で実行した際の Log.txt も こちらに貼り付けていただけないでしょうか?
メンテ
Re: マスクを使うとエラーがでる ( No.3 )
名前:Nameless 日時:2014/09/27 17:58

「ほかのパソコン」は手元にあるパソコンではないのですが、 そのときのLog.txtを回収し忘れていたので月曜日以降でないと 貼り付けれそうにありません。申し訳ございません。 一応OSはWindows7 Ultimate 64ビットです。
メンテ
Re: マスクを使うとエラーがでる ( No.4 )
名前:管理人 日時:2014/09/28 23:01

Windows7 でも発生したということは、OSが原因ではなさそうですので ほぼグラフィックスデバイスがエラーが発生するかどうかに関わっていると考えて良さそうです ところで、お使いの開発環境は Visual Studio でしょうか?
メンテ
Re: マスクを使うとエラーがでる ( No.5 )
名前:Nameless 日時:2014/09/29 07:11

はい。 Visual Studio 2012 Professional です。
メンテ
Re: マスクを使うとエラーがでる ( No.6 )
名前:管理人 日時:2014/09/29 23:03

ご返答ありがとうございます では、こちらに関数リファレンスの CreateMaskScreen のサンプルプログラムを DXライブラリのソースつきでデバッグ実行ができるようにしたプロジェクトをアップしましたので、 お手数で申し訳ありませんが、よろしければデバッグ実行をして、アクセス違反が発生した箇所の ソースファイル名と行番号、呼び出し履歴の状態を教えて頂けないでしょうか? m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibSourceTest.exe
メンテ
Re: マスクを使うとエラーがでる ( No.7 )
名前:Nameless 日時:2014/09/29 23:26

とりあえず手元にあるNo.3のときのパソコンで似たようなことをやった時の呼び出し履歴のメモを貼り付けておきます。   ・ 何も表示されないバージョン(サンプルプログラムのまま) igdumdim32.dll!6af2263e() 不明 [下のフレームは間違っているか、または見つかりません。igdumdim32.dll に対して読み込まれたシンボルはありません。] igdumdim32.dll!6aef033e() 不明 d3d9.dll!6c847353() 不明 d3d9.dll!6c848fba() 不明 d3d9.dll!6c84a82d() 不明 d3d9.dll!6c74d2a2() 不明 d3d9.dll!6c7928d5() 不明 d3d9.dll!6c7927e6() 不明 d3d9.dll!6c73812a() 不明 d3d9.dll!6c74d249() 不明 > ランチャー.exe!DxLib::Direct3D9_ObjectRelease(void * pObject) 行 1063 C++//実引数は0でない ランチャー.exe!DxLib::Graphics_Hardware_D3D9_Shader_TerminateHandle_PF(DxLib::SHADERHANDLEDATA * Shader) 行 24181 C++ ランチャー.exe!DxLib::Graphics_Hardware_Shader_TerminateHandle_PF(DxLib::SHADERHANDLEDATA * Shader) 行 1160 C++ ランチャー.exe!DxLib::Graphics_Shader_TerminateHandle(DxLib::HANDLEINFO * HandleInfo) 行 21695 C++ ランチャー.exe!DxLib::SubHandle(int Handle) 行 312 C++ ランチャー.exe!DxLib::AllHandleSub(int HandleType, int (DxLib::HANDLEINFO *) * DeleteCancelCheckFunction) 行 478 C++ ランチャー.exe!DxLib::InitShader() 行 11519 C++ ランチャー.exe!DxLib::Graphics_Terminate() 行 15157 C++ ランチャー.exe!DxLib::NS_DxLib_End() 行 296 C++ ランチャー.exe!DxLib::DxLib_End() 行 78 C++   ・ 壁画部分をループさせてエラーを起こさせたバージョン KernelBase.dll!770e0cd6() 不明 [下のフレームは間違っているか、または見つかりません。KernelBase.dll に対して読み込まれたシンボルはありません。] user32.dll!76d7d7bb() 不明 user32.dll!76d7885c() 不明 IMETIP.DLL!69d8a491() 不明 IMETIP.DLL!69d94fc8() 不明 IMETIP.DLL!69d8a810() 不明 IMETIP.DLL!69d8a4f6() 不明 IMETIP.DLL!69d94fc8() 不明 IMJPTIP.DLL!69ebdc6b() 不明 IMJPTIP.DLL!69ecb66a() 不明 IMETIP.DLL!69db19a2() 不明 IMETIP.DLL!69da6877() 不明 IMETIP.DLL!69dae848() 不明 IMETIP.DLL!69d9299b() 不明 msvcrt.dll!773898cd() 不明 msvcrt.dll!773898da() 不明 msctf.dll!77126e71() 不明 IMJPTIP.DLL!69ecc57e() 不明 IMJPTIP.DLL!69ecc585() 不明 IMJPTIP.DLL!69ebdd45() 不明 IMETIP.DLL!69db5f2c() 不明 IMETIP.DLL!69da49f8() 不明 IMETIP.DLL!69da4be3() 不明 IMETIP.DLL!69dbc930() 不明 IMETIP.DLL!69d92670() 不明 IMETIP.DLL!69da3efc() 不明 IMETIP.DLL!69da3f7e() 不明 user32.dll!76d76238() 不明 user32.dll!76d768ea() 不明 user32.dll!76d76899() 不明 user32.dll!76d77d31() 不明 user32.dll!76d78112() 不明 > ランチャー.exe!DxLib::NS_ProcessMessage() 行 520 C++//実引数msgの値{hwnd = 0x000c0334 {unused=196608 },message = 32767,wParam = 14,lParam = 0,time = 2309657,pt = {x=765 y=567}} ランチャー.exe!DxLib::ProcessMessage() 行 556 C++   ・ ループ中のDxLib::ProcessMessageを抜いてみたバージョン > ランチャー.exe!DxLib::Graphics_D3D9_DeviceState_SetViewport(tagD_D3DVIEWPORT9 * Viewport) 行 6057 C++//エラー箇所は関数呼び出し直後。ほかのスレッドでのエラー? ランチャー.exe!DxLib::Graphics_D3D9_DeviceState_SetViewportEasy(int x1, int y1, int x2, int y2) 行 6100 C++ ランチャー.exe!DxLib::Graphics_D3D9_DeviceState_SetRenderTarget(D_IDirect3DSurface9 * TargetSurface, int TargetIndex) 行 6251 C++ ランチャー.exe!DxLib::Mask_D3D9_DrawAfterFunction_PF(tagRECT * Rect) 行 304 C++ ランチャー.exe!DxLib::Mask_DrawAfterFunction_PF(tagRECT * Rect) 行 74 C++ ランチャー.exe!DxLib::Mask_DrawAfterFunction(tagRECT Rect) 行 1920 C++ ランチャー.exe!DxLib::DrawFillBox(int x1, int y1, int x2, int y2, int Color) 行 4477 C++ ランチャー.exe!DxLib::DrawBox(int x1, int y1, int x2, int y2, int Color, int FillFlag) 行 4443 C++ 見にくくてすみません。もう一台は今から試します。
メンテ
Re: マスクを使うとエラーがでる ( No.8 )
名前:Nameless 日時:2014/09/29 23:48

上のはver3.12eで試したので今いただいたver3.12fの物とは行にずれがあるようですね。 とりあえずいただいたもので試した結果は igdumdim32.dll!7246afce() 不明 [下のフレームは間違っているか、または見つかりません。igdumdim32.dll に対して読み込まれたシンボルはありません。] igdumdim32.dll!7240fc6b() 不明 d3d9.dll!73af0647() 不明 d3d9.dll!73aee32f() 不明 d3d9.dll!73aeed5f() 不明 d3d9.dll!739e3370() 不明 d3d9.dll!739eaf66() 不明 d3d9.dll!739eae8a() 不明 d3d9.dll!739e333d() 不明 d3d9.dll!739eae4a() 不明 > DxLibSourceTestVS2012.exe!DxLib::Direct3D9_ObjectRelease(void * pObject) 行 1579 C++ DxLibSourceTestVS2012.exe!DxLib::Graphics_Hardware_D3D9_Shader_TerminateHandle_PF(DxLib::SHADERHANDLEDATA * Shader) 行 24490 C++ DxLibSourceTestVS2012.exe!DxLib::Graphics_Hardware_Shader_TerminateHandle_PF(DxLib::SHADERHANDLEDATA * Shader) 行 2014 C++ DxLibSourceTestVS2012.exe!DxLib::Graphics_Shader_TerminateHandle(DxLib::HANDLEINFO * HandleInfo) 行 21742 C++ DxLibSourceTestVS2012.exe!DxLib::SubHandle(int Handle) 行 312 C++ DxLibSourceTestVS2012.exe!DxLib::AllHandleSub(int HandleType, int (DxLib::HANDLEINFO *) * DeleteCancelCheckFunction) 行 478 C++ DxLibSourceTestVS2012.exe!DxLib::InitShader() 行 11545 C++ DxLibSourceTestVS2012.exe!DxLib::Graphics_Terminate() 行 15183 C++ DxLibSourceTestVS2012.exe!DxLib::NS_DxLib_End() 行 296 C++ DxLibSourceTestVS2012.exe!DxLib::DxLib_End() 行 78 C++ となりました。 上に貼り付けたものと同じく DxGraphicsAPIWin.cpp のDirect3D9_ObjectRelease関数でアクセス違反が起こっているようです。
メンテ
Re: マスクを使うとエラーがでる ( No.9 )
名前:管理人 日時:2014/09/30 22:57

お試しいただきありがとうございます 呼び出し履歴を拝見する限りでは、エラーの原因となった箇所で停止しているわけではなく 後始末の段階で不具合を検知して停止しているようで、この方法では原因は突き止められないようです・・・ とりあえずマスクイメージをテクスチャに転送する処理がマスク処理でのみ使用している方式なので、 通常の画像用のテクスチャにイメージを転送するときと同じ方式にしてみました これでエラーが解消されるかはわかりませんが、よろしければお試しになってみてください m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: マスクを使うとエラーがでる ( No.10 )
名前:Nameless 日時:2014/09/30 23:33

とりあえず試してみたのですが、同じところでエラーが出てしまいます。 画面も何も壁画されないままです。
メンテ
Re: マスクを使うとエラーがでる ( No.11 )
名前:Nameless 日時:2014/09/30 23:46

こちらの環境で少し試していたのですが、 ・サンプルプログラムのDrawBoxをコメントアウトする。 ・サンプルプログラムのDrawBoxの直前に SetUseMaskScreenFlag(FALSE); を入れる。 のように、マスクを「使った」壁画を行わないならエラーは起こらないようです。 ただ、DrawMaskやLoadMaskをコメントアウトしてもエラーは出るので壁画時にマスクをかけるときに不具合が起きているのではないでしょうか。 推測にすぎませんが。
メンテ
Re: マスクを使うとエラーがでる ( No.12 )
名前:管理人 日時:2014/10/02 00:37

お試しいただきありがとうございます、 そして重要な情報ありがとうございます ご指摘の通りマスクを適用するときにエラーが発生している可能性が高いです とはいえ、マスクを適用する箇所には決定的に怪しいことろは見当たらず・・・ とりあえず、マスクの適用にピクセルシェーダーを使用しないようにした場合は 正常に動作するかどうかを知りたいので、何度もお手数で申し訳ありませんが DxLib_Init を呼ぶ前の箇所に SetUseNormalDrawShader( FALSE ) ; という記述を追加して実行してみて頂けないでしょうか? これで正常に動作すればマスクの適用に使用しているピクセルシェーダー関係が原因ということになります
メンテ
Re: マスクを使うとエラーがでる ( No.13 )
名前:Nameless 日時:2014/10/02 18:19

試してみましたが、変わらずエラーが出てしまいました。 壁画結果も真っ黒のままです。
メンテ
Re: マスクを使うとエラーがでる ( No.14 )
名前:管理人 日時:2014/10/03 02:08

お試しいただきありがとうございます ピクセルシェーダーを使用するかどうかは関係無いようですね・・・ すみません、解決まではそれなりに時間がかかるかもしれません 次のテスト用として、マスク適用の処理を行う前に行う設定に一部不備があったのを修正しました もしかしたらこれで正常に動作するようになるかもしれませんので、よろしければお試しください m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: マスクを使うとエラーがでる ( No.15 )
名前:Nameless 日時:2014/10/03 17:19

試してみたところ正常に動きました。 試したのは手元の一台だけなので、念のため他のパソコンでも試してから 解決にしようと思いますが、本当にありがとうございます。
メンテ
Re: マスクを使うとエラーがでる ( No.16 )
名前:Nameless(解決) 日時:2014/10/04 18:07

以前のバージョンでエラーが出るパソコン3台(あの後もう一台見つかりました) 全てで正常に動作することを確認しました。 重ねてお礼いたします。
メンテ
Re: マスクを使うとエラーがでる ( No.17 )
名前:管理人(解決) 日時:2014/10/06 22:31

お試しいただきありがとうございます! 正常に動作したということで何よりです マスク処理では使用していない Direct3D の特定の設定の値の一つを無効な値にしてしまっている、というものだったのですが、 「無効な値を渡しても単に無視されるだけだろうから、多分これが原因ではないだろうな、でも一応・・・」程度の 候補だったのですが、まさかそれが原因だったとは・・・ ご迷惑お掛けしました orz そして何度もテストにお付き合いいただきありがとうございます! m(_ _)m
メンテ

Page: 1 |

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

   クッキー保存