{ /* tint(x, T1, f1) = (1-f1)*x + f1*L(x)*T1; blend(tint(x, T1, f1), B1, f2) = (1-f2)*[(1-f1)*x + f1*L(x)*T1] + a*f2*B1; = (1-f2)* (1-f1)*x + (1-f2)*f1*L(x)*T1 + a*f2*B1; tint(blend(tint(x, T1, f1), B1, f2), T2, f3) = (1-f3)*[(1-f2)* (1-f1)*x + (1-f2)*f1*L(x)*T1 + a*f2*B1] + f3*L[(1-f2)*(1-f1)*x + (1-f2)*f1*L(x)*T1 + a*f2*B1]*T2; = (1-f3)* (1-f2)* (1-f1)*x + (1-f3)*(1-f2)*f1*L(x)*T1 + (1-f3)*a*f2*B1 + f3*T2*[(1-f2)*(1-f1)*L(x) + (1-f2)*f1*L(x)*L(T1) + a*f2*L(B1)]; = x [(1-f3)*(1-f2)*(1-f1)] + a [(1-f3)*f2*B1 + f3*T2*f2*L(B1)] + L(x) [(1-f3)*(1-f2)*f1*T1 + f3*T2*((1-f2)*(1-f1) + (1-f2)*f1*L(T1))] = x [k1] + a [k2*B1 + k3*T2] + L(x) [k4*T1 + k5*T2]; k1 = (1-f3)*(1-f2)*(1-f1); k2 = (1-f3)*f2; k3 = f3*f2*L(B1); k4 = (1-f3)*(1-f2)*f1; k5 = f3*((1-f2)*(1-f1) + (1-f2)*f1*L(T1)); */ float f1i = 1.0f - f1, f2i = 1.0f - f2, f3i = 1.0f - f3; float k1 = f3i*f2i*f1i; float k2 = f3i*f2; float k3 = f3*f2*(Lr*Br+Lg*Bg+Lb*Bb); float k4 = f3i*f2i*f1; float k5 = f3*(f2i*f1i+f2i*f1*(Lr*T1r+Lg*T1g+Lb*T1b)); float tint_shader[8] = { k2*Br + k3*T2r, //[0].x k2*Bg + k3*T2g, //[0].y k2*Bb + k3*T2b, //[0].z k1, //[0].w k4*T1r + k5*T2r, //[1].x k4*T1g + k5*T2g, //[1].y k4*T1b + k5*T2b, //[1].z 0 //[1].w }; set_shader_tint_parameters(tint_shader); }