トップページ > 記事閲覧
DirectX 9、又はDirectX 11
名前:さと 日時: 2015/02/16 22:18

管理人様、こんにちは。 暫定最新版(DxLibVCTest.exe)が出ていたので、その都度試していたのですが 2月12日と2月15日での2Dの描画が変になりました。 WindowsXPの DirectX 9.0cではなにも問題がありませんが、 Windows7(32,64)とも DirectX 11ではSetDrawAreaが1pixelずれてたりします。 ビデオカードで結果が違っていて、Radeon HD 4xxxでは横方向にずれて、Intel HDでは縦方向にずれたりしています。 尚、1月22日の暫定最新版ではまったく問題ありませんでした。
メンテ

Page: 1 | 2 |

Re: DirectX 9、又はDirectX 11 ( No.4 )
名前:管理人 日時:2015/02/21 02:07

沢山のご情報ありがとうございます SetDrawBlendMode で半透明の設定にした状態で DrawLine を使用すると 1pixel太くなるとのことですが、例えばこちらのプログラムのように #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int i ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; SetDrawScreen( DX_SCREEN_BACK ) ; SetDrawBlendMode( DX_BLENDMODE_ALPHA, 128 ) ; for( i = 0 ; i < 10 ; i ++ ) { DrawLine( 100, 100 + i * 16, 400, 100 + i * 16, GetColor( 255,255,255 ) ) ; } ScreenFlip() ; WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } 10本の横線を描画した場合、全ての線が1pixel太くなるということでしょうか? > それから3D描画側で、これはデータが原因かもしれませんが > mqoデータ、MMDのpmd, pmxでは正常ですが xファイルで描画すると > モデルの一部が黒くなる現象が出ています。 xファイル以外では問題ないとのことでしたらデータが原因である可能性が高いと思いますが、 こちらの現象も以前のバージョンでは発生しなかったのでしょうか? > MakeScreenで、2000x2000サイズのグラフィックを数枚作成すると > 一部が黒い又は白になって描画も反映されず使えません。 > これはビデオメモリが足りないと起きる現象なのでしょうか? 1枚では大丈夫で、複数枚では不具合が発生する、とのことでしたらビデオメモリが 足りないことが原因である可能性は高いと思います
メンテ
Re: DirectX 9、又はDirectX 11 ( No.5 )
名前:さと 日時:2015/02/22 12:40

検証ありがとうございます。 >10本の横線を描画した場合、全ての線が1pixel太くなるということでしょうか? 何か特殊な条件があるみたいで、いくつかサンプルテストしていますので、1日ほどお待ちください。 >xファイル以外では問題ないとのことでしたらデータが原因である可能性が高いと思いますが、 >こちらの現象も以前のバージョンでは発生しなかったのでしょうか? はい、1月22日の暫定最新版までは何も不具合がありませんでした。 >1枚では大丈夫で、複数枚では不具合が発生する、とのことでしたらビデオメモリが >足りないことが原因である可能性は高いと思います こちらは、ひょっとして作成時に-1が返っているのではと調べてみたら。 [05490127][054A0128][054B0129][054C012A] と、4枚目まで問題なくハンドルが返っていましたが 真っ白のまま何も反映されませんでした。 この現象が出る。(Acerノートパソコン 初代Aspire One) WindowsXP, Atom N270, Mobile Intel 945 Express では、プロパティで見るとビデオメモリが220MB程度なのですが (4byte×2000pixcel×2000pixcel)×4枚だと62MB程度になるのかなと? もしかすると、プロパティでは220MBだけど実際はれ利用可能が64MBという具合なのかもしれません。 一応、GetVideoMemorySize関数では220MB程度を返しています。 まあ、こんな使い方はまず少数派なのでなんでだろうと言う程度でかまいません。
メンテ
Re: DirectX 9、又はDirectX 11 ( No.6 )
名前:さと 日時:2015/02/22 12:43

