При обновлении моего .fx файла до .hlsl, он компилируется правильно, но в результате шейдер не работает в игре.
Основная идея шейдера - захватить любой пиксель, который не соответствует цвет фона и установите для этой области текстуры другой цвет, что приведет к эффекту «вырезания».
Намеченный эффект (D3D9) Здесь
Результат (D3D11) Здесь
Код шейдера HLSL:
Texture2D<float4> bkd : register(t1);
sampler bkdSampler : register(s1);
Texture2D<float4> img : register(t2);
sampler imgSampler : register(s2);
cbuffer PS_VARIABLES : register(b0)
{
float ox;
float oy;
float xcoeff;
float ycoeff;
float4 RGB;
float4 SRGB;
int ORGB;
}
float4 ps_main(in float2 In : TEXCOORD0) : SV_TARGET {
float2 txcol;
float4 bkcol = bkd.Sample(bkdSampler,In);
txcol.x = In.x+(abs(ox)*xcoeff);
txcol.y = In.y+(abs(oy)*ycoeff);
float4 imcol = img.Sample(imgSampler,txcol);
if (any(bkcol.rgb != RGB.rgb)) {
if (ORGB != 1) {
imcol.r = SRGB.r;
imcol.g = SRGB.g;
imcol.b = SRGB.b;
} else {
imcol.r*=0.09;
imcol.g*=0.06;
imcol.b*=1.1;
}
}
return imcol;
}