2012-01-13 99 views
1

我想通過動態更改偏移參數來改變亮度和對比度着色器的變化,但是我不想在每次更改着色器緩衝區時重新編譯我的着色器。動態傳遞direct3d着色器參數

當前的shader代碼是

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

如何傳遞的offsetBrightnessoffsetContrast動態?

+0

你需要制服。我不知道DirectX,所以我不能告訴你如何使用它們,請閱讀文檔。 – 2012-01-13 08:36:13

回答

2

在HLSL中,可以在每次繪製調用之間更改在函數外部聲明的所有變量。

改變自己的價值,你可以使用下面的二傳手從ID3DXEffect:

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

其中hParameter可以是名稱爲char *或查詢的使用GetParameterHandle()

所以,在你的榜樣手柄:

effet-> SetFloat(「offsetBrightness」,0.5f);

如果你是一個Begin()/End()裏面,你需要調用CommitChanges()應用這些值