// identity float time=0; float sampleDist = 1.0f/512.0f; // distance one pixel in u/v sampler2D image : register(s0); // Color-space conversion functions // from FX Composer #if 1 #define QUAD_REAL half #define QUAD_REAL2 half2 #define QUAD_REAL3 half3 #define QUAD_REAL4 half4 #else #define QUAD_REAL float #define QUAD_REAL2 float2 #define QUAD_REAL3 float3 #define QUAD_REAL4 float4 #endif QUAD_REAL min_channel(QUAD_REAL3 v) { QUAD_REAL t = (v.xv.y) ? v.x : v.y; t = (t>v.z) ? t : v.z; return t; } QUAD_REAL3 rgb_to_hsv(QUAD_REAL3 RGB) { QUAD_REAL3 HSV = (0.0).xxx; QUAD_REAL minVal = min_channel(RGB); QUAD_REAL maxVal = max_channel(RGB); QUAD_REAL delta = maxVal - minVal; //Delta RGB value HSV.z = maxVal; if (delta != 0) { // If gray, leave H & S at zero HSV.y = delta / maxVal; QUAD_REAL3 delRGB; delRGB = ( ( ( maxVal.xxx - RGB ) / 6 ) + ( delta / 2 ) ) / delta; if ( RGB.x == maxVal ) HSV.x = delRGB.z - delRGB.y; else if ( RGB.y == maxVal ) HSV.x = ( 1 / 3 ) + delRGB.x - delRGB.z; else if ( RGB.z == maxVal ) HSV.x = ( 2 / 3 ) + delRGB.y - delRGB.x; if ( HSV.x < 0 ) { HSV.x += 1; } if ( HSV.x > 1 ) { HSV.x -= 1; } } return (HSV); } QUAD_REAL3 hsv_to_rgb(QUAD_REAL3 HSV) { QUAD_REAL3 RGB = HSV.z; if ( HSV.y != 0 ) { QUAD_REAL var_h = HSV.x * 6; QUAD_REAL var_i = floor(var_h); //Or ... var_i = floor( var_h ) QUAD_REAL var_1 = HSV.z * (1 - HSV.y); QUAD_REAL var_2 = HSV.z * (1 - HSV.y * (var_h-var_i)); QUAD_REAL var_3 = HSV.z * (1 - HSV.y * (1-(var_h-var_i))); if (var_i == 0) { RGB = QUAD_REAL3(HSV.z, var_3, var_1); } else if (var_i == 1) { RGB = QUAD_REAL3(var_2, HSV.z, var_1); } else if (var_i == 2) { RGB = QUAD_REAL3(var_1, HSV.z, var_3); } else if (var_i == 3) { RGB = QUAD_REAL3(var_1, var_2, HSV.z); } else if (var_i == 4) { RGB = QUAD_REAL3(var_3, var_1, HSV.z); } else { RGB = QUAD_REAL3(HSV.z, var_1, var_2); } } return (RGB); } float4 main( float4 Pos : POSITION, float2 texCoord: TEXCOORD0) : COLOR { QUAD_REAL4 img = tex2D(image, texCoord); // convert to gray QUAD_REAL4 sum = QUAD_REAL4(rgb_to_hsv(img),img.a); sum.g=1; // fully saturate sum.r+=time*0.5; //float quant=9; //sum.r = floor(sum.r*quant+0.5)/quant; if (sum.r>1.0) sum.r-=1.0; sum = QUAD_REAL4(hsv_to_rgb(sum),img.a); //sum.a=img.a; // keep alpha return sum; //return lerp(img,sum,time); }