トップページ > 記事閲覧
【3.10f】GraphFilter()などで動作が停止
名前:てらす 日時: 2013/07/29 01:31

度々すみません。てらすです。 乗算済みアルファ機能が実装され色々と試していた際に不具合らしきものを見つけました。 乗算済みアルファ機能とは関係ないのですが・・・ SetChangeScreenModeGraphicsSystemResetFlag( FALSE )を使用して画面モード変更時に グラフィックハンドルを無効にしない設定にしてあるプログラムで、 SetGraphModeやChangeWindowModeで画面モードを変更した時、 GraphFilterやGraphBlendなどのところでプログラムが停止してしまいます。 毎回というわけではないのですが、再現頻度は体感で8割程度でしょうか。 かなりの頻度で現象が発生しました。 試したDXライブラリのバージョンは3.10eと7/27のテストバージョンですが、 テストバージョンでのみ現象の発生を確認しています。 環境: Windows 7 Home Premium 64-bit (6.1, Build 7601) Service Pack 1 (7601.win7sp1_gdr.130318-1533) Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz (8 CPUs), ~3.4GHz NVIDIA GeForce GTX 660 (Driver Version: 9.18.13.1422) Visual Studio 2010 Professional (Version: 10.0.40219.1 SP1Rel) 余談: そういえば環境について、今まではデュアルディスプレイだということを書いていませんでしたが、 必要な情報でしたでしょうか?
メンテ

Page: 1 |

Re: 【3.10f】GraphFilter()などで動作が停止 ( No.1 )
名前:管理人 日時:2013/08/03 17:21

手元の環境では再現できなかったのですが、エラーの原因となってしまいそうな箇所に手を加えてみました よろしければこちらをお試しになってみてください 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)」をして下さい) > 余談: > そういえば環境について、今まではデュアルディスプレイだということを書いていませんでしたが、 > 必要な情報でしたでしょうか? 以前デュアルディスプレイで挙動がおかしくなるという現象があったので( NVidia のドライバが原因で デュアルディスプレイ+64bitOSの環境で 32bitアプリを起動すると、Direct3D の特定の処理でエラーが 発生するという現象がありました )教えて頂けると原因究明のきっかけになるかもしれません
メンテ
Re: 【3.10f】GraphFilter()などで動作が停止 ( No.2 )
名前:てらす 日時:2013/08/04 19:52

管理人さん、お疲れ様です。 ご回答ありがとうございます。 さっそく、更新していただいたバージョンで動作を確認して見ましたが 不具合の改善には至っておりませんでした・・・ 勝手ながら色々と試しまして、どうやらDXライブラリが6月23日のバージョンまでは正常に動作しますが 6月30日のバージョンから動作の停止が発生するようです。 ※確認用のバージョンは以下のスレッドからダウンロードしました。 h ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=3041 一応、この後のレスに不具合が発生した時のログと、動作確認に使用したテストコードを貼っておきます。 せっかくの便利な機能で、封印してしまうのはもったいないと思いますので・・・ 余談についてはわかりました。今後はデュアルディスプレイ環境であることも書いておきます。
メンテ
Re: 【3.10f】GraphFilter()などで動作が停止 ( No.3 )
名前:てらす 日時:2013/08/04 19:56

