diff options
4 files changed, 27 insertions, 29 deletions
diff --git a/source/blender/blenlib/BLI_math_geom.h b/source/blender/blenlib/BLI_math_geom.h index 5fbec6a3293..245e39a9288 100644 --- a/source/blender/blenlib/BLI_math_geom.h +++ b/source/blender/blenlib/BLI_math_geom.h @@ -283,7 +283,8 @@ float form_factor_hemi_poly(float p[3], float n[3], void axis_dominant_v3(int *axis_a, int *axis_b, const float axis[3]); -MINLINE int axis_primary_v3(const float vec[3]); +MINLINE int max_axis_v3(const float vec[3]); +MINLINE int min_axis_v3(const float vec[3]); #ifdef __cplusplus } diff --git a/source/blender/blenlib/intern/math_geom_inline.c b/source/blender/blenlib/intern/math_geom_inline.c index bbf6dc9dfc2..01585c93bc8 100644 --- a/source/blender/blenlib/intern/math_geom_inline.c +++ b/source/blender/blenlib/intern/math_geom_inline.c @@ -137,28 +137,24 @@ MINLINE void madd_sh_shfl(float r[9], const float sh[9], const float f) add_sh_shsh(r, r, tmp); } -MINLINE int axis_primary_v3(const float vec[3]) +MINLINE int max_axis_v3(const float vec[3]) { const float x = vec[0]; const float y = vec[1]; const float z = vec[2]; + return ((x > y) ? + ((x > z) ? 0 : 2) : + ((y > z) ? 1 : 2)); +} - if (x > y) { - if (x > z) { - return 0; - } - else { - return 2; - } - } - else { - if (y > z) { - return 1; - } - else { - return 2; - } - } +MINLINE int min_axis_v3(const float vec[3]) +{ + const float x = vec[0]; + const float y = vec[1]; + const float z = vec[2]; + return ((x < y) ? + ((x < z) ? 0 : 2) : + ((y < z) ? 1 : 2)); } #endif /* __MATH_GEOM_INLINE_C__ */ diff --git a/source/blender/compositor/operations/COM_KeyingDespillOperation.cpp b/source/blender/compositor/operations/COM_KeyingDespillOperation.cpp index 73bc5fb2701..01f5c032730 100644 --- a/source/blender/compositor/operations/COM_KeyingDespillOperation.cpp +++ b/source/blender/compositor/operations/COM_KeyingDespillOperation.cpp @@ -61,7 +61,7 @@ void KeyingDespillOperation::executePixel(float output[4], float x, float y, Pix this->m_pixelReader->read(pixelColor, x, y, sampler); this->m_screenReader->read(screenColor, x, y, sampler); - const int screen_primary_channel = axis_primary_v3(screenColor); + const int screen_primary_channel = max_axis_v3(screenColor); const int other_1 = (screen_primary_channel + 1) % 3; const int other_2 = (screen_primary_channel + 2) % 3; @@ -75,7 +75,8 @@ void KeyingDespillOperation::executePixel(float output[4], float x, float y, Pix copy_v4_v4(output, pixelColor); - if (this->m_despillFactor * amount > 0) { - output[screen_primary_channel] = pixelColor[screen_primary_channel] - this->m_despillFactor * amount; + const float amount_despill = this->m_despillFactor * amount; + if (amount_despill > 0.0f) { + output[screen_primary_channel] = pixelColor[screen_primary_channel] - amount_despill; } } diff --git a/source/blender/compositor/operations/COM_KeyingOperation.cpp b/source/blender/compositor/operations/COM_KeyingOperation.cpp index dcb15eda638..baeacb56744 100644 --- a/source/blender/compositor/operations/COM_KeyingOperation.cpp +++ b/source/blender/compositor/operations/COM_KeyingOperation.cpp @@ -28,15 +28,15 @@ #include "BLI_listbase.h" #include "BLI_math.h" -static float get_pixel_saturation(float pixelColor[4], float screen_balance, int primary_channel) +static float get_pixel_saturation(const float pixelColor[4], float screen_balance, int primary_channel) { - int other_1 = (primary_channel + 1) % 3; - int other_2 = (primary_channel + 2) % 3; + const int other_1 = (primary_channel + 1) % 3; + const int other_2 = (primary_channel + 2) % 3; - int min_channel = min(other_1, other_2); - int max_channel = max(other_1, other_2); + const int min_channel = min(other_1, other_2); + const int max_channel = max(other_1, other_2); - float val = screen_balance * pixelColor[min_channel] + (1.0f - screen_balance) * pixelColor[max_channel]; + const float val = screen_balance * pixelColor[min_channel] + (1.0f - screen_balance) * pixelColor[max_channel]; return (pixelColor[primary_channel] - val) * fabsf(1.0f - val); } @@ -73,13 +73,13 @@ void KeyingOperation::executePixel(float output[4], float x, float y, PixelSampl this->m_pixelReader->read(pixelColor, x, y, sampler); this->m_screenReader->read(screenColor, x, y, sampler); - const int primary_channel = axis_primary_v3(screenColor); + const int primary_channel = max_axis_v3(screenColor); if (pixelColor[primary_channel] > 1.0f) { /* overexposure doesn't happen on screen itself and usually happens * on light sources in the shot, this need to be checked separately * because saturation and falloff calculation is based on the fact - * that pixels are not overexposured + * that pixels are not overexposed */ output[0] = 1.0f; } |