WindowsXP, Atom N270, Mobile Intel 945 Expressのログです。 0:システムの情報を出力します 1: DXライブラリ Ver3.13e 1: 論理プロセッサの数 : 2 1: OS WindowsXP ( Build 2600 Service Pack 3 ) 102: 現時点のCPU動作速度:大体1.58GHz 102: MMX命令を使用します 103: SSE命令が使用可能です 103: SSE2命令が使用可能です 103: CPUベンダ:GenuineIntel 105: CPU名: Intel(R) Atom(TM) CPU N270 @ 1.60GHz 105:COMの初期化... 成功しました 112:メモリ総量:1523.88MB 空きメモリ領域:814.66MB 112:タイマーの精度を検査します 113:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 113: パフォーマンスカウンターを使用します タイマー精度 : 3579.545000 KHz 114: ソフトの二重起動検査... 二重起動はされていませんでした 115:ウインドウクラスを登録します... 登録に成功しました 164:ウインドウモード起動用のウインドウを作成します 189:ウインドウの作成に成功しました 189:ウインドウを表示します 226:IMEを無効にしました 227:ウインドウスタイルをウインドウモード用に変更します... 完了 247:DirectInput関係初期化処理 247: XInput DLL の読み込み中... 成功 253: DirectInput7 の取得中... 成功 280: 引き続き初期化処理... 初期化成功 288: ジョイパッドの初期化... 300: ジョイパッドの初期化は正常に終了しました 300: マウスデバイスの初期化... 初期化成功 302: キーボードデバイスの初期化... 初期化成功 305:DirectInput 関連の初期化は正常に終了しました 310:DirectSound の初期化を行います 311:DirectSound インターフェースの取得を行います.... 成功 315:引き続きインターフェースの初期化処理... 成功 435: DirectSound デバイスを列挙します 439: モジュール名: ドライバ記述:プライマリ サウンド ドライバ 439: モジュール名: RtkHDAud.sys ドライバ記述:Realtek HD Audio output 440: 最大サンプリングレート:192.00KHz 最小サンプリングレート:8.00KHz 441: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 441: 利用可能サンプリング精度 442: プライマリ 16bit = OK 8bit = OK 442: セカンダリ 16bit = OK 8bit = OK 443: 利用可能チャンネル 443: プライマリ MONO = OK STEREO = OK 444: セカンダリ MONO = OK STEREO = OK 445:DirectSound の初期化は正常に終了しました 450:DirectDraw オブジェクトの取得を行います.... 成功 458:引き続き初期化処理... 初期化に成功しました 466:IDirect3D9Ex オブジェクトを取得します.... IDirect3D9 オブジェクトを取得します.... 成功 478:IDirect3DDevice9 オブジェクトを取得します.... ハードウエア頂点演算を使用します 780:成功 782:Driver:igxprd32.dll Description:Mobile Intel(R) 945 Express Chipset Family 782:画面のフォーマットは D3DFMT_R5G6B5 です 783:16bit Zバッファフォーマットは D3DFMT_D16 です 784:24bit Zバッファフォーマットは D3DFMT_D24X8 です 784:32bit Zバッファフォーマットは D3DFMT_D24X8 です 785:16bit カラーフォーマットは D3DFMT_R5G6B5 です 785:32bit カラーフォーマットは D3DFMT_X8R8G8B8 です 785:アルファ付き 16bit カラーフォーマットは D3DFMT_A4R4G4B4 です 786:アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 786:アルファテスト用 16bit カラーフォーマットは D3DFMT_A1R5G5B5 です 786:アルファテスト用 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 787:DXT1テクスチャフォーマットはD3DFMT_DXT1 です 787:DXT2テクスチャフォーマットはD3DFMT_DXT2 です 787:DXT3テクスチャフォーマットはD3DFMT_DXT3 です 788:DXT4テクスチャフォーマットはD3DFMT_DXT4 です 788:DXT5テクスチャフォーマットはD3DFMT_DXT5 です 788:描画用 16bit カラーフォーマットは D3DFMT_R5G6B5 です 788:描画用 32bit カラーフォーマットは D3DFMT_X8R8G8B8 です 788:描画用アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 788:使用できる描画用ABGR整数16ビット型カラーフォーマットがありませんでした 789:使用できる描画用ABGR浮動小数点16ビット型カラーフォーマットがありませんでした 789:使用できる描画用ABGR浮動小数点32ビット型カラーフォーマットがありませんでした 789:描画用1チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8R8G8B8 です 790:使用できる描画用1チャンネル整数16ビット型カラーフォーマットがありませんでした 790:使用できる描画用1チャンネル浮動小数点16ビット型カラーフォーマットがありませんでした 790:使用できる描画用1チャンネル浮動小数点32ビット型カラーフォーマットがありませんでした 791:描画用2チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8B8G8R8 です 791:使用できる描画用2チャンネル整数16ビット型カラーフォーマットがありませんでした 791:使用できる描画用2チャンネル浮動小数点16ビット型カラーフォーマットがありませんでした 792:使用できる描画用2チャンネル浮動小数点32ビット型カラーフォーマットがありませんでした 792:一度に描画できるプリミティブの最大数:65535 792:対応している最大頂点インデックス:65534 793:同時にレンダリングできるバッファの数:1 793:最大テクスチャサイズ 幅:2048 高さ:2048 793:テクスチャステージテンポラリレジスタ:使用可 794:減算合成のハードウェア対応:ネイティブ 794:ハードウェア頂点シェーダーバージョンコード:0 794:エミュレーション頂点シェーダーバージョンコード:300 795:ピクセルシェーダーバージョンコード:200 874:バックバッファロック転送の時間:22494nsec 一時的な描画可能バッファを使用した転送の時間:976nsec 874:バックバッファロックを使用しません 875:Zバッファを作成します.... 成功 940:プログラマブルシェーダーを使用します 1267:フォントの初期化を行います 1272:フォントの初期化は正常に終了しました 1273:文字コードバッファの初期化を行います... 完了しました >画像ファイルリザーブのエラーの為、省略 1983:mem alloc size: 0( 0.000kb) file:DxModelRead.cpp line:4646 ID:2669 addr:15f77fd8 data:<> ] 1984:mem free size: 0( 0.000kb) file:DxModelRead.cpp line:4646 ID:2669 addr:15f77fd8 data:<> ] 9472:初期化を完了しました
メンテ
Re: DirectX 9、又はDirectX 11 ( No.7 )
名前:さと 日時:2015/02/22 14:12