まずはログです。 0:システムの情報を出力します 2: DXライブラリ Ver3.10f 4: 論理プロセッサの数 : 8 8: OS Windows7 ( Build 7601 Service Pack 1 ) 114: CPU動作速度:大体3.49GHz 116: MMX命令を使用します 119: SSE命令が使用可能です 120: SSE2命令が使用可能です 121: CPUベンダ:GenuineIntel 125: CPU名: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz 126:COMの初期化... 成功しました 131:メモリ総量:8144.89MB 空きメモリ領域:4680.27MB 132:タイマーの精度を検査します 133:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 134: パフォーマンスカウンターを使用します タイマー精度 : 3420.585000 KHz 136: ソフトの二重起動検査... 二重起動はされていませんでした 139:ウインドウクラスを登録します... 登録に成功しました 140:ウインドウモード起動用のウインドウを作成します 161:ウインドウの作成に成功しました 162:ウインドウを表示します 182:IMEを無効にしました 184:ウインドウスタイルをウインドウモード用に変更します... 完了 210:DirectInput関係初期化処理 211: XInput DLL の読み込み中... 成功 218: DirectInput7 の取得中... 成功 232: 引き続き初期化処理... 初期化成功 235: ジョイパッドの初期化... 242: 入力装置を見つけました 244: デバイスの登録名:Virtual JoyStick KMDF HID Minidriver 245: デバイスの製品登録名:Virtual JoyStick KMDF HID Minidriver 298: 周期的エフェクトの作成に失敗しました。 302: ジョイパッドの追加は正常に終了しました 309: 入力装置を見つけました 312: デバイスの登録名:PC Game Controller 315: デバイスの製品登録名:PC Game Controller 319: 周期的エフェクトの作成に失敗しました。 323: ジョイパッドの追加は正常に終了しました 326: ジョイパッドの初期化は正常に終了しました 329: マウスデバイスの初期化... 初期化成功 335: キーボードデバイスの初期化... 初期化成功 342:DirectInput 関連の初期化は正常に終了しました 347:XAudio2 の初期化を行います 350: XAudio2 インターフェースの取得を行います.... 成功 Ver2.7 359: 引き続きインターフェースの初期化処理... 成功 363: X3DAudio.DLL の読み込み中... 成功 405: デバイス名:スピーカー (Sound Blaster X-Fi Surround 5.1 Pro) 407: チャンネル数:2 409: ビット精度:16bit 411: サンプリングレート:48000Hz 413:XAudio2 の初期化は正常に終了しました 417:DirectDraw オブジェクトの取得を行います.... 成功 424:引き続き初期化処理... 初期化に成功しました 464:IDirect3D9Ex オブジェクトを取得します.... 成功 468:IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します 722:成功 724:Driver:nvd3dum.dll Description:NVIDIA GeForce GTX 660 725:画面のフォーマットは D3DFMT_X8R8G8B8 です 726:16bit Zバッファフォーマットは D3DFMT_D16 です 728:24bit Zバッファフォーマットは D3DFMT_D24X8 です 729:32bit Zバッファフォーマットは D3DFMT_D16 です 730:16bit カラーフォーマットは D3DFMT_R5G6B5 です 731:32bit カラーフォーマットは D3DFMT_X8R8G8B8 です 732:アルファ付き 16bit カラーフォーマットは D3DFMT_A4R4G4B4 です 733:アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 734:アルファテスト用 16bit カラーフォーマットは D3DFMT_A1R5G5B5 です 735:アルファテスト用 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 736:DXT1テクスチャフォーマットはD3DFMT_DXT1 です 738:DXT2テクスチャフォーマットはD3DFMT_DXT2 です 739:DXT3テクスチャフォーマットはD3DFMT_DXT3 です 740:DXT4テクスチャフォーマットはD3DFMT_DXT4 です 741:DXT5テクスチャフォーマットはD3DFMT_DXT5 です 742:描画用 16bit カラーフォーマットは D3DFMT_R5G5B5 です 743:描画用 32bit カラーフォーマットは D3DFMT_X8R8G8B8 です 744:描画用アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 745:描画用ABGR整数16ビット型カラーフォーマットは D3DFMT_A16B16G16R16 です 746:描画用ABGR浮動小数点16ビット型カラーフォーマットは D3DFMT_A16B16G16R16F です 747:描画用ABGR浮動小数点32ビット型カラーフォーマットは D3DFMT_A32B32G32R32F です 749:描画用1チャンネル整数8ビット型カラーフォーマットは D3DFMT_L8 です 750:描画用1チャンネル整数16ビット型カラーフォーマットは D3DFMT_L16 です 751:描画用1チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_R16F です 752:描画用1チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_R32F です 753:描画用2チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8B8G8R8 です 754:描画用2チャンネル整数16ビット型カラーフォーマットは D3DFMT_G16R16 です 755:描画用2チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_G16R16F です 757:描画用2チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_G32R32F です 758:一度に描画できるプリミティブの最大数:16777215 759:対応している最大頂点インデックス:16777215 760:同時にレンダリングできるバッファの数:4 761:最大テクスチャサイズ 幅:8192 高さ:8192 763:テクスチャステージテンポラリレジスタ:使用可 764:減算合成のハードウェア対応:ネイティブ 765:ハードウェア頂点シェーダーバージョンコード:300 766:エミュレーション頂点シェーダーバージョンコード:エミュレーション無し 767:ピクセルシェーダーバージョンコード:300 773:バックバッファロック転送の時間:41nsec 一時的な描画可能バッファを使用した転送の時間:654nsec 775:バックバッファロックを使用します 776:Zバッファを作成します.... 成功 807:プログラマブルシェーダーを使用します 842:フォントの初期化を行います 847:フォントの初期化は正常に終了しました 860:文字コードバッファの初期化を行います... 完了しました 866:画面モード変更処理を開始します 872: Direct3DDevice9 の解放 2 891: Direct3D9 DLL の解放 1 895: DirectDraw オブジェクトの取得を行います.... 成功 897: 引き続き初期化処理... 初期化に成功しました 925: IDirect3D9Ex オブジェクトを取得します.... 成功 986: IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します 1272: 成功 1274: Driver:nvd3dum.dll Description:NVIDIA GeForce GTX 660 1275: 画面のフォーマットは D3DFMT_X8R8G8B8 です 1277: 16bit Zバッファフォーマットは D3DFMT_D16 です 1278: 24bit Zバッファフォーマットは D3DFMT_D24X8 です 1279: 32bit Zバッファフォーマットは D3DFMT_D16 です 1281: 16bit カラーフォーマットは D3DFMT_R5G6B5 です 1282: 32bit カラーフォーマットは D3DFMT_X8R8G8B8 です 1283: アルファ付き 16bit カラーフォーマットは D3DFMT_A4R4G4B4 です 1284: アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 1286: アルファテスト用 16bit カラーフォーマットは D3DFMT_A1R5G5B5 です 1287: アルファテスト用 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 1288: DXT1テクスチャフォーマットはD3DFMT_DXT1 です 1290: DXT2テクスチャフォーマットはD3DFMT_DXT2 です 1291: DXT3テクスチャフォーマットはD3DFMT_DXT3 です 1292: DXT4テクスチャフォーマットはD3DFMT_DXT4 です 1293: DXT5テクスチャフォーマットはD3DFMT_DXT5 です 1295: 描画用 16bit カラーフォーマットは D3DFMT_R5G5B5 です 1296: 描画用 32bit カラーフォーマットは D3DFMT_X8R8G8B8 です 1297: 描画用アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 1299: 描画用ABGR整数16ビット型カラーフォーマットは D3DFMT_A16B16G16R16 です 1300: 描画用ABGR浮動小数点16ビット型カラーフォーマットは D3DFMT_A16B16G16R16F です 1301: 描画用ABGR浮動小数点32ビット型カラーフォーマットは D3DFMT_A32B32G32R32F です 1302: 描画用1チャンネル整数8ビット型カラーフォーマットは D3DFMT_L8 です 1304: 描画用1チャンネル整数16ビット型カラーフォーマットは D3DFMT_L16 です 1305: 描画用1チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_R16F です 1306: 描画用1チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_R32F です 1308: 描画用2チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8B8G8R8 です 1309: 描画用2チャンネル整数16ビット型カラーフォーマットは D3DFMT_G16R16 です 1310: 描画用2チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_G16R16F です 1311: 描画用2チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_G32R32F です 1313: 一度に描画できるプリミティブの最大数:16777215 1314: 対応している最大頂点インデックス:16777215 1315: 同時にレンダリングできるバッファの数:4 1317: 最大テクスチャサイズ 幅:8192 高さ:8192 1318: テクスチャステージテンポラリレジスタ:使用可 1320: 減算合成のハードウェア対応:ネイティブ 1321: ハードウェア頂点シェーダーバージョンコード:300 1322: エミュレーション頂点シェーダーバージョンコード:エミュレーション無し 1324: ピクセルシェーダーバージョンコード:300 1329: バックバッファロック転送の時間:26nsec 一時的な描画可能バッファを使用した転送の時間:564nsec 1330: バックバッファロックを使用します 1332: Zバッファを作成します.... 成功 1424: プログラマブルシェーダーを使用します 1472: グラフィックを復帰します 1474: グラフィックの復帰が完了しました 1477: ウインドウスタイルをウインドウモード用に変更します... 完了 1481:画面モード変更処理は正常に終了しました test.exe の 0x6acb9ed8 で初回の例外が発生しました: 0xC0000005: 場所 0x00000088 を読み込み中にアクセス違反が発生しました。 test.exe の 0x772715de でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000088 を読み込み中にアクセス違反が発生しました。
メンテ
Re: 【3.10f】GraphFilter()などで動作が停止 ( No.4 )
名前:てらす 日時:2013/08/04 19:58

