Re: .dxaファイルの上書き (とDXLibの仕様について) ( No.1 ) |
- 名前:Will 日時:2012/11/16 08:53
@
DXアーカイブの中身を書き換える方法はないので、アーカイブを使用するのであれば
差分ではなくまるごと書き換えるよりほか無いです。
私であれば、全てを一つでアーカイブするのではなく、例えば画像、音楽、効果音といった感じで、
更新される範囲が小さくなるようアーカイブを小分けにします。
A
細かいことを言い出すときりがないので、DXライブラリの更新履歴に書かれている以上の答えは難しいと思います。
とりあえず、掲示板内にリンクが貼られている最新のDXライブラリ(テスト版)を使用しても
現象が解決しないのであれば、再現できる環境を提示してもらわないと
回答は難しいかと思います。
|
Re: .dxaファイルの上書き (とDXLibの仕様について) ( No.2 ) |
- 名前:rio 日時:2012/11/16 12:16
Willさんありがとうございます。
@
このプログラム自体、5年以上かけて触ってるので
既にコードも30000行(一時期は40000)を越え、
スキルアップに伴って、不要な部分を削り、修正しつつ来たのですが、
素材関係のファイルだけでも、相当量ありまして。
もちろん、Willさんの仰る通り、ファイルの種類別に9つの.dxaに分割してあります。
主に頻繁に更新を行うであろう、一番の目的は
テキストデータの更新で、画像なんかはたまーに…
程度です。
とはいえ、たったファイル1個2個のために
全体のデータをダウンロードしてもらうのは
ユーザーからすると、非常に宜しくないと思うので
趣旨のプログラムを作ろうと思っていました。
アーカイブ自体、ソース・プログラム共に
一般に公開されているわけですが、
ファイルDL後、更新・再パッキング部分だけを
アーカイバを呼び出して実行してもらえるように
プログラムの改造⇒再配布…
(アーカイバもパッチクライアントと共に忍ばせておくということになります)
というのは利用ルール的にダメなんでしたっけ?
力技で行けるものなら、何でもとは思うのですが。
----------
A
上記の件もありまして、
再現性の高いプログラムをここに貼るために再構築するのも一苦労なので、
もう少し問題の部分を独自調査していました。
画像呼び出し関数は、全部で5〜6つに小分けして
行っているため、
実際LoadGraphはもう関係ないかな…と思い始め、
当該関数内をもっと細かく見ていたところ、
MV1LoadModelで、ただの正四面体・正六面体・正八面体を
読み込んでいる部分がありまして、
この部分をコメントアウトすることで、
症状を回避することに成功しました。
DxLibModelViewerに、立体をなんとなく読み込ませてみたところ、
正四面体と正八面体でのみ、ViewerのLogに
以下のようなメモリエラーが出現しました。
//正四面体
4800:ウインドウを閉じようとしています
4869:ウインドウが破棄されようとしています
4869:ソフトを終了する準備が整いました
4876:以下のメモリ確保情報が破損しました、強制終了します
4877:HEAD BASE:00 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 ea 00 00 00 30 05 00 00 30 a0 95 08 18 5c e4 00
4877:HEAD TEMP1:00 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 ea 00 00 00 30 05 00 00 30 a0 95 08 18 5c e4 00
4877:HEAD TEMP2:00 00 80 3f 00 00 00 00 0b 00 00 00 cc cc cc ff 00 00 00 00 30 05 00 00 00 00 00 00 00 00 80 3f
4877: size: 1328( 1.297kb) file: line:0 ID:234 addr:0895b8f0 data:<B.o.....\......?> [42 fe 6f c2 1f f4 13 c2 5c 8f 0a c2 00 00 80 3f]
4878: size: 1328( 1.297kb) file: line:0 ID:234 addr:0895b910
4878: size: 1328( 1.297kb) file: line:0 ID:0 addr:0895be60
//正八面体
6180:ウインドウを閉じようとしています
6232:ウインドウが破棄されようとしています
6233:ソフトを終了する準備が整いました
6243:以下のメモリ確保情報が破損しました、強制終了します
6244:HEAD BASE:00 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 e5 00 00 00 38 0a 00 00 98 20 6e 0a e0 e8 6d 0a
6244:HEAD TEMP1:00 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 e5 00 00 00 38 0a 00 00 98 20 6e 0a e0 e8 6d 0a
6244:HEAD TEMP2:00 00 00 00 03 00 00 00 15 00 00 00 cc cc cc ff 00 00 00 00 38 0a 00 00 00 00 80 3f 00 00 80 3f
6244: size: 2616( 2.555kb) file: line:0 ID:229 addr:0a6e4ca8 data:<........{4.B....> [00 00 00 00 00 00 00 00 7b 34 ad 42 00 00 00 00]
6245: size: 2616( 2.555kb) file: line:0 ID:229 addr:0a6e4cc8
6245: size: 2616( 2.555kb) file: line:0 ID:0 addr:0a6e5720
実際に、正四面体・正八面体を読み込む行をコメントアウトしたところ、
当該箇所での強制終了は回避されました。
これまでのバージョンで、このような現象は確認されなかったと思いますが…。
この辺りのデータなら、容易に提示できそうです。
|
Re: .dxaファイルの上書き (とDXLibの仕様について) ( No.3 ) |
- 名前:softya(ソフト屋) 日時:2012/11/16 14:02
本体アーカイブと差分アーカイブの2つの存在を許す様にして差分アーカイブを優先して読むようにしたらどうでしょうか?
無理やりアーカイブ再作成よりスマートだと思います。
|
Re: .dxaファイルの上書き (とDXLibの仕様について) ( No.4 ) |
- 名前:Will 日時:2012/11/16 18:31
アーカイブファイルってそんな巨大なサイズなんですか?
モデムや低速ADLSの時代ならまだしも、100Mbpsが当たり前、それ以上も
普通にある現状ではギガサイズでもない限りそう問題にならないと思いますけど。
> というのは利用ルール的にダメなんでしたっけ?
それはなかったと思いますけど、解凍→更新→パックの途中で何かトラブルが発生すると
ユーザに中身が見られてしまう上に、復旧が大変な気がします。
あと、解凍することによりデータ量が一時的に二倍になるのでユーザのHDDに負担をかけますね。
やった事無いですけど、変更前と変更後のアーカイブファイルをバイナリレベル
で比較してみて、その部分だけ書き換えるプログラムを作るとか。
|
Re: .dxaファイルの上書き (とDXLibの仕様について) ( No.5 ) |
- 名前:いっち 日時:2012/11/16 19:25
rioさん>
Aについてですが、ご使用のDXライブラリのバージョンを明記してください。
(テストバージョンであればDxLib.libのタイムスタンプもお願いします)
それと編集を行っていない状態のログをご提供下さい。
> ただの正四面体・正六面体・正八面体
可能であればこれらのモデルデータもご提供下さい。
|
Re: .dxaファイルの上書き (とDXLibの仕様について) ( No.6 ) |
- 名前:rio 日時:2012/11/16 22:24
>>softya(ソフト屋)さん
…ということは、
差分ファイルが段々増えていく、ということでしょうか。
プログラム的にはスマートに行きそうですが、
更新回数が増えていくにつれて、
ユーザーのフォルダには差分ファイルの山が出来上がる、
という印象も抱いたのですが。。
>>Willさん
アーカイブごとにまちまちですが、
大きいもので80M、テキストが中心の小さいものだと10M程度ですね。
たった1つや2つの細かい調整のために
毎回アーカイブ全体をダウンロードさせるのは
ユーザー側からすれば煩わしいかな…と思ったのです。
>>解凍→更新→パックの途中で何かトラブル
無理矢理行くには、やっぱりここを何とかしないと
実用にはならないですね。。
もうちょい考えます。
|
Re: .dxaファイルの上書き (とDXLibの仕様について) ( No.7 ) |
- 名前:rio 日時:2012/11/16 22:58
>>いっちさん
八面体のほうです。
----------
1:システムの情報を出力します
5: DXライブラリ Ver3.08e
5: 論理プロセッサの数 : 4
5: OS Windows7 ( Build 7601 Service Pack 1 )
105: CPU動作速度:大体2.28GHz
105: MMX命令を使用します
105: SSE命令が使用可能です
106: SSE2命令が使用可能です
106: CPUベンダ:GenuineIntel
107: CPU名: Intel(R) Core(TM) i5-2410M CPU @ 2.30GHz
107:COMの初期化... 成功しました
108:メモリ総量:4043.86MB 空きメモリ領域:1655.84MB
108:タイマーの精度を検査します
108:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60
109: パフォーマンスカウンターを使用します タイマー精度 : 2241.074000 KHz
109: ソフトの二重起動検査... 二重起動はされていませんでした
110:ウインドウクラスを登録します... 登録に成功しました
110:ウインドウモード起動用のウインドウを作成します
126:ウインドウの作成に成功しました
126:ウインドウを表示します
200:IMEを無効にしました
201:ウインドウスタイルをウインドウモード用に変更します... 完了
225:DirectInput関係初期化処理
225: DirectInput7 の取得中... 成功
234: 引き続き初期化処理... 初期化成功
237: ジョイパッドの初期化...
245: ジョイパッドの初期化は正常に終了しました
246: マウスデバイスの初期化... 初期化成功
246: キーボードデバイスの初期化... 初期化成功
248:DirectInput 関連の初期化は正常に終了しました
249:DirectSound の初期化を行います
249:DirectSound インターフェースの取得を行います.... 成功
251:引き続きインターフェースの初期化処理... 成功
311: DirectSound デバイスを列挙します
312: モジュール名: ドライバ記述:プライマリ サウンド ドライバー
312: モジュール名:{0.0.0.00000000}.{da67db67-d210-4956-af7a-1c7f6729e5a4} ドライバ記述:スピーカーとヘッドホン (IDT High Definition Audio CODEC)
313: モジュール名:{0.0.0.00000000}.{e43f7a9f-3357-43ed-b18b-cd4f5bafd8e5} ドライバ記述:コミュニケーション ヘッドホン (IDT High Definition Audio CODEC)
313: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz
313: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB
313: 利用可能サンプリング精度
314: プライマリ 16bit = OK 8bit = OK
314: セカンダリ 16bit = OK 8bit = OK
314: 利用可能チャンネル
314: プライマリ MONO = OK STEREO = OK
315: セカンダリ MONO = OK STEREO = OK
315:DirectSound の初期化は正常に終了しました
317:DirectDraw オブジェクトの取得を行います.... 成功
323:引き続き初期化処理... 初期化に成功しました
342:IDirect3D9Ex オブジェクトを取得します.... 成功
345:IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します
581:成功
581:Driver:igdumdx32.dll Description:Intel(R) HD Graphics Family
582:画面のフォーマットは D3DFMT_X8R8G8B8 です
582:Zバッファのフォーマットは D3DFMT_D16 です
582:16bit カラーフォーマットは D3DFMT_R5G6B5 です
582:32bit カラーフォーマットは D3DFMT_X8R8G8B8 です
582:アルファ付き 16bit カラーフォーマットは D3DFMT_A4R4G4B4 です
583:アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です
583:アルファテスト用 16bit カラーフォーマットは D3DFMT_A1R5G5B5 です
583:アルファテスト用 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です
584:DXT1テクスチャフォーマットはD3DFMT_DXT1 です
584:DXT2テクスチャフォーマットは D_D3DFMT_DXT2 です
584:DXT3テクスチャフォーマットはD3DFMT_DXT3 です
584:DXT4テクスチャフォーマットはD3DFMT_DXT4 です
585:DXT5テクスチャフォーマットはD3DFMT_DXT5 です
585:描画用 16bit カラーフォーマットは D3DFMT_R5G6B5 です
585:描画用 32bit カラーフォーマットは D3DFMT_X8R8G8B8 です
585:描画用アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です
586:描画用ABGR整数16ビット型カラーフォーマットは D3DFMT_A16B16G16R16 です
586:描画用ABGR浮動小数点16ビット型カラーフォーマットは D3DFMT_A16B16G16R16F です
586:描画用ABGR浮動小数点32ビット型カラーフォーマットは D3DFMT_A32B32G32R32F です
586:描画用1チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8R8G8B8 です
587:描画用1チャンネル整数16ビット型カラーフォーマットは D3DFMT_G16R16 です
587:描画用1チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_R16F です
587:描画用1チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_R32F です
587:描画用2チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8B8G8R8 です
587:描画用2チャンネル整数16ビット型カラーフォーマットは D3DFMT_G16R16 です
587:描画用2チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_G16R16F です
587:描画用2チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_G32R32F です
587:一度に描画できるプリミティブの最大数:1048575
588:対応している最大頂点インデックス:16777215
588:同時にレンダリングできるバッファの数:4
588:最大テクスチャサイズ 幅:4096 高さ:4096
588:テクスチャステージテンポラリレジスタ:使用可
588:減算合成のハードウェア対応:ネイティブ
588:ハードウェア頂点シェーダーバージョンコード:300
588:エミュレーション頂点シェーダーバージョンコード:エミュレーション無し
588:ピクセルシェーダーバージョンコード:300
617:バックバッファロック転送の時間:4167nsec 一時的な描画可能バッファを使用した転送の時間:963nsec
617:バックバッファロックを使用しません
618:Zバッファを作成します.... 成功
635:プログラマブルシェーダーを使用します
711:フォントの初期化を行います
712:フォントの初期化は正常に終了しました
720:文字コードバッファの初期化を行います... 完了しました
727:ウインドウスタイルをウインドウモード用に変更します... 完了
728:ウインドウスタイルをウインドウモード用に変更します... 完了
3256:Load Texture Error : カラーチャンネル画像ファイル C:\................ の読み込みに失敗しました
3291:Load Texture Error : カラーチャンネル画像ファイル C:\................ の読み込みに失敗しました
3303:Load Texture Error : カラーチャンネル画像ファイル C:\................ の読み込みに失敗しました
3307:Load Texture Error : カラーチャンネル画像ファイル C:\................ の読み込みに失敗しました
3312:Load Texture Error : カラーチャンネル画像ファイル C:\................ の読み込みに失敗しました
3315:Load Texture Error : カラーチャンネル画像ファイル C:\................ の読み込みに失敗しました
3321:Load Texture Error : カラーチャンネル画像ファイル C:\................ の読み込みに失敗しました
3331:Load Texture Error : カラーチャンネル画像ファイル C:\................ の読み込みに失敗しました
6180:ウインドウを閉じようとしています
6232:ウインドウが破棄されようとしています
6233:ソフトを終了する準備が整いました
6243:以下のメモリ確保情報が破損しました、強制終了します
6244:HEAD BASE:00 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 e5 00 00 00 38 0a 00 00 98 20 6e 0a e0 e8 6d 0a
6244:HEAD TEMP1:00 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 e5 00 00 00 38 0a 00 00 98 20 6e 0a e0 e8 6d 0a
6244:HEAD TEMP2:00 00 00 00 03 00 00 00 15 00 00 00 cc cc cc ff 00 00 00 00 38 0a 00 00 00 00 80 3f 00 00 80 3f
6244: size: 2616( 2.555kb) file: line:0 ID:229 addr:0a6e4ca8 data:<........{4.B....> [00 00 00 00 00 00 00 00 7b 34 ad 42 00 00 00 00]
6245: size: 2616( 2.555kb) file: line:0 ID:229 addr:0a6e4cc8
6245: size: 2616( 2.555kb) file: line:0 ID:0 addr:0a6e5720
------
Texture Errorですが、モデリング自体(UV等)は
他人にやってもらったものなのですが、
(このマシンと別のマシンのディレクトリ構造が
表示されてるので、とりあえず伏せてます。)
実際にプログラムでこのモデルを使う際は、
動的にテクスチャを生成して、それらを貼って使うので
わざとテクスチャの初期画像は抜いて(とりあえず貼っておかないと、プログラム側で張り替えができないようだったので)
やってます。
現在は、テストバージョンの2012/11/13 22:30で、
正式版としては、3.08eにバージョンアップしてから
症状が確認されるようになりました。
少なくとも、3.08a〜cでは起こらなかったと思います。
.mqoの状態でテクスチャとなる画像を貼らず、
Texture Errorが出ないようにすると、
上記メモリ関係のエラーも出なくなるようです。
(貼り替えが出来ないのでこれはこれで困るのですが)
従来バージョンでは全く問題が無かったので、
約1年はずっとこのままでやっていました。
モデルが必要、ということであれば
どのようにすればいいでしょう。
|
Re: .dxaファイルの上書き (とDXLibの仕様について) ( No.8 ) |
- 名前:softya(ソフト屋) 日時:2012/11/16 23:11
>>softya(ソフト屋)さん
>…ということは、
>差分ファイルが段々増えていく、ということでしょうか。
>プログラム的にはスマートに行きそうですが、
>更新回数が増えていくにつれて、
>ユーザーのフォルダには差分ファイルの山が出来上がる、
>という印象も抱いたのですが。。
通常は差分ファイルに内容を追加していく事で耐えられると思います。
※ つまり、差分ファイルは完全ダウンロードで差し替えって事です。
ただ、たまには本ファイルに統合してダウンロードしてもらう必要が出てくるでしょうね。
差分しか公開していなくて一気に差分をダウンロードするのも煩わしいので、そこはバランスを考えて決断します。
|
Re: .dxaファイルの上書き (とDXLibの仕様について) ( No.9 ) |
- 名前:いっち 日時:2012/11/17 16:15
rioさん>
> モデルが必要、ということであれば
> どのようにすればいいでしょう。
どこか適当なアップローダをご利用下さい。
私は良く以下のサイトを利用しています。
> h t t p : / / w w w.axfc.net/uploader/
|
Re: .dxaファイルの上書き (とDXLibの仕様について) ( No.10 ) |
- 名前:管理人 日時:2012/11/18 15:56
@
Willさんが No.4 で仰られていますが、変更前と変更後のアーカイブファイルをバイナリレベルで比較して、
変更があった部分だけ書き換えるプログラムを作って頂くのが一番現実的な解決策だと思います
ただ、現在の仕様ではdxaファイル内に含まれるファイルが一つでも書き換わるとdxaファイル全体が
書き換わってしまうので、仮に「バイナリレベルで変更している箇所だけ書き換えるプログラム」があっても
dxaファイル内のファイルの一部を変更しただけでも dxaファイル全体が変更されたと検出されることになって
しまう状態です
なので次の正式バージョンではdxaファイルに含まれる一部のファイルが変化した場合はdxaファイル全体でも
一部分だけが変更されるように仕様を変更します
A
実際にエラーが発生するモデルファイルを拝見できれば原因はすぐに判明すると思いますので、
もしアップローダーにアップするのが難しいとのことでしたら、お手数ですがこちらのメールアドレス
BQE00322(あっとまーく)nifty.com
( (あっとまーく)を@に置き換えてください )
にエラーの発生するモデルファイルをメールで送って頂けないでしょうか?
|
Re: .dxaファイルの上書き (とDXLibの仕様について) ( No.11 ) |
- 名前:rio 日時:2012/11/19 15:37
レスポンスが遅れましてすみません。
いっちさんに紹介してもらったアップローダーに
置いておきました。
メモリ異常の起こる八面体、四面体。
テクスチャを貼りなおしてみたら、
うまく動いた(?)四面体。元々問題の無い六面体。
そして、貼っておく予定のダミーテクスチャを
入れておきました。
(八面体は自分でUVを弄れないのでバグの出る物のみです)
h t t p : / / w w w 1.axfc.net/uploader/so/2682109.zip
DLPass:dxlib
エラーが出る分は、ファイル置いてる場所の名前に
日本語が混じってるから…とかだんだん色んな
憶測が出ないでも無いですが。
よろしくお願いします。
|
Re: .dxaファイルの上書き (とDXLibの仕様について) ( No.12 ) |
- 名前:管理人 日時:2012/11/20 01:53
ファイルをアップして頂きありがとうございます
私の環境でもエラーが発生しました
原因は最新版より前のバージョンの DxModelViewer.exe で作成した mv1 ファイルに含まれる
頂点データサイズ情報が最新版のDXライブラリに適していなくて、メモリの確保量が足りずに
メモリの不正なアクセスが発生してしまっていたというものでした
原因となっていた頂点データサイズ情報は多少処理が必要ですが読み込み時でも算出可能なので、
ファイルに含まれるその情報は無視して読み込み時に頂点データサイズを算出するようにすることで解決しました
こちらにその修正を施したバージョンをアップしましたので、よろしければお試しください 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)」をして下さい)
// ビューアー
http://homepage2.nifty.com/natupaji/DxLib/DxLibModelViewerTest.zip
|
Re: .dxaファイルの上書き (とDXLibの仕様について) ( No.13 ) |
- 名前:rio(解決) 日時:2012/11/20 12:18
管理人様、ありがとうございます。
モデル読み込み部分で発生していたエラーは
除去されたと思われます。(5回起動して5回正常に起動しました。)
モデルを.mv1にしたのは、ずっと変えずに使っているので
2年程前に生成していたと記憶しています。
ゲームの不正終了が、ランダムと言っていいほど
5分5分の確率くらいで発生していたのは、読み込んだ瞬間に
たまたまメモリを確保していたのか、それとも
不正アクセスをギリギリ回避していた、かですかね。
@については、バイナリ単位でファイル操作を
施してみようと思います。
ゲーム本体とパッチクライアントとは、
ソースコード的には干渉させたくなかったので。
バイナリでちゃんとしたデータを扱った事がないので
簡単なファイルで練習してから作ってみようと思います。
|