我想通过动态更改偏移参数来改变亮度和对比度着色器,但我不想在每次更改着色器缓冲区时重新编译着色器。
当前着色器代码为
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(); \
} \
} \
";
如何动态传递offsetBrightness
和offsetContrast
?
答案 0 :(得分:2)
在HLSL中,可以在每次绘制调用之间更改在函数外声明的所有变量。
要更改其值,您可以使用ID3DXEffect中的以下setter:
HRESULT SetFloat(
[in] D3DXHANDLE hParameter,
[in] FLOAT f
);
其中hParameter可以是char *的名称,也可以是使用GetParameterHandle()
查询的句柄
所以在你的例子中:
effet-> SetFloat(“offsetBrightness”,0.5f);
如果您在Begin()/End()
内,则需要致电CommitChanges()
以应用这些值