トップページ > 過去ログ > 記事閲覧
フルスクリーンで起動すると落ちる
名前:埴輪 日時: 2010/09/11 23:46

いつもDXライブラリを使わせていただいております。 最近の(おそらく3.03)もので、 フルスクリーン起動すると不正動作で強制終了されてしまうのですが、なにか間違っているのでしょうか? 3D描画関連の設定の部分でおちているようなので、その部分のソースを載せて置きますので、よろしくお願いします SetGraphMode(800,600,32); if(fullscreen==1) if(ChangeWindowMode(TRUE)!=DX_CHANGESCREEN_OK || DxLib_Init()==-1)return -1; else if(DxLib_Init()==-1)return -1; SetAlwaysRunFlag(true); SetDrawScreen(DX_SCREEN_BACK); SetUseZBuffer3D(true); SetWriteZBuffer3D(true); SetUseBackCulling(false); SetMaterialUseVertDifColor(true); SetMaterialUseVertSpcColor(true); ChangeLightTypeDir(VGet(-1,-1,-1)); SetLightDifColor(GetColorF(1.0f,1.0f,1.0f,1.0f)); SetLightSpcColor(GetColorF(1.0f,1.0f,1.0f,1.0f)); SetLightAmbColor(GetColorF(1.0f,1.0f,1.0f,1.0f));

Page: 1 |

Re: フルスクリーンで起動すると落ちる ( No.1 )
名前:いっち 日時:2010/09/12 16:30

事象発生時の Log.txt をご提供いただけますか?
Re: フルスクリーンで起動すると落ちる ( No.2 )
名前:埴輪 日時:2010/09/13 23:10

win7(HP32)にて試してみたのですが、 Log.txtを吐く前に落ちてしまいました。 おそらくDxLib_Init()自体が失敗しているのではないのでしょうか? ウインドウモードでは正常に起動できます。
Re: フルスクリーンで起動すると落ちる ( No.3 )
名前:いっち 日時:2010/09/14 00:35

うーん、謎です。ログぐらいなら吐いてくれそうな気もするのですが・・・。 とりあえず、手元の環境では SetGraphMode と DxLib_Init を行っただけでは落ちたりはしませんでした。 できれば事象の再現するコンパイル可能なコードをご提供いただけますか? ちなみに「不正動作で強制終了」というのは、なんらかのエラーダイアログが出たりするのでしょうか? それとも、一瞬画面がフルスクリーンに切り替わって、すぐに元に戻ってしまう感じでしょうか?
Re: フルスクリーンで起動すると落ちる ( No.4 )
名前:Will 日時:2010/09/14 09:22

ウィンドウサイズを800*600に設定しようとしていますが、お使いのPCのグラボが800*600に対応していないということはありませんか? 1024*768とかの場合でも同様でしょうか?
Re: フルスクリーンで起動すると落ちる ( No.5 )
名前:埴輪 日時:2010/09/14 22:50

800x600に変更できました。 XPで動かすと不正動作(マイクロソフトに報告しますか?)ダイアログがでて、7ではプロセスが追加された後、画面に特に変化を及ぼすことも無くプロセスが消えてしまいました。 起動部分のみに削ったとところ正常にフルクスリーン起動できてしまいました。 DxLib_Init()の前後でコンフィグやコースのデータを読み込んでいるのですが、それに起因するのでしょうか・・・。 その後はProcessMessage()や表示処理が始まるので、関係なさそうですが・・・。
Re: フルスクリーンで起動すると落ちる ( No.6 )
名前:いっち 日時:2010/09/15 00:18

> 起動部分のみに削ったとところ正常にフルクスリーン起動できてしまいました。 となると、ソースやデータを拝見しないと外部から事象を特定するのは難しいと思います。
Re: フルスクリーンで起動すると落ちる ( No.7 )
名前:埴輪 日時:2010/09/15 05:38

