Re: DrawPolygon3D使用の際 ( No.1 ) |
- 名前:管理人 日時:2009/06/03 23:49
うーん、何が原因なんでしょう・・・
もし宜しければ、件の現象が発生するプログラムをプロジェクトごと圧縮して
BQE00322(アットマーク)nifty.com まで送っていただけないでしょうか?
私の手元で現象が確認できれば恐らく不具合を解消することが出来ると思いますので・・・
|
Re: DrawPolygon3D使用の際 ( No.2 ) |
- 名前:Libra 日時:2009/06/05 05:04
メールの方にアップローダーのURLとパスワード、追記事項を書いて送信しました。
試しに友人のPCで起動してテストしてみましたが、不具合は確認できませんでした。PCの相性ということも考えられますが・・・。
|
Re: DrawPolygon3D使用の際 ( No.3 ) |
- 名前:管理人 日時:2009/06/06 20:45
メール拝見いたしました
早速私の環境で実行してみましたが、残念ながら件の現象は発生しませんでした
解決案はまだあるので、現在その準備をしています
と、それとは別に二つほど確認させてください
1.ビデオデバイスのドライバを最新のものにしてみたら如何でしょうか?
2.以下の最新のDXライブラリを使用した場合も同様の現象が発生しますでしょうか?
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
|
Re: DrawPolygon3D使用の際 ( No.4 ) |
- 名前:Libra 日時:2009/06/07 23:41
上記の2つの方法を実行しましたが、フリーズしてしまいました。
|
Re: DrawPolygon3D使用の際 ( No.5 ) |
- 名前:Libra 日時:2009/06/08 01:13
スレッドのタイトルとは別になるかもしれませんが、ログに
6228: ウインドウが破棄されようとしています
6230: ソフトを終了する準備が整いました
6243:
6246: Alloc memory dump
6248: Total size:0(0.000kb) Alloc num:0
6251:
6256: フォントハンドル値が異常です
6258: フォントハンドル値が異常です
6259: フォントハンドル値が異常です
ブレークポイントを使って調べたところ、フォントハンドルを格納している変数は、マイナス1になっておらず、InitFontToHandle関数を用いると、エラーの返り値が返って来ていました。
また、フォントを用いている部分をコメントアウトして、フォントを使用しない状態で実行してみたところ、フォントを用いていないにもかかわらず、「文字コードバッファの初期化を行います... 完了しました」のログの後に「フォントハンドル値が異常です」が3つログに表示されました。リビルドしてもこの状況は変わりませんでした。
|
Re: DrawPolygon3D使用の際 ( No.6 ) |
- 名前:管理人 日時:2009/06/08 16:10
メールのご返信を送りましたので宜しければご確認下さい。
メールにも記載しましたが、フォントハンドル値の異常についですが、
貼り付けて頂いたログのちょっと上にあります通り DXライブラリの後始末が終了しています
( DxLib_End が実行されたときと同じ状態です ) DXライブラリのソフトはウインドウの
×ボタンや ALT+F4 キーが押されると内部で自動的に内部で DxLib_End を呼び出し、
ProcessMessage 関数が -1 を返すようになります
こうなると作成したグラフィックハンドルやフォントハンドルも全て無効になりますので、
その状態で DrawString 等の文字列描画関係の関数を実行すると貼り付けて頂いたような
「フォントハンドル値が異常です」というログが出力されます
なので、仕様通りの動作ですので問題ありません、このログが出力された場合も関数から
何もせずに出てくるだけで、ソフトウエアの動作やPCに悪影響はありませんのでご安心下さい
追記
> また、フォントを用いている部分をコメントアウトして、フォントを使用しない状態で
> 実行してみたところ、フォントを用いていないにもかかわらず、「文字コードバッファの
> 初期化を行います... 完了しました」のログの後に「フォントハンドル値が異常です」が
> 3つログに表示されました。リビルドしてもこの状況は変わりませんでした。
フォントを用いる機能をしようしていなくても
「文字コードバッファの初期化を行います... 完了しました」
のログ出力がされるのは仕様ですが、その後に「フォントハンドル値が異常です」が出力
されるのは変ですね・・・
宜しければそのときのログをこちらに貼り付けて頂けないでしょうか?
|
Re: DrawPolygon3D使用の際 ( No.7 ) |
- 名前:Libra 日時:2009/06/08 23:24
0:システムの情報を出力します
0: DXライブラリ Ver2.25c
1: OS WindowsXP ( Build 2600 Service Pack 3 )
102: CPU動作速度:大体2.98GHz
102: MMX命令を使用します
103: SSE命令が使用可能です
103: SSE2命令が使用可能です
104: CPUベンダ:GenuineIntel
105: CPU名:Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz
106:COMの初期化... 成功しました
112:メモリ総量:2048.00MB 空きメモリ領域:2048.00MB
112:タイマーの精度を検査します
112:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60
113: パフォーマンスカウンターを使用します タイマー分解能 : 3007510.000000 KHz
113: ソフトの二重起動検査... 二重起動はされていませんでした
114:ウインドウクラスを登録します... 登録に成功しました
115:ウインドウモード起動用のウインドウを作成します
125:ウインドウの作成に成功しました
144:IMEを無効にしました
405:ウインドウスタイルをウインドウモード用に変更します... 完了
406:DirectInput関係初期化処理
406: DirectInput7 の取得中... 成功
444: 引き続き初期化処理... 初期化成功
447: ジョイパッドの初期化...
454: 入力装置を見つけました
456: デバイスの登録名:JC-PS101U
457: デバイスの製品登録名:JC-PS101U
457: 周期的エフェクトの作成に失敗しました。
468: ジョイパッドの追加は正常に終了しました
468: ジョイパッドの初期化は正常に終了しました
470: マウスデバイスの初期化... 初期化成功
471: キーボードデバイスの初期化... 初期化成功
472:DirectInput 関連の初期化は正常に終了しました
472:DirectSound の初期化を行います
472:DirectSound インターフェースの取得を行います.... 成功
477:引き続きインターフェースの初期化処理... 成功
536: DirectSound デバイスを列挙します
538: モジュール名: ドライバ記述:プライマリ サウンド ドライバ
538: モジュール名: RtkHDAud.sys ドライバ記述:Realtek HD Audio output
539: 最大サンプリングレート:192.00KHz 最小サンプリングレート:8.00KHz
539: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB
540: 利用可能サンプリング精度
540: プライマリ 16bit = OK 8bit = OK
540: セカンダリ 16bit = OK 8bit = OK
541: 利用可能チャンネル
541: プライマリ MONO = OK STEREO = OK
542: セカンダリ MONO = OK STEREO = OK
542:DirectSound の初期化は正常に終了しました
542:DirectDraw 関連の初期化を行います
543: DirectDraw オブジェクトの取得を行います.... 成功
552: 引き続き初期化処理... 初期化に成功しました
554: ビデオカードの情報
554: 画面モード変更処理を開始します
615: 画面モードの変更処理を開始します 640 x 480 16 bit
615: ウインドウモードにします
616: 画面モードの変更は正常に終了しました
616: カラー情報
617: A:00000000 B:00ff0000 G:0000ff00 B:000000ff
617: ウインドウスタイルをウインドウモード用に変更します... 完了
619: 出力画面用の DirectDrawSurface を作成します
677: 各スクリーンメモリの配置位置
677: PrimaryBuffer : VIDEOMEMORY
678: BaskBuffer : VIDEOMEMORY
678: 出力画面用の DirectDrawSurface の作成は正常に終了しました
679: Direct3D 関連の初期化を行います
679: Direct3Dオブジェクトを取得します
684: Direct3Dオブジェクトを取得しました
684: HALデバイスを発見しました
685: ハードウエアT&Lデバイスを発見しました
685: 3Dデバイスを作成します... 3Dデバイスの作成に成功しました
702: テクスチャ最大幅:8192 最小幅:1
703: 描画制限: D_D3DPTEXTURECAPS_POW2 = 0 D_D3DPTEXTURECAPS_SQUAREONLY = 0
703: 最大テクスチャステージ数 = 8 最大テクスチャブレンド数 = 8
704: テクスチャピクセルフォーマット
704: 通常グラフィック用
705: BIT:16 RED:5 GREEN:5 BLUE:5
705: RED:007c00 GREEN:0003e0 BLUE:00001f
705: BIT:32 RED:8 GREEN:8 BLUE:8
706: RED:ff0000 GREEN:00ff00 BLUE:0000ff
706: アルファチャンネル付きグラフィック用
706: BIT:16 ALPHA:4 RED:4 GREEN:4 BLUE:4
707: ALPHA:0000f000 RED:00000f00 GREEN:000000f0 BLUE:0000000f
707: BIT:32 ALPHA:8 RED:8 GREEN:8 BLUE:8
708: ALPHA:ff000000 RED:00ff0000 GREEN:0000ff00 BLUE:000000ff
708: Direct3D 関連の初期化は正常に終了しました
709: グラフィック管理系の初期化を行います
709: 3Dグラフィック描画機能を使用します
710: フォントの初期化を行います
711: フォントの初期化は正常に終了しました
711: グラフィック管理系の初期化は正常に終了しました
715: サーフェス間転送には BltFast を使用します
716: BitBlt:1175μs BltFast:710μs
716: スキャンラインの数:1080
833: 1フレーム当たりの時間は 16 msecです
834: Tri00:16 msec
834: Tri01:17 msec
835: Tri02:16 msec
835: Tri03:17 msec
836: 画面モード変更処理は正常に終了しました
877: オーバーレイサーフェスを使用します UYVY
878: DirectDraw 関連の初期化は正常に終了しました
880: 文字コードバッファの初期化を行います... 完了しました
933: フォントハンドル値が異常です
1093: フォントハンドル値が異常です
1101: フォントハンドル値が異常です
4534: DirectDraw 関連の終了処理をおこないます
4536: フォントの初期化を行います
4538: フォントの初期化は正常に終了しました
4538: グラフィック管理系の終了処理は正常に終了しました
4538: Direct3D 関連の終了処理を行います
4540: 3Dデバイスの削除は正常に終了しました
4540: Direct3D 関連の終了処理は正常に終了しました
4541: メインサーフェスを破棄をします... 完了しました
4543: DirectDrawオブジェクトを解放します
4543: DirectDrawオブジェクトを解放しました
4544: DirectDraw 関連の終了処理は正常に終了しました
4544: DirectInput 関連の終了処理... 完了
4562: DirectSound の終了処理は正常に終了しました
4563: ウインドウを閉じようとしています
4630: ウインドウが破棄されようとしています
4630: ソフトを終了する準備が整いました
4641:
4642: Alloc memory dump
4642: Total size:0(0.000kb) Alloc num:0
4642:
動作報告ですが、最後に返信でアップしてくださったDxlibを入れたところ、フリーズする予兆であった一番最初に書き込んだ「画面に線が"ちらっと"入ること」はなくなりました。
|
Re: DrawPolygon3D使用の際 ( No.8 ) |
- 名前:管理人 日時:2009/06/09 14:11
ご報告ありがとうございます
画面に線が走ることは無くなったとのことですが、ブルースクリーンになる現象はまだ発生するのでしょうか?
あと、「フォントハンドル値が異常です」のログ出力についてですが、状況を整理するために
こちらも少し質問させてください
1.No.3 で私が書き込んだ二つの方法を試す前までは発生しなかったのでしょうか?
2.No.7 で貼り付けていただいたログのように「文字コードバッファの初期化を行います...完了」の後に
出力される場合と、No.5 で貼り付けていただいたログのように「Total size:0(0.000kb) Alloc num:0」の後に
出力される場合があるという認識で間違いないでしょうか?
3.No.7 のログは No.5 で仰られていたような「フォントを用いている部分をコメントアウト」した状態でのものでしょうか?
質問ばかりで申し訳ありません
|
Re: DrawPolygon3D使用の際 ( No.9 ) |
- 名前:Libra 日時:2009/06/09 16:29
画面に線が走ることがなくなりましたが、フリーズはまだ起きています。
1:以前からソースのフォントに関する部分の変更がない時でも、起こるときと起こらないときがありました。(発生不定)
2と3:上で貼り付けたのは、フォントを使用するソースを通らない起動を行ったときです。
フォントを使用して文字を表示したときは、Alloc memory dump
4642: Total size:0(0.000kb) Alloc num:0
の後にフォントハンドル値が異常です、のログが出ます。
また、while(ProcessMessage() == 0 )のループ内でInitFontToHandle関数を用いた時もフォントハンドル値が異常ですのログが出ます。フォントハンドル値はブレークポイントを使用して確かめましたが、正の値でした。
|
Re: DrawPolygon3D使用の際 ( No.10 ) |
- 名前:管理人 日時:2009/06/10 20:17
ご返答ありがとうございます
まだフリーズが発生していますか・・・
DrawPolygon3D 関数は Direct3D の頂点演算で再現できない計算が必要な場合に
ローカル座標からスクリーン座標への変換を自前で行っているのですが、
今のところそのプログラム内に原因があるのではないかと考えています
今回は修正版ではなくテスト用ですが、変換後のスクリーン座標が画面外に
出ていた場合はポリゴンを描画しないようにしたバージョンをアップしました
もしスクリーン外に出ているポリゴンを大量に描画しようとしていることが
フリーズの原因でしたら、これでフリーズは発生しなくなると思います
宜しければこのバージョンでもフリーズしてしまうかどうか、ご確認ください m(_ _)m
http://homepage2.nifty.com/natupaji/temp/DxLibVCTest_Poly3D.zip
「フォントハンドルの値が異常」についてですが、もしこの出力によって動作に支障が
発生していないのでしたら、とりあえずフリーズの件を優先したいと思うのですが宜しいでしょうか?
因みに、InitFontToHandle を使用すると CreateFontToHandle で作成されたフォントハンドルが
全て無効になりますので、InitFontToHandle を呼んだ後にそのハンドルを使用すると件の出力がされます
|
Re: DrawPolygon3D使用の際 ( No.11 ) |
- 名前:Libra 日時:2009/06/11 04:48
<<フォントハンドル値の異常について:
この件に関しては、起動のログを見て、このような異常が何かフリーズの原因の一部になっているのではないか?
もしくはフリーズする原因の影響で異常が出てるのでは?と思い書き込みました。
いろいろプログラムを試して、わかったのですが、特定の条件下でのみこのログが出るようです。
こちらに関しては自分の方で全力で調べてみます。
お手を煩わせてしまい申し訳ありませんでした。(こちらは自己解決に努めます)
<<フリーズの件:
このテストバージョンを入れてみたところ、フリーズは発生しませんでした。
カメラ視点の変更でもフリーズ頻度が変わるようなので、スクリーン外ポリゴン描画、これが原因かもしれません。
自分のプログラムでは、ポリゴンのZ軸に対する頂点座標を-500〜3000までの範囲のものを表示させていました。
表示できる座標範囲は1000まで、ということなので、そのあたりが原因となっているのでしょうか。
|
Re: DrawPolygon3D使用の際 ( No.12 ) |
- 名前:管理人 日時:2009/06/14 03:36
テストバージョンではフリーズしなかったとのことで、お試しいただき有難うございます
> 自分のプログラムでは、ポリゴンのZ軸に対する頂点座標を-500〜3000までの範囲のものを表示させていました。
> 表示できる座標範囲は1000まで、ということなので、そのあたりが原因となっているのでしょうか。
Z軸の座標値については範囲越えに対する処理を書いていましたので、恐らくXY軸の座標値が関係
しているのではないかと思います。
XY軸の値はどんなに範囲を超えても画面に映らないだけですが、Z軸の値は計算上画面の後ろに
あるはずのポリゴンを描画してしまうと明らかに不自然な映像になってしまうので、Z軸の値に
ついてのみ対応処理を書いていました。
そして、この対応処理をXY軸の値に対しても書こうと思ったのですが、
・・・思ったのですが、この数日の間に別の解決方法を見つけまして、
正常に動作すればこちらの方が恐らく処理速度も今までの方法より優れていて、
且つ今までの方法より一般的な Direct3D の使い方なので動作の安定度も増す
と思われますので、これまでの流れから少し外れてしまって大変申し訳ないのですが、
宜しければ描画手法をそちらに変更したバージョンをお試し頂けないでしょうか?m(_ _;m
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe
(中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
Libraさんの環境で正常に動作する確率も高い、と思います・・・
|
Re: DrawPolygon3D使用の際 ( No.13 ) |
- 名前:Libra 日時:2009/06/15 01:07
動作報告です。
結論から言いますと、エラーが起こります・・・。変更したバージョンでも駄目でした。
VisualStudio2010Betaが出たので、こちらの環境でも実行してみました。結果は変わらずフリーズするのですが、2010の方はフリーズが起った後、実行画面外をクリックすると2010の方に戻れるようで、その状態でデバッグ中止などの操作を行えました。(中止してもひどい文字化けや場合によってはその後フリーズ)また、そこからデバッグ中止を行わず、再度実行画面をアクティブ状態にすると、メモリ破壊が起こっているような状態になり、その後フリーズorブルースクリーンが出ます。その画面をカメラで撮ったので、管理人様のメールアドレスの方に送信させていただきます。
2010だとエラー後少し動かせる状態ということでブレークポイントを使い、値を見てみました。
・ポリゴンのデータをリスト構造に入れている為、もしかしたら無限ループに入っているのではないか?
→ループ回数を調べる処理を書いてみましたが、無限ループには陥っていませんでした。
・DrawPolygon3D関数の返り値を調べてみた。
→返り値は0のまま。最初からエラー時の部分にブレークポイントを入れておいたが、そこの部分は実行されませんでした。
今回のテストバージョンを入れた時にカメラ視点を操作する関数を抜いて標準状態にしてみたところ、以前より表示できるZ座標の奥行が多くなっていました。奥の方に行くとグラフィックがつぶれてわかりずらいのですが、以前はZ座標が1000以上ポリゴンが表示されませんでしたが、現在は設定されたポリゴン全てが表示されているようでした。これは新しくしたバージョンの仕様でしょうか?
ちなみに、この状態でもフリーズしました・・・。
また、(カメラ処理も抜いた状態でしたが)DrawPolygon3D関数を抜くと正常に動作します・・・。
|
Re: DrawPolygon3D使用の際 ( No.14 ) |
- 名前:管理人 日時:2009/06/16 20:44
うーん、だめでしたか・・・・
最初ご質問を受けたときはDXライブラリのポリゴン描画には一部普通はやらない
処理をしている関係からそれが原因だと思いましたが、お渡ししたバージョンでは
DirectX のサンプルプログラム等でも使われているごく一般的な処理しかしていません
となると、今のところ Libra さんの環境でしかフリーズ現象が発生していませんが
一度Libraさんがご製作中のプログラムに原因がある可能性を考えた方が良いかもしれません
DrawPolygon3D の中でエラーが発生していますが、DrawPolygon3D に関わっていない
部分のプログラムがメモリを破壊した結果として DrawPolygon3D が使用する
データがおかしくなり、フリーズ現象を起こしている、という可能性もありますので、
宜しければ3Dの演出部分だけが処理されるようにプログラムを変更してみて
それでもフリーズ現象が発生するか、発生する場合は3Dの演出を一つ一つ減らしてみて、
どれかの演出を減らせばフリーズ現象が発生しなくなるか、若しくは一つでも演出があれば
フリーズするか等を調べてみて、すべてのケースでフリーズしてしまう場合は今度は
DXライブラリのサンプルプログラムのようなシンプルなプログラムで DrawPolygon3D を
使って、製作中のプロジェクトのフリーズしてしまうプログラムと同等の演出を行う
プログラムを実行してみてそれでもフリーズしてしまうか、などを試してみてください
仮にDXライブラリの DrawPolygon3D のサンプルプログラムくらいシンプルなプログラムでも
フリーズしてしまう場合は Libra さんがお使いのPC環境に依存した現象である可能性が
高いと考えた方が良いかもしれません・・・
|
Re: DrawPolygon3D使用の際 ( No.15 ) |
- 名前:Libra 日時:2009/06/21 12:59
動作報告です。
DrawPolygon3D のサンプルプログラムは、20分ほど動かしてみましたが、
問題なく動きました。
表示されているポリゴン数が多くなると起こるようです。
また、自分が作成したのとは別のソフト(同人ソフト)で同じような
フリーズ現象が発生しました。(こちらの頻度はかなり稀)
自分が作成したプログラムのみでこの現象が起こっていたので、
作成しているプログラムに問題があるのかと思っていましたが、
別のプログラムでも発生したことから、PC環境に依存した現象であると
判断しました。
最後に質問なのですが、今回いただいた”DirectXで使用されている
一般的な処理”を用いているTestバージョンのライブラリは
ダウンロードページの方に反映されますか?
|
Re: DrawPolygon3D使用の際 ( No.16 ) |
- 名前:管理人 日時:2009/06/24 12:38
お試しいただきありがとうございます
ポリゴン数が多くなるとフリーズする、ですか・・・
ビデオカードは補助電源コネクタつきのものでしょうか?
もしそうだとしますと、補助電源コネクタに補助電源プラグが挿さっていない、若しくは
挿さっているけど電源電圧が足りない、ということもあるかもしれません
というのも、補助電源コネクタ付きのビデオカードに補助電源を挿し忘れて Direct3D を
使用したソフトを起動したときにブルースクリーンになったり、補助電源を挿しても
電源の電圧が足りなくてやっぱりブルースクリーンになったりということを1回づつ
経験したことがありますので・・・
( そのときは使用頻度の低いCDドライブの電源を抜いて対応しました )
> 最後に質問なのですが、今回いただいた”DirectXで使用されている
> 一般的な処理”を用いているTestバージョンのライブラリは
> ダウンロードページの方に反映されますか?
はい、次の公開バージョンには今回の変更が反映されます
|