/*
==========================================================================================
Cg Acceleration Research
Edgar Velázquez Armendáriz - edgar [at] graphics [dot] cornell [dot] edu
------------------------------------------------------------------------------------------
ageMain.cg
Fragment program to age the points and just copy the current imageID.
==========================================================================================
*/
/**
* fp40: # 17 instructions, 1 R-regs, 1 H-regs
*/
void ageMain(in half2 pos : WPOS,
uniform samplerRECT current : TEXUNIT0,
out half4 OUT : COLOR) {
// STATIC DATA
const static half INCREMENT = 1; // [0,255]
// Gets the image id and age
OUT = texRECT(current, pos);
// New points are not penalised
if (OUT.r > 0) {
// Penalization for points that were not projected to the image
// Compares the vectors at once. If all elements of this comparison eq 0, means that
// all of them are filled with ones, and that is an invalid imageID. Using DeMorgan:
//
// if (A) -> Penalize
// A = (x eq 0) && (y eq 0) && (z eq 0)
// !A = !(x eq 0) || !(y eq 0) || !(z eq 0)
// !A = x neq 0 || y neq 0 || z neq 0 <-- This is like the Cg function !any()
// !(!A) = A
if ( !any(OUT.gba < half3(1, 1, 127/255.0)) ) {
OUT.r += 8/255.0;
//OUT.r = 0;
}
// Color change penalty, using the flag
if (OUT.a >= 128/255.0) {
//OUT.r += 28/255.0;
OUT.r = 1;
}
}
// Finally age the point. Because this is an RGBA8 buffer, values are saturated for free
OUT.r += INCREMENT/255.0;
}