すいません。 え・・・と、どのようにアップロードすればいいですか?
Re: フルスクリーンで起動すると落ちる ( No.8 )
名前:いっち 日時:2010/09/15 13:00

私は良くこのアップローダを利用しています。 ttp://www.axfc.net/uploader/ サイズにあった板を選択して、「ファイルを投稿する」を選べば後は手順どおりです。 削除キーとダウンロードキーは設定しておくことをお勧めします。 アップロードするファイルはプロジェクトのフォルダを丸ごと圧縮したものでよいと思います。 ただ、VSの場合は拡張子がncbのファイルやDebugフォルダ、Releaseフォルダは必要ないです。
Re: フルスクリーンで起動すると落ちる ( No.9 )
名前:Will 日時:2010/09/15 14:17

> コンフィグやコースのデータを読み込んで よくあるケースだとデータ読み込み時にデータ格納先メモリ確保が不十分で メモリ破壊してしまった結果、正しく動作しなくなったというのは考えられそうです。
Re: フルスクリーンで起動すると落ちる ( No.10 )
名前:埴輪 日時:2010/09/18 17:37

ttp://www1.axfc.net/uploader/Sc/so/154510.zip にアップロードさせていただきました。 pass:dxlib コンフィグはフルスクリーンになっているので当方では起動できません。 とりあえず3DRace.cfgを削除していただければ起動できます。 また、メモリ破壊をしやすい動的な確保が必要な読み込み動作はDxLib_init()の後に行うので、関係ないようにも思えるのですが、 それらを削除したら正常にフルスクリーン起動できてしまった以上、それらが問題ですよねえ(汗
Re: フルスクリーンで起動すると落ちる ( No.11 )
名前:いっち 日時:2010/09/18 18:58

ソースを拝見させて頂きました。 原因としては 3DRace.cpp の 72行目あたりの if文の対応が間違っていたため、 フルスクリーン設定時に DxLib_Init が行われていないと言うものでした。 以下のように変更することで起動しました。 > if(fullscreen==1) > if(ChangeWindowMode(TRUE)!=DX_CHANGESCREEN_OK || DxLib_Init()==-1)return -1; > else > if(DxLib_Init()==-1)return -1; ↓↓↓↓ > if(fullscreen==1) { > if(ChangeWindowMode(TRUE)!=DX_CHANGESCREEN_OK || DxLib_Init()==-1)return -1; > } > else { > if(DxLib_Init()==-1)return -1; > } ところで fullscreen は bool 型の変数として定義されていますが、 ソースを拝見しますと fullscreen++ など、int型のように扱われています。 こういったコードはあまり宜しくないので、ちゃんとbool型として扱ったほうが良いです。 ex) 3DRace.cpp 589行目 > if(cursor==3 && fullscreen<1)fullscreen++; ↓↓↓↓ > if(cursor==3 && fullscreen == false)fullscreen = true; 3DRace.cpp 596行目 > if(cursor==3 && fullscreen>0)fullscreen--; ↓↓↓↓ > if(cursor==3 && fullscreen == true)fullscreen = false;
Re: フルスクリーンで起動すると落ちる ( No.12 )
名前:埴輪(解決) 日時:2010/09/18 21:20

