Direct3D Shader -Parameter dynamisch übergeben
-
27-10-2019 - |
Frage
Ich möchte meine Helligkeit und meinen Kontrast Shader ändern, indem ich dynamisch Offset -Parameter ändern kann, aber ich möchte meinen Shader nicht jedes Mal neu kompilieren, wenn ich den Shader -Puffer ändere.
Der aktuelle Shader -Code ist
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(); \
} \
} \
";
Wie ich das passieren kann offsetBrightness
und offsetContrast
dynamisch?
Lösung
In HLSL können alle Außenfunktionen zwischen jedem Ziehaufruf geändert werden.
Um ihren Wert zu ändern, können Sie den folgenden Setter von ID3DXEffect verwenden:
HRESULT SetFloat(
[in] D3DXHANDLE hParameter,
[in] FLOAT f
);
wobei HParameter entweder der Name als char * oder der Handlungsgriff sein kann, das verwendet wird GetParameterHandle()
Also in deinem Beispiel:
Effet-> Setfloat ("Offsetbrightness", 0,5F);
Wenn Sie sich in einem befinden Begin()/End()
, Sie müssen anrufen CommitChanges()
diese Werte anwenden