/* { "CATEGORIES" : [ "Color Effect", "Feedback", "Film" ], "DESCRIPTION" : "Bright objects burn in and optionally decay", "ISFVSN" : "2", "INPUTS" : [ { "NAME" : "inputImage", "TYPE" : "image" }, { "NAME" : "absorptionRate", "TYPE" : "float", "MAX" : 1, "DEFAULT" : 0.5, "MIN" : -1, "LABEL" : "Absorption Rate" }, { "NAME" : "dischargeRate", "TYPE" : "float", "MAX" : 1, "DEFAULT" : 0.25, "MIN" : 0, "LABEL" : "Discharge Rate" } ], "PASSES" : [ { "TARGET" : "feedbackBuffer", "PERSISTENT" : true, "FLOAT" : true }, { } ], "CREDIT" : "VIDVOX" } */ void main() { vec4 freshPixel = IMG_PIXEL(inputImage,gl_FragCoord.xy); vec4 stalePixel = IMG_PIXEL(feedbackBuffer,gl_FragCoord.xy); vec4 resultPixel = vec4(0.0); // absorb and discharge if (PASSINDEX==0) { // start with the old pixel amount resultPixel = stalePixel; // discharge from previous pass resultPixel *= (1.0 - dischargeRate); // add this pass resultPixel += (freshPixel * absorptionRate); resultPixel = clamp(resultPixel,0.0,1.0); } // composite else if (PASSINDEX==1) { resultPixel = freshPixel + stalePixel; } gl_FragColor = resultPixel; }