diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-05-19 19:03:24 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-01-25 16:13:52 +0300 |
commit | e3e23f774697782424647d8a12792dbc768501ad (patch) | |
tree | 5c37c3e91aa2536edb2eb3a54a7ad051fbfb33fb /source/blender/imbuf/intern/colormanagement_inline.c | |
parent | 83c9109926677b6b6a75ccb36ae0017733e8c8a2 (diff) |
ImBuf: Make luminance calculation inlined
Title actually tells it all, it is rather simple function which totally makes
sense to be inlined.
This gives up to 5% of speedup when updating scopes for a large image.
Reviewers: campbellbarton
Differential Revision: https://developer.blender.org/D1310
Diffstat (limited to 'source/blender/imbuf/intern/colormanagement_inline.c')
-rw-r--r-- | source/blender/imbuf/intern/colormanagement_inline.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/source/blender/imbuf/intern/colormanagement_inline.c b/source/blender/imbuf/intern/colormanagement_inline.c new file mode 100644 index 00000000000..8382e2a9bfa --- /dev/null +++ b/source/blender/imbuf/intern/colormanagement_inline.c @@ -0,0 +1,65 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2015 by Blender Foundation. + * All rights reserved. + * + * Contributor(s): Sergey Sharybin + * + * ***** END GPL LICENSE BLOCK ***** + * + */ + +/** \file blender/imbuf/intern/colormanagement_inline.c + * \ingroup imbuf + */ + +#ifndef __IMB_COLORMANAGEMENT_INLINE_C__ +#define __IMB_COLORMANAGEMENT_INLINE_C__ + +#include "IMB_colormanagement_intern.h" +#include "BLI_math_vector.h" + +/* Convert a float RGB triplet to the correct luminance weighted average. + * + * Grayscale, or Luma is a distillation of RGB data values down to a weighted average + * based on the luminance positions of the red, green, and blue primaries. + * Given that the internal reference space may be arbitrarily set, any + * effort to glean the luminance coefficients must be aware of the reference + * space primaries. + * + * See http://wiki.blender.org/index.php/User:Nazg-gul/ColorManagement#Luminance + */ + +float IMB_colormanagement_get_luminance(const float rgb[3]) +{ + return dot_v3v3(imbuf_luma_coefficients, rgb); +} + +/* Byte equivalent of IMB_colormanagement_get_luminance(). */ +unsigned char IMB_colormanagement_get_luminance_byte(const unsigned char rgb[3]) +{ + float rgbf[3]; + float val; + + rgb_uchar_to_float(rgbf, rgb); + val = dot_v3v3(imbuf_luma_coefficients, rgbf); + + return FTOCHAR(val); +} + +#endif /* __IMB_COLORMANAGEMENT_INLINE_H__ */ |