ご指摘ありがとうございます! この書き方だとelse以降が if(fullscreen==1) if(ChangeWindowMode(TRUE)!=DX_CHANGESCREEN_OK || DxLib_Init()==-1)return -1; のどちらにかかるかわかりませんね(汗 (これってC言語の基本的な文法に関するレベルの問題ですよね(汗 ちなみにfullscreenはもともとint型のローカル変数だったので、 処理がそのままになってしまっていたのだと思います。 またif(fullscreen==true) は if(fullscreen)、 if(fullscreen==false) は if(!fullscreen) のほうがよいのではないのでしょうか 。確かtrueだったかfalseだったかの値が一定ではないので云々と聞いたことがあります。
Re: フルスクリーンで起動すると落ちる ( No.13 )
名前:いっち 日時:2010/09/18 22:27

> (これってC言語の基本的な文法に関するレベルの問題ですよね(汗 インデントの魔力ですね。答えは最初からあったのに私も見逃していました。 > 確かtrueだったかfalseだったかの値が一定ではないので云々と聞いたことがあります。 C++の組み込み型のboolの場合、true または false との等号比較は保証されます。 ですので、この場合どちらでも良いことになります。 (WINAPIのBOOLの場合は保証されません。) せっかくですので動作報告です。 CPU P4 3.2Ghz|MEM 2GB|OS WinXP SP3|GPU GeForce 6600GT フルスクリーンでウィンドウでもデフォルトの設定だと60fps出ていましたが、 "Draw Quality"を"High"にすると20fpsぐらいでした。 fpsの落ち方が不自然な気がしないでもないです。 ※追記 今見たら DrawSphere3D やなんかの分割数を増やしているのですね。 うーん、こんなものなのかも? 毎フレーム DrawSphere3D を行うと内部で頂点の生成に時間がかかるのかも?
Re: フルスクリーンで起動すると落ちる ( No.14 )
名前:埴輪 日時:2010/09/19 19:03

インデントの魔力・・・恐ろしいです。 見やすくするための工夫がバグを産むとは・・・。 そうでしたか。勉強になります。 boolとBOOL・・・。 こういうのがC初心者を破壊するんですよね(汗 おっしゃるとおりDraw Qualityは 分割数に直結しています。 こちらは CPU:i7(2.8GHz) MEM:4GB OS:Win7 HP 32bit GPU:GeForce 9500GT ですが、 Draw Quality:High Draw Shadow:Enable で起動しようものならFPSは一桁になります。 重いのはおいといてめでたしめでたし、と思ったのですが、 フルスクリーンだと画面に何も表示されなくなってしまいました。 title()の中のメインループにprintf()をかませてみて、 プロンプトがaaaaaaaaaaaaaa・・・となったので、ループはまわっているはずなのですが。 またプロンプトには以下のように表示されていました。 (コンパイラはBCC5.5ですが、-Wパラメをつけていないので、プロンプトは有効です) 画像ファイルは使用していないはずなのですが・・・。 Not a JPEG file: starts with 0x00 0x00 libpng error: Not a PNG file Empty input file libpng error: Read Error Not a JPEG file: starts with 0x00 0x00 libpng error: Not a PNG file Empty input file libpng error: Read Error Not a JPEG file: starts with 0x00 0x00 libpng error: Not a PNG file Empty input file libpng error: Read Error Log.txtも貼っておきます 16:システムの情報を出力します 47: DXライブラリ Ver3.03 94: OS Windows7 ( Build 7600 ) 304: CPU動作速度:大体2.60GHz 358: MMX命令を使用します 414: SSE命令が使用可能です 469: SSE2命令が使用可能です 525: CPUベンダ:GenuineIntel 801: CPU名:Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz 856:COMの初期化... 成功しました 976:メモリ総量:3319.11MB 空きメモリ領域:2488.09MB 1032:タイマーの精度を検査します 1087:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 1142: パフォーマンスカウンターを使用します タイマー分解能 : 2727.578000 KHz 1252: ソフトの二重起動検査... 二重起動はされていませんでした 1418:ウインドウクラスを登録します... 登録に成功しました 1529:フルスクリーンモード用のウインドウを作成します 1586:ウインドウの作成に成功しました 1652:カーソルを不可視にしました 1708:IMEを無効にしました 1764:DirectInput関係初期化処理 1819: DirectInput7 の取得中... 成功 1943: 引き続き初期化処理... 初期化成功 2058: ジョイパッドの初期化... 2125: ジョイパッドの初期化は正常に終了しました 2181: マウスデバイスの初期化... 初期化成功 2295: キーボードデバイスの初期化... 初期化成功 2410:DirectInput 関連の初期化は正常に終了しました 2465:DirectSound の初期化を行います 2521:DirectSound インターフェースの取得を行います.... 成功 2635:引き続きインターフェースの初期化処理... 成功 2899: DirectSound デバイスを列挙します 2957: モジュール名: ドライバ記述:プライマリ サウンド ドライバー 3012: モジュール名:{0.0.0.00000000}.{84386614-841c-42f9-960e-1efc0a801208} ドライバ記述:スピーカー (Realtek High Definition Audio) 3067: モジュール名:{0.0.0.00000000}.{21009904-152e-4a6a-91fa-67d7a67e8d48} ドライバ記述:Realtek Digital Output (Realtek High Definition Audio) 3122: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz 3177: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 3233: 利用可能サンプリング精度 3289: プライマリ 16bit = OK 8bit = OK 3344: セカンダリ 16bit = OK 8bit = OK 3400: 利用可能チャンネル 3454: プライマリ MONO = OK STEREO = OK 3510: セカンダリ MONO = OK STEREO = OK 3566:DirectSound の初期化は正常に終了しました 3632:DirectDraw オブジェクトの取得を行います.... 成功 3748:引き続き初期化処理... 初期化に成功しました 3919:IDirect3D9 オブジェクトを取得します.... 成功 4034:IDirect3DDevice9 オブジェクトを取得します.... ハードウエア頂点演算を使用します 5675:成功 5729:Driver:nvd3dum.dll Description:NVIDIA GeForce 9500 GT 5785:画面のフォーマットは D3DFMT_X8R8G8B8 です 5840:Zバッファのフォーマットは D3DFMT_D16 です 5895:16bit カラーフォーマットは D_D3DFMT_R5G6B5 です 5950:32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です 6005:アルファ付き 16bit カラーフォーマットは D_D3DFMT_A4R4G4B4 です 6059:アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です 6115:アルファテスト用 16bit カラーフォーマットは D_D3DFMT_A1R5G5B5 です 6170:アルファテスト用 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です 6225:DXT1テクスチャフォーマットは D_D3DFMT_DXT1 です 6280:DXT2テクスチャフォーマットは D_D3DFMT_DXT2 です 6336:DXT3テクスチャフォーマットは D_D3DFMT_DXT3 です 6390:DXT4テクスチャフォーマットは D_D3DFMT_DXT4 です 6445:DXT5テクスチャフォーマットは D_D3DFMT_DXT5 です 6500:描画用 16bit カラーフォーマットは D_D3DFMT_R5G5B5 です 6555:描画用 32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です 6610:描画用アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です 6665:Zバッファを作成します.... 成功 6791:プログラマブルシェーダーを使用します 6851:フォントの初期化を行います 6908:フォントの初期化は正常に終了しました 6963:文字コードバッファの初期化を行います... 完了しました 46816:ウインドウを閉じようとしています 47490:ウインドウが破棄されようとしています 47554:ソフトを終了する準備が整いました 47911:フォントの初期化を行います 47966:フォントの初期化は正常に終了しました 48061:DirectInput 関連の終了処理... 完了 48130:DirectSound の終了処理は正常に終了しました 48185: 48240:Alloc memory dump 48293: Total size:0(0.000kb) Alloc num:0 48348:
Re: フルスクリーンで起動すると落ちる ( No.15 )
名前:いっち 日時:2010/09/19 20:15

私の環境では動作しているので、確たる原因は不明ですが、以下の部分を修正してみてください。 GetHitKeyStateAll に渡す配列は 256 必要です。 3Drace.cppの55行目あたり > char key[255],okey[255]; ↓↓↓↓ > char key[256],okey[256];
Re: フルスクリーンで起動すると落ちる ( No.16 )
名前:埴輪(解決&報告) 日時:2010/09/20 11:47

そうでしたか。ありがとうございます。 ちなみに何も表示されない問題は、 サブディスプレイを無効化したら解決しました。 お騒がせしました。 マルチディスプレイ環境にてフルスクリーン起動がうまくできないようです。

Page: 1 |