貼り付けて、ログを見直したら 788:使用できる描画用ABGR整数16ビット型カラーフォーマットがありませんでした が、なんとなく気になったので デスクトップカラーを32bitにして、SetGraphModeでも32bitにしてみましたが、変化がありませんでした。 ただ、2000x2000が2枚だと描画に問題がでていないのと 4枚作成した時のGetVideoMemorySize関数の全体容量は220MBで、残りが60MBと出ているのが何かありそうです。
メンテ
Re: DirectX 9、又はDirectX 11 ( No.8 )
名前:さと 日時:2015/02/22 15:06

謎すぎるほど簡単にDrawLineが太くなる現象が、以下ででました。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int i ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 中央1pixel空けてライン描画 DrawLine( 0, 239, 640, 239, GetColor( 0x00, 0xFF, 0x00)); DrawLine( 0, 241, 640, 241, GetColor( 0x00, 0xFF, 0x00)); WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } 実行すると【不具合有り】のパソコンでは2本のラインがくっつきます。 【正常に動作】のパソコンでは中央に1pixelの隙間があります。 1月22日の暫定最新版に戻すと、 【不具合有り】パソコンでも中央に1pixelの隙間ができます。 コンパイラは、Microsoft Visual C++ 2008 Express Editionです。 尚、最適化などのスイッチは弄っていません。
メンテ
Re: DirectX 9、又はDirectX 11 ( No.9 )
名前:さと 日時:2015/02/22 15:09

上記、不具合のあったパソコンのログです。 Windows7(64), Celeron 1037U, Intel HD Graphics 0:システムの情報を出力します 0: DXライブラリ Ver3.13e 0: 論理プロセッサの数 : 2 0: OS Windows7 ( Build 7601 Service Pack 1 ) 100: 現時点のCPU動作速度:大体1.64GHz 101: MMX命令を使用します 101: SSE命令が使用可能です 102: SSE2命令が使用可能です 105: CPUベンダ:GenuineIntel 110: CPU名: Intel(R) Celeron(R) CPU 1037U @ 1.80GHz 111:COMの初期化... 成功しました 115:メモリ総量:3990.04MB 空きメモリ領域:2485.65MB 115:タイマーの精度を検査します 116:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 117: パフォーマンスカウンターを使用します タイマー精度 : 1753.857000 KHz 117: ソフトの二重起動検査... 二重起動はされていませんでした 122:ウインドウクラスを登録します... 登録に成功しました 126:ウインドウモード起動用のウインドウを作成します 151:ウインドウの作成に成功しました 152:ウインドウを表示します 190:IMEを無効にしました 191:ウインドウスタイルをウインドウモード用に変更します... 完了 224:DirectInput関係初期化処理 224: XInput DLL の読み込み中... 成功 228: DirectInput7 の取得中... 成功 233: 引き続き初期化処理... 初期化成功 235: ジョイパッドの初期化... 242: ジョイパッドの初期化は正常に終了しました 242: マウスデバイスの初期化... 初期化成功 243: キーボードデバイスの初期化... 初期化成功 247:DirectInput 関連の初期化は正常に終了しました 248:DirectSound の初期化を行います 249:DirectSound インターフェースの取得を行います.... 成功 252:引き続きインターフェースの初期化処理... 成功 559: DirectSound デバイスを列挙します 560: モジュール名: ドライバ記述:プライマリ サウンド ドライバー 560: モジュール名:{0.0.0.00000000}.{1e5c950d-0d12-4946-ab00-6445488e6104} ドライバ記述:スピーカー (VIA High Definition Audio) 561: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz 562: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 562: 利用可能サンプリング精度 562: プライマリ 16bit = OK 8bit = OK 563: セカンダリ 16bit = OK 8bit = OK 563: 利用可能チャンネル 564: プライマリ MONO = OK STEREO = OK 564: セカンダリ MONO = OK STEREO = OK 569:DirectSound の初期化は正常に終了しました 575:ID3D11Device オブジェクトを取得します.... 成功 581:Description:Intel(R) HD Graphics 581:画面のフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 582:16bit Zバッファフォーマットは DXGI_FORMAT_D16_UNORM です 582:24bit Zバッファフォーマットは DXGI_FORMAT_D24_UNORM_S8_UINT です 582:32bit Zバッファフォーマットは DXGI_FORMAT_D32_FLOAT です 583:カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 583:DXT1テクスチャフォーマットは DXGI_FORMAT_BC1_UNORM です 583:DXT2テクスチャフォーマットは使えません 584:DXT3テクスチャフォーマットは DXGI_FORMAT_BC2_UNORM です 584:DXT4テクスチャフォーマットは使えません 584:DXT5テクスチャフォーマットは DXGI_FORMAT_BC3_UNORM です 584:描画用カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 584:描画用ABGR整数16ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_UNORM です 585:描画用ABGR浮動小数点16ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_FLOAT です 585:描画用ABGR浮動小数点32ビット型カラーフォーマットは DXGI_FORMAT_R32G32B32A32_FLOAT です 585:描画用1チャンネル整数8ビット型カラーフォーマットは DXGI_FORMAT_R8_UNORM です 585:描画用1チャンネル整数16ビット型カラーフォーマットは DXGI_FORMAT_R16_UNORM です 586:描画用1チャンネル浮動小数点16ビット型カラーフォーマットは DXGI_FORMAT_R16_FLOAT です 586:描画用1チャンネル浮動小数点32ビット型カラーフォーマットは DXGI_FORMAT_R32_FLOAT です 586:描画用2チャンネル整数8ビット型カラーフォーマットは DXGI_FORMAT_R8G8_UNORM です 586:描画用2チャンネル整数16ビット型カラーフォーマットは DXGI_FORMAT_R16G16_UNORM です 586:描画用2チャンネル浮動小数点16ビット型カラーフォーマットは DXGI_FORMAT_R16G16_FLOAT です 587:描画用2チャンネル浮動小数点32ビット型カラーフォーマットは DXGI_FORMAT_R32G32_FLOAT です 587:使用する機能レベル:D3D_FEATURE_LEVEL_11_0 587:同時にレンダリングできるバッファの数:8 588:最大テクスチャサイズ 幅:16384 高さ:16384 588:深度バッファを作成します.... 成功 1533:フォントの初期化を行います 1535:フォントの初期化は正常に終了しました 1535:文字コードバッファの初期化を行います... 完了しました 4367:フォントの初期化を行います 4369:フォントの初期化は正常に終了しました 4388:d3d11.dll の解放 1 4389:dxgi.dll の解放 1 4389:Direct3D11 のオブジェクト数を出力 4390:Direct3D11 のオブジェクト合計数 : 0 4391:DirectInput 関連の終了処理... 完了 4420:DirectSound の終了処理は正常に終了しました 4424:ウインドウを閉じようとしています 4429:ウインドウが破棄されようとしています 4430:ソフトを終了する準備が整いました 4466: 4466:Alloc memory dump 4466: Total size:0(0.000kb) Alloc num:0 4467:
メンテ
Re: DirectX 9、又はDirectX 11 ( No.10 )
名前:さと 日時:2015/02/22 15:19

