25 const float fac = this->
factor;
26 int ifac = int(256.0f * fac);
28 if constexpr (std::is_same_v<T, uchar>) {
29 const int f = ifac * int(src2[3]);
30 dst[0] =
min_ii(src1[0] + ((f * src2[0]) >> 16), 255);
31 dst[1] =
min_ii(src1[1] + ((f * src2[1]) >> 16), 255);
32 dst[2] =
min_ii(src1[2] + ((f * src2[2]) >> 16), 255);
35 const float f = (1.0f - (src1[3] * (1.0f - fac))) * src2[3];
36 dst[0] = src1[0] + f * src2[0];
37 dst[1] = src1[1] + f * src2[1];
38 dst[2] = src1[2] + f * src2[2];
69 const float fac = this->
factor;
70 int ifac = int(256.0f * fac);
72 if constexpr (std::is_same_v<T, uchar>) {
73 const int f = ifac * int(src2[3]);
74 dst[0] =
max_ii(src1[0] - ((f * src2[0]) >> 16), 0);
75 dst[1] =
max_ii(src1[1] - ((f * src2[1]) >> 16), 0);
76 dst[2] =
max_ii(src1[2] - ((f * src2[2]) >> 16), 0);
79 const float f = (1.0f - (src1[3] * (1.0f - fac))) * src2[3];
80 dst[0] =
max_ff(src1[0] - f * src2[0], 0.0f);
81 dst[1] =
max_ff(src1[1] - f * src2[1], 0.0f);
82 dst[2] =
max_ff(src1[2] - f * src2[2], 0.0f);
113 const float fac = this->
factor;
114 int ifac = int(256.0f * fac);
117 if constexpr (std::is_same_v<T, uchar>) {
118 dst[0] = src1[0] + ((ifac * src1[0] * (src2[0] - 255)) >> 16);
119 dst[1] = src1[1] + ((ifac * src1[1] * (src2[1] - 255)) >> 16);
120 dst[2] = src1[2] + ((ifac * src1[2] * (src2[2] - 255)) >> 16);
121 dst[3] = src1[3] + ((ifac * src1[3] * (src2[3] - 255)) >> 16);
124 dst[0] = src1[0] + fac * src1[0] * (src2[0] - 1.0f);
125 dst[1] = src1[1] + fac * src1[1] * (src2[1] - 1.0f);
126 dst[2] = src1[2] + fac * src1[2] * (src2[2] - 1.0f);
127 dst[3] = src1[3] + fac * src1[3] * (src2[3] - 1.0f);
MINLINE float max_ff(float a, float b)
MINLINE int min_ii(int a, int b)
MINLINE int max_ii(int a, int b)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
static ImBuf * do_add_effect(const RenderData *context, Strip *, float, float fac, ImBuf *src1, ImBuf *src2)
void mul_effect_get_handle(EffectHandle &rval)
StripEarlyOut early_out_mul_input2(const Strip *, float fac)
ImBuf * prepare_effect_imbufs(const RenderData *context, ImBuf *ibuf1, ImBuf *ibuf2, bool uninitialized_pixels)
static ImBuf * do_mul_effect(const RenderData *context, Strip *, float, float fac, ImBuf *src1, ImBuf *src2)
void add_effect_get_handle(EffectHandle &rval)
void sub_effect_get_handle(EffectHandle &rval)
static ImBuf * do_sub_effect(const RenderData *context, Strip *, float, float fac, ImBuf *src1, ImBuf *src2)
static void apply_effect_op(const OpT &op, const ImBuf *src1, const ImBuf *src2, ImBuf *dst)
void apply(const T *src1, const T *src2, T *dst, int64_t size) const
ImBuf *(* execute)(const RenderData *context, Strip *strip, float timeline_frame, float fac, ImBuf *ibuf1, ImBuf *ibuf2)
StripEarlyOut(* early_out)(const Strip *strip, float fac)
void apply(const T *src1, const T *src2, T *dst, int64_t size) const
void apply(const T *src1, const T *src2, T *dst, int64_t size) const