Re: v3.00にすると真っ黒画面に ( No.1 ) |
- 名前:Masao 日時:2009/09/15 10:44
こちらでも同様の症状を確認しております。
現在開発中のゲームで、ライブラリを3.00に更新したところ、スタッフ内から3名ほど報告がありました。
(全体人数の半分弱ぐらいです。)
一応ビルド環境を残しておきます。
Windows XP SP3
Visual C++ 2008 Express Edition
ライブラリバージョン: 3.00 / 3.00a いずれも真っ黒。
>SetUseDirectDrawFlag(FALSE);
>を追加すると表示されるようになりました。
3名のうち1名に、これを追加したファイルを渡して試していただきましたが、真っ暗のままだった。とのことです。
(設置場所は、DxLib_Init() の直後です。)
2.25b に戻して今は対応していますが、このバグ(?)が修正されることを期待しております。
|
Re: v3.00にすると真っ黒画面に ( No.2 ) |
- 名前:山崎 日時:2009/09/15 10:13
いつもお世話になっております。
さきほど、私の方でも、DXライブラリのバージョンを
3.00aに更新したところ、画面に何も表示されなくなりました。
それまで使っていた2.25に戻すと、それまでどおり描画されました。
環境は、
OS Windows XP SP3
Visual C++ 2008 Professional Edition
です。
|
Re: v3.00にすると真っ黒画面に ( No.3 ) |
- 名前:管理人 日時:2009/09/15 22:58
>とんさん Masaoさん 山崎さん
ご報告ありがとうございます
私の環境で再現しないので原因が何なのかは分かっていませんが
原因と思われる箇所を修正したバージョンをアップしましたので
よろしければこちらのバージョンをお試しになってみてください m(_ _)m
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
もし上記のバージョンでも駄目でしたら・・・
申し訳ありませんが原因を突き止めるために
テスト用プログラムをお試しになってみていただけないでしょうか?
もしご承諾いただけるのでしたら、大変お手数ですがこちらのファイルを
ダウンロードしてください m(_ _;m
http://homepage2.nifty.com/natupaji/temp/Ver3_00bTest.exe
中には以下のファイルが含まれています
KabeTex.bmp // テストプログラムで使用する画像
Ver3_00bTest.cpp // テストプログラムのソース
Ver3_00b_Window.exe // テストプログラムをウインドウモードで起動する実行ファイル
Ver3_00b_Full_Discard.exe // テストプログラムをフルスクリーンモードで起動する実行ファイルその1
Ver3_00b_Full_Flip.exe // テストプログラムをフルスクリーンモードで起動する実行ファイルその2
Ver3_00b_Full_Copy.exe // テストプログラムをフルスクリーンモードで起動する実行ファイルその3
上記の4つの実行ファイルはそれぞれ実行すると、正常に動作した場合は
画面上部に KabeTex.bmp が左右に移動する映像が表示されます。( 何かキーを押すと終了します )
4つの実行ファイルはウインドウモードで起動する Ver3_00b_Window.exe だけ
DxLib_Init の前に ChangeWindowMode( TRUE ) ; を記述してウインドウモードで
起動していますが、基本的にはすべて同じプログラムで、唯一裏画面の内容を
表画面に反映させる方法だけが違います。( といっても Direct3D9Device を
作成する際に設定するパラメータの一つを変更しているだけですが・・・ )
大変お手数ですが、4つの実行ファイルを起動して、それぞれ画面に何か
表示されるかどうかを教えていただけないでしょうか?
よろしくお願いします
|
Re: v3.00にすると真っ黒画面に ( No.4 ) |
- 名前:とん 日時:2009/09/16 08:52
>管理人さま
早速の御対応ありがとうございます。
上記ライブラリに更新後再構築を試しましたが以前と同様で、改善されませんでした。
テスト用プログラムも試しました。
・Ver3_00b_Full_Copy.exe
・Ver3_00b_Full_Discard.exe
・Ver3_00b_Full_Flip.exe
フルスクリーンで起動後、真っ黒画面が表示されました。
・Ver3_00b_Window.exe
ウィンドウで起動後、真っ黒画面が表示されました。
何度か真っ黒画面と書きましたが、
更新されている黒い画面ではなく、
上に別ウィンドウを載せると残像が残るタイプの、
更新されていない画面です。
何かの参考になればと思います。
>Masaoさま
私の方で、
SetUseDirectDrawFlag(FALSE)
を追加しているのは、
DxLib_Init()
より前です。
試しに後に追加してみましたが、
画面は真っ黒のままでした。
|
Re: v3.00にすると真っ黒画面に ( No.5 ) |
- 名前:AZ99 日時:2009/09/16 11:07
同様の現象が起こったので報告します。
上記のライブラリを適用しても同じ結果でした。
プログラムも4つとも同じです。
while(ProcessMessage() == 0){}
だけにしても同じような現象になるようです。
SetUseDirectDrawFlag(FALSE);
を適用すると、アクセス違反のエラーが出ますね。
|
Re: v3.00にすると真っ黒画面に ( No.6 ) |
- 名前:Masao 日時:2009/09/16 11:55
>>Masaoさま
>私の方で、
>SetUseDirectDrawFlag(FALSE)
>を追加しているのは、
>DxLib_Init()
>より前です。
こちらでも、初期化前に入れてビルドしたところ、
症状があった私のゲームの開発メンバーから
「画面が真っ黒になるのがなくなった。」
との報告をいただきました。
なかなか困っていたので、助かりました。
ありがとうございます。
|
Re: v3.00にすると真っ黒画面に ( No.7 ) |
- 名前:山崎 日時:2009/09/16 15:16
>管理人様
ご返信誠にありがとうございます。
修正されたバージョンを試してみましたが、
こちらでも変わらず画面は黒いままで何も表示されませんでした。
テスト用プログラムの4つも試させて頂きました。
結果はとんさんと同様で、どれも黒い画面が表示されただけです。
また、ウインドウに他のウインドウを重ねると、
重ねたウインドウ一部が残るというのもとんさんと同様です。
もし他にテストプログラムなどお手伝いできることがあれば
DXライブラリの発展のため是非とも協力させて頂きたく思います。
ただ、なかなか忙しくて時間が取れないこともあるかとは思いますが…。
追加
私も試しに、DxLib_Init()の前に
SetUseDirectDrawFlag(FALSE);を追加してみました。
すると、追加前は画面に何も表示されなかったのが、
追加後はprintfDx()とDrawBox()は表示できました。
以下は試したコードです。
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE ,hInstance,HINSTANCE,hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
SetUseDirectDrawFlag(FALSE);
if( DxLib_Init() == -1 )
{
return -1 ;
}
DrawPixel( 320 , 240 , 0xffff ) ;
DrawBox(20,20,50,50,GetColor(255,255,255),TRUE);
printfDx("TestPrint\n");
WaitKey() ;
DxLib_End() ;
return 0 ;
}
ただ、何かキーを押してプログラムを終了しようとするとエラーになります。
|
Re: v3.00にすると真っ黒画面に ( No.8 ) |
- 名前:管理人 日時:2009/09/17 09:48
> とんさん、AZ99さん、Masaoさん、山崎さん
お試しいただきありがとうございます。
私の予想とは原因が違ったみたいですね・・・
AZ99さんと山崎さんがご報告してくださったエラーは原因が分かり、修正しました
( 今回アップしたファイルにはその修正は含まれていませんが・・・ )
ただ、本題の画面に何も描画されない原因は未だに分かっていません
とんさんがお使いのPCに搭載されているグラフィックスデバイスは
GeForce7600GS とのことですが、よろしければ AZ99さん、Masaoさん、山崎さんが
お使いのPCに搭載されているグラフィックスデバイスの名称も教えていただけないでしょうか?
もし皆様がお使いのグラフィックスデバイスが GeForce7600GS でしたら、
私のPCにも GeForce7600GS を搭載することで同じ現象が再現できる可能性が高くなりますので・・・
あと、もし引き続きご協力してくださる方は、大変お手数で申し訳ないのですが
DXライブラリのソース込みでサンプルプログラムをコンパイル、実行してみて頂けないでしょうか?
こちらがそのプロジェクトを圧縮したものになります m(_ _)m
http://homepage2.nifty.com/natupaji/DxLib/DxLibSrcTest_VC.zip
中には Visual C++ 2008 Express Edition 用のソリューションファイル( 拡張子が sln のファイル )
がありますので、それを Visual C++ 2008 Express Edition で開いて、実行してみてください
lib ファイルを使用する通常のライブラリの使用と異なり、ClearDrawScreen や
ProcessMessage、ScreenFlip の中にもデバッガを使用して入ることができます
そして、とんさんのご報告ではそもそも何も描画されていない、とのことですので、
よろしければ Sample.cpp の以下の部分
// メインループ
while( ProcessMessage() == 0 )
{
// 画面の初期化
ClearDrawScreen() ;
// 座標の移動
x += xadd ;
if( x < 0 || x >= 640 )
xadd = -xadd ;
// 画像の描画
DrawGraph( x, 24, handle, TRUE ) ;
// 裏画面の内容を表画面に転送
ScreenFlip() ;
}
の、ループが動いているのかどうかをご確認いただければと思います
ループの中が一回だけ実行されて後は ProcessMessage から出てこないか、などです・・・
DrawGraph の行の辺りにブレイクポイントを張っていただければご確認いただけると思います
|
Re: v3.00にすると真っ黒画面に ( No.9 ) |
- 名前:山崎 日時:2009/09/17 10:26
>管理人様
おはようございます。修正お疲れ様です。
私のパソコンのグラフィックデバイスは
NVIDIA GeForce 6150SE です。
サンプルプログラムの方も先ほど実行してみました。
こちらも画面には何も映らず、真っ黒なままでした。
ループ内のDrawGraph()にブレイクポイントを置きデバッグしてみたところ、
処理がループから出るようなことはありませんでした。
DrawGraph()やScreenFlip()内にも入ってみましたが、
そのときに
「ソースファイルがモジュールがビルドされたときのものと異なります」
という旨の警告が出るのですが、それはこれでよろしいのでしょうか。
一応報告しておきます。
|
Re: v3.00にすると真っ黒画面に ( No.10 ) |
- 名前:Masao 日時:2009/09/17 11:45
おや?偶然でしょうか。
この症状が発生しているスタッフから聞いたところ。
NVIDIA GeForce 6150
でした。
もう一人の(真っ暗現象を確認した)スタッフは、
NVIDIA GeForce 7600 GS
でした。
それから、
>SetUseDirectDrawFlag(FALSE)
での回避方法がありましたが、やはり処理負荷が半端なく増えてfpsが下がるので、根本的解決に期待です。
|
Re: v3.00にすると真っ黒画面に ( No.11 ) |
- 名前:AZ99 日時:2009/09/17 13:13
Video:GeForceFX5200
OS:Windows2000
いろいろとブレークかけて、追って見ました。
勝手な推測ですが、
SetDrawScreen()の処理に入ると、かなり重くなります。
ProcessMessage()が呼ばれたあと、
WM_PAINTなどの処理のところで重くなっているかもしれません。
最近のグラフィックデバイスだと大丈夫らしいので、関係ないかもしれませんが、
報告させていただきました。
|
Re: v3.00にすると真っ黒画面に ( No.12 ) |
- 名前:とん 日時:2009/09/19 04:04
すみませんしばらくの間(2週間程)まとまった時間が取れません。
今手元にBCC環境しかなく、VCの環境を整える時間がありません申し訳ない。
-------------------------------------------
ProcessMessageについて。
しているアプリ終了ボタンが動作しておりますので、
ProcessMessage内から出てこないということはありません。
|
Re: v3.00にすると真っ黒画面に ( No.13 ) |
- 名前:管理人 日時:2009/09/20 08:58
> 山崎さん、Masaoさん、AZ99さん、とんさん
沢山のご情報ありがとうございます&お手数おかけして申し訳ありませんでした
皆様のご情報から GeForce7600GS・GeForce6150 など、この頃のビデオチップで
あればかなりの確率で現象の再現が可能だと思い至りまして、中でも一番調達しやすい
GeForce7600GS を手に入れて試してみました
結果思惑通り現象は再現して、その原因は Direct3D9Device 作成時の「すべての頂点処理を
GPUで処理する」という指定でした、こちらを指定すると
1.すべての頂点処理をGPUで処理できるGPU → 問題なく動作
2.一部の頂点処理のみGPUで処理することができるGPU → GPUで処理できない頂点処理APIを使用した際にエラー
3.GPUでの頂点処理を一切できないGPU → CreateDevice時にエラー
この中で1、3の存在しか無いと思い込み、3の場合は頂点処理をGPUで処理しないという
指定で再度 CreateDevice をすることで解決していたのですが、存在を認識していなかった
2は CreateDevice 自体は成功するので、その後の描画処理でエラーが発生してしまっていました
( 少なくとも GeForce7600GS は2に該当しています )
この問題を CreateDevice 時の指定を「GPUで処理できる頂点処理はGPUで処理する」という
指定にすることで解決したバージョンをアップしましたので、よろしければお試しになってみてください m(_ _)m
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
|
Re: v3.00にすると真っ黒画面に ( No.14 ) |
- 名前:Masao 日時:2009/09/20 13:12
NVIDIA GeForce 6150
NVIDIA GeForce 7600 GS
にて、修正を確認いたしました。
ありがとうございます。
|
Re: v3.00にすると真っ黒画面に ( No.15 ) |
- 名前:山崎 日時:2009/09/23 17:49
>管理人様
バージョン3.0cをダウンロードしてリビルドしたところ、
見事にきちんとゲームが動作しました。
修正、本当にお疲れ様でした。
ありがとうございました。
|
Re: v3.00にすると真っ黒画面に ( No.16 ) |
- 名前:とん 日時:2009/09/27 01:23
おそくなりました
BCC用ライブラリをダウンロードして
テストしましたところ、ちゃんと表示されました。
修正ありがとうございます。感謝です!
|
Re: v3.00にすると真っ黒画面に ( No.17 ) |
- 名前:管理人 日時:2009/09/29 09:51
> Masaoさん、山崎さん、とんさん
ご報告ありがとうございます
皆様のお陰で大きな欠陥を修正することができました m(^ ^;m
|