テストに使ったソースの方が良かったかもしれません。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ChangeWindowMode( TRUE); if( DxLib_Init() == -1) { return -1; } /* ClearDrawScreen(); DrawBox( 100, 100, 540, 380, GetColor( 0x7F, 0x00, 0x00), TRUE); SetDrawBlendMode( DX_BLENDMODE_ALPHA , 128); DrawBox( 150, 150, 490, 330, GetColor( 0x7F, 0x7F, 0x7F), TRUE); SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0); */ DrawLine( 0, 239, 640, 239, GetColor( 0x00, 0xFF, 0x00)); DrawLine( 0, 241, 640, 241, GetColor( 0x00, 0xFF, 0x00)); WaitKey(); DxLib_End(); return 0; } 最初は、色の重ね合わせや、SetDrawBlendModeの切り替えがダメなのかと思いましたが それらをコメントアウトしたシンプルな状態で現象が出ています。
メンテ
Re: DirectX 9、又はDirectX 11 ( No.11 )
名前:さと 日時:2015/02/22 16:18

何度もすみません。もしかして? と思い Microsoft Visual C++ 2010 Express で試しましたが 同じ結果でした。 コンパイルは、Windows7(64), Celeron 1037U, Intel HD Graphics で行い 隙間がくっつく不具合を確認したあと、.exeファイルを WindowsXP, Core2Quad Q9650, Radeon HD 5700 で 実行してみたら、1pixelの隙間ができました。
メンテ
Re: DirectX 9、又はDirectX 11 ( No.12 )
名前:管理人 日時:2015/02/22 22:11

ご情報ありがとうございます 恐らく原因は Intel HD Graphics のドライバが Direct3D 10 以降の ラスター化ルール( 浮動小数点数のポリゴンや線分の頂点座標値からどのように描画する ピクセルを決定するかを決める為のルール )に準拠していないのが原因だと思います <Direct3D 10 以降のラスター化ルール> https://msdn.microsoft.com/ja-jp/library/ee415722(v=vs.85).aspx 因みに、手元で以下の様なコードで32x32の線分を繋いだ四角形を描画しようとしたところ、 SetDrawBlendMode( DX_BLENDMODE_ADD, 128 ) ; DrawLine( 32, 32, 64, 32, GetColor( 255,255,255 ) ) ; DrawLine( 64, 32, 64, 64, GetColor( 255,255,255 ) ) ; DrawLine( 64, 64, 32, 64, GetColor( 255,255,255 ) ) ; DrawLine( 32, 64, 32, 32, GetColor( 255,255,255 ) ) ; さとさんのテストコードが正しく動作する( 1ピクセルの隙間ができる )手元の 環境( GeForce GTX 660 Ti )でも綺麗に四角形が描画されなかったので、 GeForce のドライバも正しくラスター化ルールに準拠できていないようです 今のところ得られている情報から考えると、どうも Direct3D 11 は Direct3D 9 程 使われていない為か、描画結果が Direct3D 9 より不安定な印象を受けます・・・ (- -;; とりあえず微妙な座標( ピクセルとピクセルの境目等 )を使用しないようにすることで 少なくとも手元の環境では上記テストコードで綺麗な四角形が描画されるようにできた バージョンをこちらにアップしましたので、よろしければお試しになってみてください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) > [05490127][054A0128][054B0129][054C012A] > と、4枚目まで問題なくハンドルが返っていましたが > 真っ白のまま何も反映されませんでした。 > この現象が出る。(Acerノートパソコン 初代Aspire One) > WindowsXP, Atom N270, Mobile Intel 945 Express > では、プロパティで見るとビデオメモリが220MB程度なのですが > (4byte×2000pixcel×2000pixcel)×4枚だと62MB程度になるのかなと? > > ただ、2000x2000が2枚だと描画に問題がでていないのと > 4枚作成した時のGetVideoMemorySize関数の全体容量は220MBで、残りが60MBと出ているのが何かありそうです。 VRAMはDXライブラリだけでも表画面、裏画面用にも使用されていますし、 デスクトップ画面の表示にもVRAMが使用されていますので、純粋にソフト用に220MBが 使用できるわけではありません、加えて ・純粋なVRAMは64MBで、残りの156MBはシステムメモリをVRAMに見立てた  ( 正常に動作してくれないことが多い )仮想VRAMである可能性がある ・220MBと表示されていても、ドライバ等の不具合で実際には220MB使えない場合がある などのことも考えられます > >xファイル以外では問題ないとのことでしたらデータが原因である可能性が高いと思いますが、 > >こちらの現象も以前のバージョンでは発生しなかったのでしょうか? > はい、1月22日の暫定最新版までは何も不具合がありませんでした。 なるほど・・・ ところで、こちらの不具合は Windows7 の Radeon HD 4600 でも発生するのでしょうか? あと、よろしければ正常に描画された場合のスクリーンショットと、一部が黒くなってしまった 場合のスクリーンショットをメールでこちら BQE00322(あっとまーく)nifty.com ( (あっとまーく)を@に置き換えてください ) に送っていただけないでしょうか? m(_ _;m どのように黒くなっているのかを確認できれば原因が分かるかもしれませんので・・・
メンテ
Re: DirectX 9、又はDirectX 11 ( No.13 )
名前:さと 日時:2015/02/23 00:09

