トップページ > 記事閲覧
シャドウマップの初期化について
名前:さかな 日時: 2014/09/25 15:40

いつもお世話になっております。 DxCompileConfig.hを変更していくつかの機能を無効化すると、DxLib_Init()が失敗するようです。 (具体的な設定は本質的ではなさそうなのでとりあえず省略します。) ログを使って調べてみると、実行のたびに異なる場所でSegmentation Faultが発生しているように見えるのですが、 最も頻繁にプログラムが停止するのはDxGraphicsD3D9.cppのGraphics_Hardware_D3D9_SetupUseZBuffer_PF関数内でした。 関数内のはじめのif文の条件式で、SHADOWMAPCHK()マクロの論理NOT演算子を取り除くと以降のプログラムも正常に動作するようになったので、 この行が原因ではないかと考えています。 パラメータがシャドウマップならば実行されるとあるブロックが、SHADOWMAPCHKが偽のときに実行されるのは少しおかしい気もします。 僕はDXライブラリの内部構造に疎いので、どなたか検証していただけないでしょうか。 環境は HD Graphics 4000 Windows 8.1 Pro Update DXライブラリ3.12e(MinGW/GCC4.8.1+libpng1.6.12+zlib1.2.8でビルド) です。 またこれは管理人さんへの要望なのですが、最新のlibpngでは内部の構造体が隠ぺいされる仕様に変更されたことに伴い pngpriv.hがデフォルトでインストールされなくなったようです。 pngpriv.hがなくてもコンパイルが通るように修正することは可能でしょうか。 よろしくお願いします。
メンテ

Page: 1 |

Re: シャドウマップの初期化について ( No.1 )
名前:さかな 日時:2014/09/25 16:39

すみません、SHADOWMAPCHKの論理を反転させると動いたように見えたのですが その後何度か実行を繰り返すと再びFaultが発生してしまいました。 原因をもう少し調べてからもう一度質問します。
メンテ
Re: シャドウマップの初期化について ( No.2 )
名前:管理人 日時:2014/09/27 12:46

> DxCompileConfig.hを変更していくつかの機能を無効化すると、DxLib_Init()が失敗するようです。 よろしければエラーが発生した際の DxCompileConfig.h の内容を教えて頂けないでしょうか? > パラメータがシャドウマップならば実行されるとあるブロックが、SHADOWMAPCHKが偽のときに実行されるのは少しおかしい気もします。 SHADOWMAPCHK マクロが偽のときがハンドルがシャドウマップの場合なので、あの記述で正しいです > またこれは管理人さんへの要望なのですが、最新のlibpngでは内部の構造体が隠ぺいされる仕様に変更されたことに伴い > pngpriv.hがデフォルトでインストールされなくなったようです。 libpng の 1.6.12 のソースコードをダウンロードしてみましたが、pngpriv.h は存在しました
メンテ
Re: シャドウマップの初期化について ( No.3 )
名前:さかな 日時:2014/09/27 20:53

