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
|
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
|
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
|