porting the DIVIDE blend mode in GLSL
Hi.
I'm trying to port the GIMP divide blend filter code to GLSL. I've
been able to do this for various other blend modes, but for some
reason this is just not working. I know this is offtopic but since
I've been fighting with this for a while I hoped you might point me in
the right direction.
This is the C based GIMP code I'm using:
if (layA == 0.0 || inCa / layCa > inA / layA)
outCa = layA * inA + layCa * (1 - inA) + inCa * (1 - layA);
else
outCa = inCa * layA * layA / layCa + layCa * (1 - inA) + inCa * (1 - layA));
(from gimpoperationpointlayermode.c)
and this is the ported code, I do this for each channel and then merge
the result:
mediump float r;
if (overlay.a == 0.0 || base.r / overlay.r > base.a / overlay.a)
r = overlay.a * base.a + overlay.r * (1.0 - base.a) + base.r * (1.0
- overlay.a);
else
r = base.r * overlay.a * overlay.a / overlay.r + overlay.r * (1.0 -
base.a) + base.r * (1.0 - overlay.a);
How it looks like: http://i.imgur.com/EjPhz.jpg How it should look
like: http://i.imgur.com/bqbFT.png
In GLSL the color values are between 0 and 1.
-M.