いつも早急な対応ありがとうございます。 >描画結果が Direct3D 9 より不安定な印象を受けます・・・ (- -;; うむむ、なかなか新しい物は上手くいかないものですね。 >よろしければお試しになってみてください m(_ _;m 早速試してみましたが、あれれ・・・? リビルドの最終リンクでこんなエラーが出ました。 1>DxLib.lib(DxFont.obj) : error LNK2001: 外部シンボル ""int __cdecl DxLib::EnumFontName_PF(struct DxLib::tagENUMFONTDATA *,int,int)" (?EnumFontName_PF@DxLib@@YAHPAUtagENUMFONTDATA@1@HH@Z)" は未解決です。 1>DxLib.lib(DxFont.obj) : error LNK2001: 外部シンボル ""int __cdecl DxLib::TerminateFontHandle_PF(struct DxLib::FONTMANAGE *)" (?TerminateFontHandle_PF@DxLib@@YAHPAUFONTMANAGE@1@@Z)" は未解決です。 1>DxLib.lib(DxFont.obj) : error LNK2001: 外部シンボル ""int __cdecl DxLib::CreateFontToHandle_Error_PF(struct DxLib::FONTMANAGE *)" (?CreateFontToHandle_Error_PF@DxLib@@YAHPAUFONTMANAGE@1@@Z)" は未解決です。 1>DxLib.lib(DxFont.obj) : error LNK2001: 外部シンボル ""int __cdecl DxLib::CreateFontToHandle_PF(struct DxLib::FONTMANAGE *,int)" (?CreateFontToHandle_PF@DxLib@@YAHPAUFONTMANAGE@1@H@Z)" は未解決です。 1>DxLib.lib(DxFont.obj) : error LNK2001: 外部シンボル ""int __cdecl DxLib::FontCacheCharAddToHandle_Timing1_PF(struct DxLib::FONTMANAGE *,struct DxLib::FONTDATA *,char const *,int)" (?FontCacheCharAddToHandle_Timing1_PF@DxLib@@YAHPAUFONTMANAGE@1@PAUFONTDATA@1@PBDH@Z)" は未解決です。 1>DxLib.lib(DxFont.obj) : error LNK2001: 外部シンボル ""int __cdecl DxLib::FontCacheCharAddToHandle_Timing0_PF(struct DxLib::FONTMANAGE *)" (?FontCacheCharAddToHandle_Timing0_PF@DxLib@@YAHPAUFONTMANAGE@1@@Z)" は未解決です。 >.xモデルが黒い件 >こちらの不具合は Windows7 の Radeon HD 4600 でも発生するのでしょうか? この症状も【正常に動作】リストでは問題がでていません。 【不具合有り】リストでは見た目はまったく同じ黒くなる現象がでます。 >に送っていただけないでしょうか? m(_ _;m はい、一つ前のVer.で画像が撮れたので送ります。
メンテ
Re: DirectX 9、又はDirectX 11 ( No.14 )
名前:管理人 日時:2015/02/23 01:44

すみません、Visual C++ 用のみリンクが失敗する状態になってしまっていました 修正しましたので、何度もお手数で申し訳ありませんが、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) > >.xモデルが黒い件 > >こちらの不具合は Windows7 の Radeon HD 4600 でも発生するのでしょうか? > この症状も【正常に動作】リストでは問題がでていません。 > 【不具合有り】リストでは見た目はまったく同じ黒くなる現象がでます。 ご返答ありがとうございます 正常に動作する環境では問題ないのですね・・・ > >に送っていただけないでしょうか? m(_ _;m > はい、一つ前のVer.で画像が撮れたので送ります。 ありがとうございます、よろしくお願いします
メンテ
Re: DirectX 9、又はDirectX 11 ( No.15 )
名前:さと 日時:2015/02/23 20:18

こんにちは。 2月23日の暫定最新版で Windows7(64), Celeron 1037U, Intel HD Graphics のDrawLineが正しく直りました。 お手数おかけいたしました。 元々±1ドットの単位で描画位置に誤差があると把握してたのですが Ver.違いでの互換性が難しいものなのですね。 それから、2月23日の暫定最新版でも Windows7(64), Celeron 1037U, Intel HD Graphicsでは xファイルモデルがなぜか黒くなる現象を確認しました。 Windows7(32), i5-670, Radeon HD 4600では DrawLine、xファイルモデルは正常に描画されています。 念のため、上記の正常なパソコンのログを報告しておきます。 dxdiagでは、DirectX バージョン: DirectX 11になっていした。 0:システムの情報を出力します 10: DXライブラリ Ver3.13e 40: 論理プロセッサの数 : 4 70: OS Windows7 ( Build 7601 Service Pack 1 ) 227: 現時点のCPU動作速度:大体3.20GHz 251: MMX命令を使用します 268: SSE命令が使用可能です 282: SSE2命令が使用可能です 301: CPUベンダ:GenuineIntel 369: CPU名:Intel(R) Core(TM) i5 CPU 670 @ 3.47GHz 378:COMの初期化... 成功しました 401:メモリ総量:3575.29MB 空きメモリ領域:2095.49MB 404:タイマーの精度を検査します 413:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 416: パフォーマンスカウンターを使用します タイマー精度 : 3376.835000 KHz 422: ソフトの二重起動検査... 二重起動はされていませんでした 435:ウインドウクラスを登録します... 登録に成功しました 448:ウインドウモード起動用のウインドウを作成します 487:ウインドウの作成に成功しました 490:ウインドウを表示します 534:IMEを無効にしました 537:ウインドウスタイルをウインドウモード用に変更します... 完了 566:DirectInput関係初期化処理 569: XInput DLL の読み込み中... 成功 585: DirectInput7 の取得中... 成功 607: 引き続き初期化処理... 初期化成功 625: ジョイパッドの初期化... 648: ジョイパッドの初期化は正常に終了しました 652: マウスデバイスの初期化... 初期化成功 665: キーボードデバイスの初期化... 初期化成功 674:DirectInput 関連の初期化は正常に終了しました 682:DirectSound の初期化を行います 686:DirectSound インターフェースの取得を行います.... 成功 697:引き続きインターフェースの初期化処理... 成功 876: DirectSound デバイスを列挙します 883: モジュール名: ドライバ記述:プライマリ サウンド ドライバー 889: モジュール名:{0.0.0.00000000}.{a6841f2b-72f2-41da-89f4-a2cf8fe2d5db} ドライバ記述:スピーカー (Realtek High Definition Audio) 899: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz 903: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 912: 利用可能サンプリング精度 916: プライマリ 16bit = OK 8bit = OK 920: セカンダリ 16bit = OK 8bit = OK 925: 利用可能チャンネル 932: プライマリ MONO = OK STEREO = OK 936: セカンダリ MONO = OK STEREO = OK 945:DirectSound の初期化は正常に終了しました 950:d3d11.dll の読み込み.... 成功 964:dxgi.dll の読み込み.... 成功 970:API CreateDXGIFactory のアドレスを取得します.... 成功 982:IDXGIFactory を作成します.... 成功 998:API D3D11CreateDevice のアドレスを取得します.... 成功 1010:IDXGIAdapter を取得します.... 成功 1018:Direct3D 11 FeatureLevel 11_0 以上を対象とします 1023:ID3D11Device オブジェクトを取得します.... 失敗 1030:DirectDraw オブジェクトの取得を行います.... 成功 1049:引き続き初期化処理... 初期化に成功しました 1084:IDirect3D9Ex オブジェクトを取得します.... 成功 1100:IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します 1380:成功 1386:Driver:aticfx32.dll Description:ATI Radeon HD 4600 Series 1390:画面のフォーマットは D3DFMT_X8R8G8B8 です 1393:16bit Zバッファフォーマットは D3DFMT_D16 です 1397:24bit Zバッファフォーマットは D3DFMT_D24X8 です 1400:32bit Zバッファフォーマットは D3DFMT_D24X8 です 1404:16bit カラーフォーマットは D3DFMT_R5G6B5 です 1412:32bit カラーフォーマットは D3DFMT_X8R8G8B8 です 1415:アルファ付き 16bit カラーフォーマットは D3DFMT_A4R4G4B4 です 1419:アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 1424:アルファテスト用 16bit カラーフォーマットは D3DFMT_A1R5G5B5 です 1431:アルファテスト用 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 1434:DXT1テクスチャフォーマットはD3DFMT_DXT1 です 1437:DXT2テクスチャフォーマットはD3DFMT_DXT2 です 1445:DXT3テクスチャフォーマットはD3DFMT_DXT3 です 1449:DXT4テクスチャフォーマットはD3DFMT_DXT4 です 1453:DXT5テクスチャフォーマットはD3DFMT_DXT5 です 1456:描画用 16bit カラーフォーマットは D3DFMT_R5G5B5 です 1464:描画用 32bit カラーフォーマットは D3DFMT_X8R8G8B8 です 1467:描画用アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 1470:描画用ABGR整数16ビット型カラーフォーマットは D3DFMT_A16B16G16R16 です 1476:描画用ABGR浮動小数点16ビット型カラーフォーマットは D3DFMT_A16B16G16R16F です 1481:描画用ABGR浮動小数点32ビット型カラーフォーマットは D3DFMT_A32B32G32R32F です 1485:描画用1チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8R8G8B8 です 1492:描画用1チャンネル整数16ビット型カラーフォーマットは D3DFMT_L16 です 1499:描画用1チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_R16F です 1502:描画用1チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_R32F です 1510:描画用2チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8B8G8R8 です 1514:描画用2チャンネル整数16ビット型カラーフォーマットは D3DFMT_G16R16 です 1517:描画用2チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_G16R16F です 1520:描画用2チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_G32R32F です 1524:一度に描画できるプリミティブの最大数:5592405 1529:対応している最大頂点インデックス:16777215 1533:同時にレンダリングできるバッファの数:4 1536:最大テクスチャサイズ 幅:8192 高さ:8192 1540:テクスチャステージテンポラリレジスタ:使用可 1544:減算合成のハードウェア対応:ネイティブ 1548:ハードウェア頂点シェーダーバージョンコード:300 1551:エミュレーション頂点シェーダーバージョンコード:エミュレーション無し 1556:ピクセルシェーダーバージョンコード:300 1624:バックバッファロック転送の時間:15611nsec 一時的な描画可能バッファを使用した転送の時間:1839nsec 1631:バックバッファロックを使用しません 1634:Zバッファを作成します.... 成功 1797:プログラマブルシェーダーを使用します 1906:フォントの初期化を行います 1910:フォントの初期化は正常に終了しました 1913:文字コードバッファの初期化を行います... 完了しました 3639:ウインドウを閉じようとしています 3663:ウインドウが破棄されようとしています 3669:ソフトを終了する準備が整いました 3690:フォントの初期化を行います 3693:フォントの初期化は正常に終了しました 3699:Direct3DDevice9 の解放 2 3711:d3d9.dll の解放 1 3715:DirectInput 関連の終了処理... 完了 3758:DirectSound の終了処理は正常に終了しました 3796: 3800:Alloc memory dump 3803: Total size:0(0.000kb) Alloc num:0 3811:
メンテ
Re: DirectX 9、又はDirectX 11 ( No.16 )
名前:さと 日時:2015/02/23 20:41

もしかしたら、参考になると思われることに気がつきました。 この.x形式で表示しているモデルをY軸回転させると、黒い影の位置が変わります。 もしかするとライティング? と思ったので、報告しておきます。 SetUseLighting( TRUE); にしています。 ですが、SetLightDirection設定は呼んでいません。 デフォルトのまま使用しています。 MV1SetUseZBufferと、MV1SetWriteZBufferで描画モデルのハンドルを設定しています。 意味が無いかもしれませんが、モデル描画ルーチン先頭で、SetUseZBuffer3DをTRUEにしてます。 アンビエント、スペキュラ、ディフューズ設定は何も使っていません。 ※但し、pmd, pmx形式には使っています。(mqoは使用せず)
メンテ
Re: DirectX 9、又はDirectX 11 ( No.17 )
名前:管理人 日時:2015/02/24 03:47

画像とモデルファイルを送っていただきありがとうございます 送っていただいた xファイルで手元の環境でもモデルの一部が黒くなってしまう現象が再現しました 原因はマテリアルのスペキュラの Power( DxLibModelViewer.exeでの表現は「強さ」)が 0.0f になっていると、 Direct3D 11 ではスペキュラの計算が正しく行われなくなり、本件の黒くなってしまう現象が発生する というものでした とりあえず Power が 0.0f のときは 0.00000001f など、限りなく 0.0f に近く且つ 0.0f ではない値に 置き換えることで黒くなる現象を抑えることができましたので、よろしければお試しになってみてください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) WinXP の Radeon HD 5700 と、Win7 の Radeon HD 4600 で共に正常に描画が行われたのは、 どちらのケースも Direct3D 9 による描画が行われていたためです ( 因みに、何故か Direct3D 9 では Power が 0.0f でも問題なく正常に描画されます orz ) 「WinXP Radeon HD 5700」→ Radeon HD 5700 は Direct3D 11 FEATURE_LEVEL_11_0 に対応しているけれど、WinXP が使用できるのは Direct3D 9 まで 「Win7 Radeon HD 4600」→ Radeon HD 4600 は Direct3D 11 FEATURE_LEVEL_11_0 に対応していないので Direct3D 9 が使用される  ( FEATURE_LEVEL_11_0 より対応機能レベルが低い場合は正常に描画されないケースが多いので、FEATURE_LEVEL_11_0 以上に  対応していない場合は Direct3D 9 を使用するようにしています ) > 尚、以下のようなコードを組んで、仮想画面で保存すると > なぜかHD Graphicsでは背景まで白くなります。 すみません、Direct3D 11 版では MakeScreen の第三引数が FALSE でもアルファチャンネル付きの 画像を作成してしまうようになっていたのが原因です( なので、pngファイルの背景は白くなっているのではなくて、 透明になっている状態です ) こちらも上記のバージョンで修正してありますので、よろしければご確認ください m(_ _;m > Windows7(32), i5-670, Radeon HD 4600では > DrawLine、xファイルモデルは正常に描画されています。 >  > 念のため、上記の正常なパソコンのログを報告しておきます。 > dxdiagでは、DirectX バージョン: DirectX 11になっていした。 PCに Direct3D 11 はインストールされていますが、Radeon HD 4600 は Direct3D 11 FEATURE_LEVEL_11_0 に対応していないので、Direct3D 9 を使用して描画したため 正常な描画結果になっていた、というわけです あと、本件は MV1SetUseZBuffer や MV1SetWriteZBuffer などの設定は特に関係はありませんでした ご情報ありがとうございます m(_ _)m
メンテ
Re: DirectX 9、又はDirectX 11 ( No.18 )
名前:さと 日時:2015/02/24 18:50

こんばんは、条件が難しい対応ありがとうございました。 >よろしければお試しになってみてください m(_ _;m はい、xファイルモデルが黒くなる現象も、DrawLineがくっついてしまう現象も出なくなりました。 >Direct3D 11 版では MakeScreen の第三引数が FALSE でもアルファチャンネル 検証プログラムで気がついた不具合の修正もありがとうございました。 上記はもう問題ないのですが、printfDxが表示されない不具合が出ています。 これもRadeon HD 4600で表示して、Intel HD Graphicsで表示しない状態です。 1月22日の暫定最新版まで戻すと、どちらにも問題がでませんでした。
メンテ
Re: DirectX 9、又はDirectX 11 ( No.19 )
名前:さと 日時:2015/02/24 18:56

それから、こういう現象も見つけました。 Radeon HD 4600では問題がなくて、Intel HD Graphicsでタスクに入れるとすごく重い? というもので 以下のソースで判るのですが #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int StartTime; // 1秒計測用 int FrameCounter = 0; // フレームカウンター // グラフィックハンドルの宣言 int GrSample; // 画像ハンドル ChangeWindowMode( TRUE); // ウィンドウモードにする SetAlwaysRunFlag( TRUE); // バックグラウンド処理 if( DxLib_Init() == -1) { // DXライブラリの初期化 return -1; // エラーが起きたら直ちに終了 } // 画像ファイルの読み込み GrSample = LoadGraph( "sample.bmp"); // 画像ファイル SetDrawScreen( DX_SCREEN_BACK); // 裏画面の書き込み許可 StartTime = GetNowCount(); // 現在の時間 // 現在の時間(開始) printfDx( "Time: %08d\n\n", StartTime); // ループ ※ESCキーを押すと終了する while( CheckHitKey( KEY_INPUT_ESCAPE) == 0) { if( ProcessMessage() == -1) { // プロセスメッセージのチェック break; } // 画面初期化 ClearDrawScreen(); // R0G0B0(黒)で塗りつぶし // 画像の表示 DrawGraph( 0, 0, GrSample, FALSE); // 画像の描画 ScreenFlip(); // スクリーンフリップ(裏画面) FrameCounter++; // フレームカウンター // 1秒経過 ※マイナス値の対策付き if( abs( GetNowCount() - StartTime) >= 1000) { // 画面へ表示 printfDx( "Time: %08d-%08d (%dFPS)\n", StartTime, GetNowCount(), FrameCounter); // フレームカウンタークリア FrameCounter = 0; StartTime = GetNowCount(); // 現在の時間 } } DxLib_End(); // DXライブラリの終了処理 return 0; // 正常終了 } Intel HD Graphicsなどで(おそらく今回の不具合リスト全部?) アプリをタスクに入れると、Windowsのプロセス負荷が100%近くになります。 フレームカウンターを見ると、1000FPS超えとなったりするので、垂直同期がうまくいかないのかもしれません。 これも例によってRadeon HD 4600では問題がでません。 1月22日の暫定最新版まで戻すと、どちらにも問題がでませんでした。
メンテ
Re: DirectX 9、又はDirectX 11 ( No.20 )
名前:管理人 日時:2015/02/24 23:20

バグのご報告ありがとうございます というより、バグチェックをして頂いている形になってしまって申し訳ありません Direct3D 11 を使用した際に printfDx を使用しても何も表示されないバグと タスクに入れると垂直同期が行われなくなるバグを修正しましたので、 よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: DirectX 9、又はDirectX 11 ( No.21 )
名前:さと 日時:2015/02/25 21:42

こんばんは、すばやい修正ありがとうございます。 まったく不具合がなくなりました! わーい >バグチェックをして頂いている形になってしまって申し訳ありません いえいえ、大丈夫です。 しばらく、この2月24日(改定)版で動作させてみています。 ありがとうございました。
メンテ
Re: DirectX 9、又はDirectX 11 ( No.22 )
名前:さと(解決) 日時:2015/02/26 00:46

不具合があったパソコンでも正常確認できました。 Windows7(64), Celeron 1037U, Intel HD Graphics Windows7(64), i7-2600, Radeon HD7750 Windows8, i5-3470, GeForce GTX660 ぺこ <(_ _)>
メンテ
Re: DirectX 9、又はDirectX 11 ( No.23 )
名前:管理人 日時:2015/02/26 02:04

正常に動作した様で何よりです 色々な環境でのご確認もしていただきありがとうございます また何かありましたらご指摘ください m(・・;m
メンテ

Page: 1 | 2 |

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

   クッキー保存