管理人さん、回答ありがとうございます。 現象発生時のDxCompileConfig.hの内容は以下のとおりです(3.12fに更新しても症状は改善しませんでした)。 // スタティックライブラリ生成時ライブラリ機能制限用定義 ----------------------- // namespace DxLib を使用する場合は次のコメントを外してください #define DX_USE_NAMESPACE // インラインアセンブラを使用しないソースコードでコンパイルする場合は以下のコメントアウトを外してください #define DX_NON_INLINE_ASM // DXライブラリのプログラムから文字列を一切排除する場合はコメントを外してください // (バイナリエディタで実行ファイルを開いてもDXライブラリを使用していることが分かり難くなります(よく調べれば当然分かりますが) // 因みに、エラー出力が一切されなくなりますので管理人の対応時に支障をきたすかもしれません) //#define DX_NON_LITERAL_STRING // すべての関数をスレッドセーフにする場合はコメントを外してください //#define DX_THREAD_SAFE // ネットワーク関連の関数だけスレッドセーフにする場合はコメントを外して下さい #define DX_THREAD_SAFE_NETWORK_ONLY // DXアーカイブがいらない方は次のコメントを外してください // ( DXアーカイブを無効にすると、DXアーカイブを内部で使っている関係上 DX_NON_MODEL と DX_NON_FILTER と DX_NON_NORMAL_DRAW_SHADER も有効になります ) //#define DX_NON_DXA // ムービー機能がいらない方は次のコメントを外してください #define DX_NON_MOVIE // TGA画像の読み込み機能がいらない方は次のコメントを外してください #define DX_NON_TGA // JPEG画像の読みこみ機能がいらない方は次のコメントを外してください // ※DxUseCLib.lib も再コンパイルする必要があります #define DX_NON_JPEGREAD // PNG画像の読みこみ機能がいらない方は次のコメントを外してください // ※DxUseCLib.lib も再コンパイルする必要があります //#define DX_NON_PNGREAD // TIFF画像の読みこみ機能がいらない方は次のコメントを外してください // ※DxUseCLib.lib も再コンパイルする必要があります #define DX_NON_TIFFREAD // GraphFilter や GraphBlend を使用しない方は次のコメントを外して下さい //#define DX_NON_FILTER // 通常描画にプログラマブルシェーダーを使用しない方は次のコメントを外してください //#define DX_NON_NORMAL_DRAW_SHADER // ソフトウエア2D描画がいらない方は次のコメントを外してください #define DX_NON_2DDRAW // 標準 WAVE ファイル以外の音声ファイルを使用しない方は次のコメントを外してください #define DX_NON_ACM // DirectShow を使用した MP3 ファイルのデコードを行わない場合は次のコメントをはずしてください #define DX_NON_DSHOW_MP3 // DirectShow を使用した動画ファイルのデコードを行わない場合は次のコメントをはずしてください #define DX_NON_DSHOW_MOVIE // キーボードの基本的な入力機能以外はいらない方は次のコメントを外してください #define DX_NON_KEYEX // 文字列入力機能はいらない方は次のコメントを外して下さい #define DX_NON_INPUTSTRING // 通信機能がいらない方は次のコメントを外してください #define DX_NON_NETWORK // マスク機能がいらない方は次のコメントを外してください //#define DX_NON_MASK // Ogg Vorbis データを使用しない方は次のコメントをはずしてください // ※DxUseCLib.lib も再コンパイルする必要があります #define DX_NON_OGGVORBIS // Ogg Theora データを使用しない方は次のコメントをはずしてください // ※DxUseCLib.lib も再コンパイルする必要があります #define DX_NON_OGGTHEORA // 乱数発生器に Mersenne Twister を使用されない場合は以下のコメントを外して下さい // ※DxUseCLib.lib も再コンパイルする必要があります //#define DX_NON_MERSENNE_TWISTER // DXライブラリ内の確保メモリのダンプ機能を有効にする場合は次のコメントを外してください //#define DX_USE_DXLIB_MEM_DUMP // モデルデータを扱う機能を使用しない方は次のコメントを外してください #define DX_NON_MODEL // Bullet Physics をリンクしない場合は次のコメントを外してください // ※DxUseCLib.lib も再コンパイルする必要があります #define DX_NON_BULLET_PHYSICS // FBXファイルを読み込む機能を使用する方は次のコメントを外してください( 使用には FBX SDK のセットアップが必要です ) //#define DX_LOAD_FBX_MODEL // ビープ音機能がいらない方は次のコメントを外してください #define DX_NON_BEEP // タスクスイッチをOFFにする機能がいらない方は次のコメントを外してください // ( タスクスイッチOFF機能は使用不可です ) #define DX_NON_STOPTASKSWITCH // ログ出力を行わない場合は次のコメントを外して下さい //#define DX_NON_LOG // printfDx を無効にする場合は次のコメントを外して下さい //#define DX_NON_PRINTF_DX // 非同期読み込みを無効にする場合は次のコメントを外して下さい #define DX_NON_ASYNCLOAD // ファイル保存機能を無効にする場合は次のコメントを外して下さい //#define DX_NON_SAVEFUNCTION // ソフトウェアで扱うイメージを無効にする場合は次のコメントを外して下さい //#define DX_NON_SOFTIMAGE // フォント描画機能を無効にする場合は次のコメントを外して下さい //#define DX_NON_FONT // サウンド再生機能( ソフトウエアサウンド、MIDI含む )を無効にする場合は次のコメントを外して下さい //#define DX_NON_SOUND // 入力機能を無効にする場合は次のコメントを外して下さい //#define DX_NON_INPUT // マルチスレッドを使用しない場合は次のコメントを外してください #define DX_NON_MULTITHREAD // 各ハンドルのエラーチェックを無効にする場合は次のコメントを外してください( 若干高速化される代わりに無効なハンドルを関数に渡すと即不正なメモリアクセスエラーが発生するようになります ) #define DX_NON_HANDLE_ERROR_CHECK libpngの仕様変更については、make installを実行した時にpngpriv.hがインストール先ディレクトリにコピーされなくなったという意味です。 まぎらわしい書き方で申し訳ありません……
メンテ
Re: シャドウマップの初期化について ( No.4 )
名前:管理人 日時:2014/09/28 23:04

ありがとうございます 載せて頂いた DxCompileConfig.h の通りにしたところ、私の環境でも現象が発生しました エラーが発生する条件は DX_NON_HANDLE_ERROR_CHECK を有効にしていた場合で、 この定義を有効にすると各種ハンドルの有効性チェックが緩くなるのですが、 有効性チェックに頼ったプログラムを組んでしまっている箇所があり、そこでエラーが発生していました ( その箇所とはご指摘頂いた Graphics_Hardware_D3D9_SetupUseZBuffer_PF 関数内の SHADOWMAPCHK の部分です ) 修正版をアップしましたので、よろしければお試しください 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)」をして下さい) pngpriv.h についてのご説明ありがとうございます、状況が理解できました png.h に pngpriv.h が必要な処理を代用する関数が追加されていましたので、 それを使うようにプログラムを変更して pngpriv.h が無くてもコンパイルできるようにしました よろしければお使いください m(_ _)m
メンテ
Re: シャドウマップの初期化について ( No.5 )
名前:さかな 日時:2014/09/30 09:27

管理人さん、素早い対応ありがとうございます! ゲームではなく視覚効果等のツールにDXライブラリを愛用させて頂いているので、 軽量化できると本当に助かります。 早速修正版を使ってみます。お忙しい中迷惑をおかけしました。
メンテ

Page: 1 |

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

   クッキー保存