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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top