Обновление шейдера с D3D9 до D3D11 ломает его. [Clickteam Fusion] - PullRequest
0 голосов
/ 01 мая 2020

При обновлении моего .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;

 }
...