続いてテストコードです。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){ int graph; ChangeWindowMode( TRUE ); if( DxLib_Init() == -1 ){ return -1; } //これがFALSEの時のみ SetChangeScreenModeGraphicsSystemResetFlag( FALSE ); //* 画像を作成 graph = MakeScreen( 64, 64 ); /*/ // またはLoadGraphでの読み込み graph = LoadGraph( "test.png" ); //*/ //* 画像を読み込んだ後に画面モード変更 SetGraphMode( 320, 240, 32 ); /*/ // またはフルスクリーンモードに変更 ChangeWindowMode( FALSE ); //*/ GraphFilter( graph, DX_GRAPH_FILTER_GAUSS, 8, 100 ); //ここで止まる DrawGraph( 0, 0, graph, FALSE ); WaitKey(); DxLib_End(); return 0; }
メンテ
Re: 【3.10f】GraphFilter()などで動作が停止 ( No.5 )
名前:管理人 日時:2013/08/08 23:12

ありがとうございます、テストコードで私の手元でも現象が再現しました ( 私のテストで再現しなかったのは本バグが DX_GRAPH_FILTER_GAUSS のように 複数パスが必要なフィルターでのみエラーが発生するバグだったからでした ) 修正版をアップしましたので、よろしければお試しになってみてください 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: 【3.10f】GraphFilter()などで動作が停止 ( No.6 )
名前:てらす(解決) 日時:2013/08/12 19:19

返信が遅くなり申し訳ありません。 私の方でも現象が修正されていることを確認しました。 対応してくださり、ありがとうございました。
メンテ

Page: 1 |

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

   クッキー保存