pjs/gfx/layers/d3d9/LayerManagerD3D9Shaders.hlsl

68 строки
1.5 KiB
HLSL

float4x4 mLayerQuadTransform;
float4x4 mLayerTransform;
float4 vRenderTargetOffset;
float4x4 mProjection;
texture tex0;
sampler s2D;
sampler s2DY;
sampler s2DCb;
sampler s2DCr;
float fLayerOpacity;
float4 fLayerColor;
struct VS_INPUT {
float4 vPosition : POSITION;
};
struct VS_OUTPUT {
float4 vPosition : POSITION;
float2 vTexCoords : TEXCOORD0;
};
VS_OUTPUT LayerQuadVS(const VS_INPUT aVertex)
{
VS_OUTPUT outp;
outp.vPosition = aVertex.vPosition;
outp.vPosition = mul(mLayerQuadTransform, outp.vPosition);
outp.vPosition = mul(mLayerTransform, outp.vPosition);
outp.vPosition = outp.vPosition - vRenderTargetOffset;
// adjust our vertices to match d3d9's pixel coordinate system
// which has pixel centers at integer locations
outp.vPosition.xy -= 0.5;
outp.vPosition = mul(mProjection, outp.vPosition);
outp.vTexCoords = aVertex.vPosition.xy;
return outp;
}
float4 RGBShader(const VS_OUTPUT aVertex) : COLOR
{
return tex2D(s2D, aVertex.vTexCoords) * fLayerOpacity;
}
float4 YCbCrShader(const VS_OUTPUT aVertex) : COLOR
{
float4 yuv;
float4 color;
yuv.r = tex2D(s2DCr, aVertex.vTexCoords).r - 0.5;
yuv.g = tex2D(s2DY, aVertex.vTexCoords).r - 0.0625;
yuv.b = tex2D(s2DCb, aVertex.vTexCoords).r - 0.5;
color.r = yuv.g * 1.164 + yuv.r * 1.596;
color.g = yuv.g * 1.164 - 0.813 * yuv.r - 0.391 * yuv.b;
color.b = yuv.g * 1.164 + yuv.b * 2.018;
color.a = 1.0f;
return color * fLayerOpacity;
}
float4 SolidColorShader(const VS_OUTPUT aVertex) : COLOR
{
return fLayerColor;
}