float dFdy(vec2 v) {
int ix=0, iy=0;
ToScreenSpace(v, &ix, &iy);
DWORD pixelA = pixels[iy][ix];
DWORD pixelB = pixels[iy-1][ix];
//Get rgb components
GetRGBA(pixelA, rA, gA, bA, aA);
GetRGBA(pixelB, rB, gB, bB, aB);
//calculate luminance
float La = 0.299f*rA + 0.587f*gA + 0.114f*bA;
float Lb = 0.299f*rB + 0.587f*gB + 0.114f*bB;
//using backward finite difference;
return Lb-La;
}
float dFdx(vec2 v) {
int ix=0, iy=0;
ToScreenSpace(v, &ix, &iy);
DWORD pixelA = pixels[iy][ix];
DWORD pixelB = pixels[iy][ix-1];
//Get rgb components
GetRGBA(pixelA, rA, gA, bA, aA);
GetRGBA(pixelB, rB, gB, bB, aB);
//calculate luminance
float La = 0.299f*rA + 0.587f*gA + 0.114f*bA;
float Lb = 0.299f*rB + 0.587f*gB + 0.114f*bB;
//using backward finite difference;
return Lb-La;
}