1

オフセット パラメータを動的に変更して明るさとコントラストのシェーダを変更したいのですが、シェーダ バッファを変更するたびにシェーダを再コンパイルしたくありません。

現在のシェーダーコードは

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(); \
    } \
} \
";

どうすればoffsetBrightnessand をoffsetContrast動的に渡すことができますか?

4

1 に答える 1

2

HLSL では、関数の外側で宣言されたすべての変数は、各描画呼び出し間で変更できます。

それらの値を変更するには、 ID3DXEffect から次のセッターを使用できます。

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

ここで、hParameter は char * としての名前か、またはGetParameterHandle()

あなたの例では:

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

内にいる場合は、それらの値を適用するBegin()/End()ために呼び出す必要がありますCommitChanges()

于 2012-01-14T07:37:18.927 に答える