2012-01-13 11 views
1

シェーダのバッファを変更するたびにシェーダを再コンパイルしたくないのですが、direct3dシェーダのパラメータを動的に渡します

現在のシェーダコードは、私が動的にoffsetBrightnessoffsetContrastを渡すことができますどのように

char shaderCode[] = " \ 
sampler2D screen: register(s0); \ 
\ 
float offsetBrightness = 0.0f; \ 
float offsetContrast = 0.9f; \ 
float4 PSBrightnessContrast(float2 inCoord : TEXCOORD0) : COLOR0\ 
{\ 
    return (tex2D(screen, inCoord.xy) + offsetBrightness) * (1.0 + offsetContrast);\ 
}\ 
\ 
technique brightness \ 
{ \ 
    pass p1 \ 
    { \ 
     PixelShader = compile ps_2_0 PSBrightnessContrast(); \ 
    } \ 
} \ 
"; 

のですか?

+0

を適用するCommitChanges()を呼び出す必要があります。私はDirectXを知らないので、それらを正確に使用する方法を伝えることはできません。 –

答えて

2

HLSLでは、関数の外で宣言されたすべての変数を各描画呼び出しの間で変更できます。あなたはID3DXEffectから、次のセッターを使用することができ、その値を変更するには

:hParameterはcharとして名*またはハンドルのいずれかがあなたの例ではそうGetParameterHandle()

を使用して照会することができ

HRESULT SetFloat( [in] D3DXHANDLE hParameter, [in] FLOAT f );

effet-> SetFloat( "offsetBrightness"、0.5f);

あなたがBegin()/End()内にある場合、あなたはあなたが制服を必要とし、それらの値

関連する問題