トップページ > 記事閲覧
DX_DIRECT3D_9EX設定時のDrawPolygon2DToShader後のDrawGraphについて
名前:BI201 日時: 2024/01/31 12:08

お世話になります。 DX_DIRECT3D_9EX設定において、DrawPolygon2DToShaderの呼び出し後にDrawGraphといった描画関数を呼んだ際の動作についてご教授お願いします。 トピックス名「DrawPolygon2DToShader の描画順について」にて、 DrawGraph で描画したものが DrawPolygon2DToShader で描画したものより上に表示されるとあるのですが、 SetUseDirect3DVersion(DX_DIRECT3D_9EX);でも同様の動作となりますでしょうか? [プログラム例] // シェーダーを使用した2Dの2ポリゴンの描画 DrawPolygon2DToShader( Vert, 2 ) ; // test.bmpの読み込み int GHandle = LoadGraph( L"test.bmp" ) ; //読み込んだグラフィックハンドルを描画 DrawGraph( 100, 100, GHandle , FALSE ) ; 上記を実行したところ、DrawPolygon2DToShaderで描画した画像の上に、LoadGraphで読みだした画像の大きさの白色が表示されます。 (test.bmpの画像が上に表示されません) DrawPolygon2DToShaderをコメントアウトすると、上記位置にtest.bmpの画像が問題なく表示されます。 シェーダーによる描画とDrawGraphといった描画関数両方を呼び出す際に必要な設定等ありますでしょうか? DXライブラリは最新のVer3.24dを使用しています。
メンテ

Page: 1 |

Re: DX_DIRECT3D_9EX設定時のDrawPolygon2DToShader後のDrawGraphについて ( No.1 )
名前:管理人 日時:2024/01/31 21:25

> シェーダーによる描画とDrawGraphといった描画関数両方を呼び出す際に必要な設定等ありますでしょうか? いえ、特にそのような設定などはありません 私も手元で以下のようなテストプログラムを実行してみたのですが、 DrawPolygon2DToShader の後の DrawGraph の画像も問題なく描画されました #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // ウィンドウモードで起動 ChangeWindowMode( TRUE ) ; // Direct3D 9 Ex を使用するように設定 SetUseDirect3DVersion( DX_DIRECT3D_9EX ) ; // DXライブラリを初期化 if( DxLib_Init() == -1 ) { return -1 ; } // 画像の読み込み int Texture = LoadGraph( "右渦巻き.bmp" ); int PSHandle = LoadPixelShader( "SamplePS.pso" ) ; int GrHandle = LoadGraph( "Test1.bmp" ) ; // 描画先を裏画面に変更 SetDrawScreen( DX_SCREEN_BACK ) ; VERTEX2DSHADER Vert[ 6 ] ; SetUseTextureToShader( 0, Texture ) ; SetUsePixelShader( PSHandle) ; float vw = 640.0f; float vh = 480.0f; float vz = 0.0f; Vert[ 0 ].pos = VGet( 0.0f - 0.5f, 0.0f - 0.5f, vz ) ; Vert[ 0 ].rhw = 1.0f ; Vert[ 0 ].dif = GetColorU8( 255,255,255,128 ) ; Vert[ 0 ].spc = GetColorU8( 0, 0, 0, 0 ) ; Vert[ 0 ].u = 0.0f ; Vert[ 0 ].v = 0.0f ; Vert[ 0 ].su = 0.0f ; Vert[ 0 ].sv = 0.0f ; Vert[ 1 ].pos = VGet( vw - 0.5f, 0.0f - 0.5f, vz) ; Vert[ 1 ].rhw = 1.0f ; Vert[ 1 ].dif = GetColorU8( 255,255,255,128 ) ; Vert[ 1 ].spc = GetColorU8( 0, 0, 0, 0 ) ; Vert[ 1 ].u = 1.0f ; Vert[ 1 ].v = 0.0f ; Vert[ 1 ].su = 1.0f ; Vert[ 1 ].sv = 0.0f ; Vert[ 2 ].pos = VGet( 0.0f - 0.5f, vh - 0.5f, vz ) ; Vert[ 2 ].rhw = 1.0f ; Vert[ 2 ].dif = GetColorU8( 255,255,255,128 ) ; Vert[ 2 ].spc = GetColorU8( 0, 0, 0, 0 ) ; Vert[ 2 ].u = 0.0f ; Vert[ 2 ].v = 1.0f ; Vert[ 2 ].su = 0.0f ; Vert[ 2 ].sv = 1.0f ; Vert[ 3 ].pos = VGet( vw - 0.5f, vh - 0.5f, vz ) ; Vert[ 3 ].rhw = 1.0f ; Vert[ 3 ].dif = GetColorU8( 255,255,255,128 ) ; Vert[ 3 ].spc = GetColorU8( 0, 0, 0, 0 ) ; Vert[ 3 ].u = 1.0f ; Vert[ 3 ].v = 1.0f ; Vert[ 3 ].su = 1.0f ; Vert[ 3 ].sv = 1.0f ; Vert[ 4 ] = Vert[ 2 ]; Vert[ 5 ] = Vert[ 1 ]; // シェーダーでポリゴンを描画 DrawPolygon2DToShader( Vert, 2 ) ; // 画像を描画 DrawGraph( 0, 0, GrHandle, TRUE ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; // キー入力待ち WaitKey() ; // DXライブラリ使用の終了処理 DxLib_End() ; // ソフトの終了 return 0 ; } こちらに私がテストに使用したプログラムをコンパイルした実行ファイルなどを 纏めてアップしましたので、よろしければ BI201さんの環境でも問題なく画像が 描画されるか試してみていただけないでしょうか? m(_ _)m https://dxlib.xsrv.jp/temp/DrawPolygon2DToShaderTest.zip ( 問題なく描画された場合は DrawPolygon2DToShader で描画された 右渦巻き.bmp の 上に Test1.bmp が描画されます )
メンテ
Re: DX_DIRECT3D_9EX設定時のDrawPolygon2DToShader後のDrawGraphについて ( No.2 )
名前:BI201(解決済み) 日時:2024/01/31 23:32

お忙しい中、早速のご対応ありがとうございます!! 頂いたファイルを実行したところ問題なく動作することが出来ました。 また、対応方法が合っているかまだ理解出来ていないのですが、 異なった処理をしている箇所を確認していったところ 1)SetPSConstSF等で定数0〜23番にセット 2)DrawPolygon2DToShader 3)DrawGraph に対して、 1)SetPSConstSF等で定数0〜23番にセット 2)DrawPolygon2DToShader 3)ResetPSConstF(0,23)でセットした定数を無効化 4)DrawGraph とすることで動作することを確認出来ました。
メンテ
Re: DX_DIRECT3D_9EX設定時のDrawPolygon2DToShader後のDrawGraphについて ( No.3 )
名前:管理人(解決済み) 日時:2024/02/02 03:34

問題が解決したようで何よりです > 3)ResetPSConstF(0,23)でセットした定数を無効化 すみません、リファレンスには注釈として 『この関数で値を設定した後、DXライブラリ側で設定する定数が必要になった場合は ResetPSConstF 関数で設定した値を無効にする必要がありますので注意してください。』 という表現になっていましたが、現在は DrawGraph などの通常の描画関数も シェーダーを使用して描画を行っているので、DrawGraph などの描画関数を使用する前には ResetPSConstF を使用してセットした定数を無効化する必要があるのでした… というわけで注意表記を変更しておきました m(_ _;m
メンテ

Page: 1 |

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

   クッキー保存