void expr_handler::apply_alu_dst_mod(const bc_alu &bc, literal &v) { const float omod_coeff[] = {2.0f, 4.0, 0.5f}; if (bc.omod) v = v.f * omod_coeff[bc.omod - 1]; if (bc.clamp) v = float_clamp(v.f); }
color_t color_saddHSV(color_t a, float hx, float sx, float vx) { const float normd = color_get_normd(); const float normf = color_get_normf(); float r = (float)color_getR(a) * normf; /* normalize red */ float g = (float)color_getG(a) * normf; /* normalize green */ float b = (float)color_getB(a) * normf; /* normalize blue */ float h, s, v; /* temporary HSV */ float_convert_RGB2HSV(r, g, b, &h, &s, &v); /* convert */ h = float_clamp(0.0, h + hx, 1.0); /* shift hue */ s = float_clamp(0.0, s + sx, 1.0); /* shift saturation */ v = float_clamp(0.0, v + vx, 1.0); /* shift value */ float_convert_HSV2RGB(h, s, v, &r, &g, &b); /* convert back */ int r8 = r * normd; int g8 = g * normd; int b8 = b * normd; return color_genRGBA(r8, g8, b8, color_getA(a)); }