Pregunta

Quiero hacer que mi brillo y contraste cambien el sombreador cambiando dinámicamente los parámetros de compensación, pero no quiero recompilar mi sombreador cada vez que estoy cambiando el búfer de sombreador.

El código del sombreador actual es

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

Cómo puedo pasar el offsetBrightness y offsetContrast ¿dinamicamente?

¿Fue útil?

Solución

En HLSL, todas las variables declaradas la función exterior se pueden cambiar entre cada llamada de sorteo.

Para cambiar su valor, puede usar el siguiente setter de id3dxeffect:

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

donde el hparámetro puede ser el nombre como char * o el mango consultado usando GetParameterHandle()

Entonces en tu ejemplo:

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

Si estás dentro de un Begin()/End(), necesitas llamar CommitChanges()Para aplicar esos valores

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top