DrawPrimitive2DToShaderを使用して、
640*480の画像を640*480の画面いっぱいに描画しようと思ったのですが、うまくいきません。
少し前のバージョンでは、問題なかったので3.07aでうまくいく方法が知りたいです。
/* ここからソース概要 */
int grhandle ;
int pshandle = LoadPixelShader( "/* しぇーだーふぁいる名 */.pso" ) ;
int OFF_SCREEN;
int screensofthandle = MakeARGB8ColorSoftImage( 640, 480 ) ;
// オフスクリーン作成
{
SetDrawValidGraphCreateFlag( TRUE );
OFF_SCREEN = MakeGraph( 640, 480 ) ;
SetDrawValidGraphCreateFlag( FALSE );
}
// 頂点データの準備
VERTEX2DSHADER Vert[6] ;
{
Vert[ 0 ].pos = VGet( 0.0f, 0.0f, 0.0f ) ;
Vert[ 1 ].pos = VGet( 1024.0f, 0.0f, 0.0f ) ;
Vert[ 2 ].pos = VGet( 0.0f, 512.0f, 0.0f ) ;
Vert[ 3 ].pos = VGet( 1024.0f, 512.0f, 0.0f ) ;
Vert[ 0 ].dif = GetColorU8( 255,255,255,255 ) ;
Vert[ 0 ].spc = GetColorU8( 0,0,0,0 ) ;
float aspect_u = 1.0f;
float aspect_v = 1.0f;
Vert[ 0 ].u = Vert[ 0 ].su = 0.0f * aspect_u ; Vert[ 0 ].v = Vert[ 0 ].sv = 0.0f * aspect_v ;
Vert[ 1 ].u = Vert[ 1 ].su = 1.0f * aspect_u ; Vert[ 1 ].v = Vert[ 1 ].sv = 0.0f * aspect_v ;
Vert[ 2 ].u = Vert[ 2 ].su = 0.0f * aspect_u ; Vert[ 2 ].v = Vert[ 2 ].sv = 1.0f * aspect_v ;
Vert[ 3 ].u = Vert[ 3 ].su = 1.0f * aspect_u ; Vert[ 3 ].v = Vert[ 3 ].sv = 1.0f * aspect_v ;
Vert[ 0 ].rhw = Vert[ 1 ].rhw = Vert[ 2 ].rhw = Vert[ 3 ].rhw = 1.0f ;
Vert[ 4 ] = Vert[ 2 ] ;
Vert[ 5 ] = Vert[ 1 ] ;
}
//==============================================
// ポストエフェクト描画
//==============================================
// 裏画面への描画結果をscreensofthandleに取得
GetDrawScreenSoftImage( 0, 0, 640, 480, screensofthandle ) ;
grhandle = CreateGraphFromSoftImage( screensofthandle ) ;
// 使用するテクスチャをセット
SetUseTextureToShader( 0, grhandle ) ;
// 使用するピクセルシェーダーをセット
SetUsePixelShader( pshandle ) ;
// 指定の名前を持つ定数が使用するシェーダー定数の番号を取得する
int cindex = GetConstIndexToShader( "TextureSize", pshandle );
FLOAT4 f4 = { 1024.f, 512.f, 1.f, 1.f };
int c = SetPSConstF(cindex, f4);
// 描画
DrawPrimitive2DToShader( Vert, 6, DX_PRIMTYPE_TRIANGLELIST ) ;
DeleteGraph( grhandle ) ;
これで描画結果は横幅が2倍になってしまい、画面左半分が二倍に引き伸ばされて描画されます。
よろしくお願いします。