ColorKey_RGB.pShader 1.6 KB
/********************************************************************************
 Copyright (C) 2012 Hugh Bailey <obs.jim@gmail.com>

 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
********************************************************************************/


uniform Texture2D diffuseTexture;
uniform float4 outputColor;
uniform float4 colorKey;
uniform float  similarity;
uniform float  blend;
uniform float  gamma = 1.0;

SamplerState textureSampler
{
    AddressU  = Clamp;
    AddressV  = Clamp;
    Filter    = Linear;
};

struct VertData
{
    float4 pos      : SV_Position;
    float2 texCoord : TexCoord0;
};

float4 main(VertData input) : SV_Target
{
    float4 rgbx = diffuseTexture.Sample(textureSampler, input.texCoord);

    rgbx = saturate(rgbx);
    float colorDiff = length(rgbx.rgb - colorKey.rgb);
    rgbx.a = saturate(max(colorDiff-similarity, 0.0)/blend);

    float4 outColor = rgbx * outputColor;
    outColor.rgb = pow(outColor.rgb, gamma);

    return outColor;
}