From cc811d1fd63425e180ec50f7d13a0b9fe3a6e2eb Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 7 Dec 2017 15:36:26 +1100 Subject: Cleanup: extract BKE_colorband from BKE_texture --- source/blender/blenkernel/BKE_colorband.h | 50 +++ source/blender/blenkernel/BKE_texture.h | 8 - source/blender/blenkernel/CMakeLists.txt | 2 + source/blender/blenkernel/intern/DerivedMesh.c | 2 +- source/blender/blenkernel/intern/colorband.c | 396 +++++++++++++++++++++ source/blender/blenkernel/intern/dynamicpaint.c | 2 +- source/blender/blenkernel/intern/linestyle.c | 2 +- source/blender/blenkernel/intern/texture.c | 360 +------------------ source/blender/collada/DocumentImporter.cpp | 1 - .../operations/COM_ColorRampOperation.cpp | 2 +- .../depsgraph/intern/builder/deg_builder_nodes.cc | 1 - .../intern/builder/deg_builder_relations.cc | 1 - source/blender/editors/interface/interface_draw.c | 2 +- .../blender/editors/interface/interface_handlers.c | 2 +- .../editors/interface/interface_templates.c | 2 +- source/blender/editors/interface/resources.c | 2 +- source/blender/editors/object/object_add.c | 1 - source/blender/editors/sculpt_paint/paint_image.c | 2 +- .../blender/editors/sculpt_paint/paint_image_2d.c | 2 +- .../editors/sculpt_paint/paint_image_proj.c | 1 + source/blender/editors/space_view3d/drawvolume.c | 2 +- .../freestyle/intern/python/BPy_Freestyle.cpp | 2 +- source/blender/gpu/intern/gpu_material.c | 2 +- source/blender/makesrna/intern/rna_brush.c | 2 +- source/blender/makesrna/intern/rna_color.c | 2 +- source/blender/makesrna/intern/rna_material.c | 1 + source/blender/makesrna/intern/rna_smoke.c | 2 +- source/blender/makesrna/intern/rna_texture.c | 1 + .../blender/nodes/composite/node_composite_util.h | 1 + source/blender/nodes/shader/node_shader_util.h | 1 + .../shader/nodes/node_shader_tex_pointdensity.c | 1 - source/blender/nodes/texture/node_texture_util.h | 1 + source/blender/render/intern/source/pointdensity.c | 2 +- .../blender/render/intern/source/render_texture.c | 1 + source/blender/render/intern/source/shadeoutput.c | 4 +- 35 files changed, 474 insertions(+), 392 deletions(-) create mode 100644 source/blender/blenkernel/BKE_colorband.h create mode 100644 source/blender/blenkernel/intern/colorband.c (limited to 'source/blender') diff --git a/source/blender/blenkernel/BKE_colorband.h b/source/blender/blenkernel/BKE_colorband.h new file mode 100644 index 00000000000..09ed9a60477 --- /dev/null +++ b/source/blender/blenkernel/BKE_colorband.h @@ -0,0 +1,50 @@ +/* + * ***** 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) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * ***** END GPL LICENSE BLOCK ***** + */ +#ifndef __BKE_COLORBAND_H__ +#define __BKE_COLORBAND_H__ + +/** \file BKE_colorband.h + */ + +#ifdef __cplusplus +extern "C" { +#endif + +struct ColorBand; + +/* in ColorBand struct */ +#define MAXCOLORBAND 32 + +void init_colorband(struct ColorBand *coba, bool rangetype); +struct ColorBand *add_colorband(bool rangetype); +bool do_colorband(const struct ColorBand *coba, float in, float out[4]); +void colorband_table_RGBA(struct ColorBand *coba, float **array, int *size); +struct CBData *colorband_element_add(struct ColorBand *coba, float position); +int colorband_element_remove(struct ColorBand *coba, int index); +void colorband_update_sort(struct ColorBand *coba); + +#ifdef __cplusplus +} +#endif + +#endif /* __BKE_COLORBAND_H__ */ diff --git a/source/blender/blenkernel/BKE_texture.h b/source/blender/blenkernel/BKE_texture.h index 8a9171673ea..4e98852c995 100644 --- a/source/blender/blenkernel/BKE_texture.h +++ b/source/blender/blenkernel/BKE_texture.h @@ -60,14 +60,6 @@ struct World; #define MAXCOLORBAND 32 -void init_colorband(struct ColorBand *coba, bool rangetype); -struct ColorBand *add_colorband(bool rangetype); -bool do_colorband(const struct ColorBand *coba, float in, float out[4]); -void colorband_table_RGBA(struct ColorBand *coba, float **array, int *size); -struct CBData *colorband_element_add(struct ColorBand *coba, float position); -int colorband_element_remove(struct ColorBand *coba, int index); -void colorband_update_sort(struct ColorBand *coba); - void BKE_texture_free(struct Tex *tex); void BKE_texture_default(struct Tex *tex); void BKE_texture_copy_data(struct Main *bmain, struct Tex *tex_dst, const struct Tex *tex_src, const int flag); diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt index 96c653dee23..3fc2c3f8eb0 100644 --- a/source/blender/blenkernel/CMakeLists.txt +++ b/source/blender/blenkernel/CMakeLists.txt @@ -87,6 +87,7 @@ set(SRC intern/cdderivedmesh.c intern/cloth.c intern/collision.c + intern/colorband.c intern/colortools.c intern/constraint.c intern/context.c @@ -216,6 +217,7 @@ set(SRC BKE_cdderivedmesh.h BKE_cloth.h BKE_collision.h + BKE_colorband.h BKE_colortools.h BKE_constraint.h BKE_context.h diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 9dae4c5eae7..b588cd07aec 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -52,6 +52,7 @@ #include "BLI_task.h" #include "BKE_cdderivedmesh.h" +#include "BKE_colorband.h" #include "BKE_editmesh.h" #include "BKE_key.h" #include "BKE_library.h" @@ -62,7 +63,6 @@ #include "BKE_object.h" #include "BKE_object_deform.h" #include "BKE_paint.h" -#include "BKE_texture.h" #include "BKE_multires.h" #include "BKE_bvhutils.h" #include "BKE_deform.h" diff --git a/source/blender/blenkernel/intern/colorband.c b/source/blender/blenkernel/intern/colorband.c new file mode 100644 index 00000000000..b1f6431019d --- /dev/null +++ b/source/blender/blenkernel/intern/colorband.c @@ -0,0 +1,396 @@ +/* + * ***** 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) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/blenkernel/intern/colorband.c + * \ingroup bke + */ + +#include "MEM_guardedalloc.h" + +#include "BLI_math.h" +#include "BLI_utildefines.h" +#include "BLI_math_color.h" + +#include "DNA_key_types.h" +#include "DNA_texture_types.h" + +#include "BKE_colorband.h" +#include "BKE_material.h" +#include "BKE_key.h" + +void init_colorband(ColorBand *coba, bool rangetype) +{ + int a; + + coba->data[0].pos = 0.0; + coba->data[1].pos = 1.0; + + if (rangetype == 0) { + coba->data[0].r = 0.0; + coba->data[0].g = 0.0; + coba->data[0].b = 0.0; + coba->data[0].a = 0.0; + + coba->data[1].r = 1.0; + coba->data[1].g = 1.0; + coba->data[1].b = 1.0; + coba->data[1].a = 1.0; + } + else { + coba->data[0].r = 0.0; + coba->data[0].g = 0.0; + coba->data[0].b = 0.0; + coba->data[0].a = 1.0; + + coba->data[1].r = 1.0; + coba->data[1].g = 1.0; + coba->data[1].b = 1.0; + coba->data[1].a = 1.0; + } + + for (a = 2; a < MAXCOLORBAND; a++) { + coba->data[a].r = 0.5; + coba->data[a].g = 0.5; + coba->data[a].b = 0.5; + coba->data[a].a = 1.0; + coba->data[a].pos = 0.5; + } + + coba->tot = 2; + coba->color_mode = COLBAND_BLEND_RGB; +} + +ColorBand *add_colorband(bool rangetype) +{ + ColorBand *coba; + + coba = MEM_callocN(sizeof(ColorBand), "colorband"); + init_colorband(coba, rangetype); + + return coba; +} + +/* ------------------------------------------------------------------------- */ + +static float colorband_hue_interp( + const int ipotype_hue, + const float mfac, const float fac, + float h1, float h2) +{ + float h_interp; + int mode = 0; + +#define HUE_INTERP(h_a, h_b) ((mfac * (h_a)) + (fac * (h_b))) +#define HUE_MOD(h) (((h) < 1.0f) ? (h) : (h) - 1.0f) + + h1 = HUE_MOD(h1); + h2 = HUE_MOD(h2); + + BLI_assert(h1 >= 0.0f && h1 < 1.0f); + BLI_assert(h2 >= 0.0f && h2 < 1.0f); + + switch (ipotype_hue) { + case COLBAND_HUE_NEAR: + { + if ((h1 < h2) && (h2 - h1) > +0.5f) mode = 1; + else if ((h1 > h2) && (h2 - h1) < -0.5f) mode = 2; + else mode = 0; + break; + } + case COLBAND_HUE_FAR: + { + if ((h1 < h2) && (h2 - h1) < +0.5f) mode = 1; + else if ((h1 > h2) && (h2 - h1) > -0.5f) mode = 2; + else mode = 0; + break; + } + case COLBAND_HUE_CCW: + { + if (h1 > h2) mode = 2; + else mode = 0; + break; + } + case COLBAND_HUE_CW: + { + if (h1 < h2) mode = 1; + else mode = 0; + break; + } + } + + switch (mode) { + case 0: + h_interp = HUE_INTERP(h1, h2); + break; + case 1: + h_interp = HUE_INTERP(h1 + 1.0f, h2); + h_interp = HUE_MOD(h_interp); + break; + case 2: + h_interp = HUE_INTERP(h1, h2 + 1.0f); + h_interp = HUE_MOD(h_interp); + break; + } + + BLI_assert(h_interp >= 0.0f && h_interp < 1.0f); + +#undef HUE_INTERP +#undef HUE_MOD + + return h_interp; +} + +bool do_colorband(const ColorBand *coba, float in, float out[4]) +{ + const CBData *cbd1, *cbd2, *cbd0, *cbd3; + float fac; + int ipotype; + int a; + + if (coba == NULL || coba->tot == 0) return false; + + cbd1 = coba->data; + + ipotype = (coba->color_mode == COLBAND_BLEND_RGB) ? coba->ipotype : COLBAND_INTERP_LINEAR; + + if (coba->tot == 1) { + out[0] = cbd1->r; + out[1] = cbd1->g; + out[2] = cbd1->b; + out[3] = cbd1->a; + } + else if ((in <= cbd1->pos) && ELEM(ipotype, COLBAND_INTERP_LINEAR, COLBAND_INTERP_EASE)) { + out[0] = cbd1->r; + out[1] = cbd1->g; + out[2] = cbd1->b; + out[3] = cbd1->a; + } + else { + CBData left, right; + + /* we're looking for first pos > in */ + for (a = 0; a < coba->tot; a++, cbd1++) { + if (cbd1->pos > in) { + break; + } + } + + if (a == coba->tot) { + cbd2 = cbd1 - 1; + right = *cbd2; + right.pos = 1.0f; + cbd1 = &right; + } + else if (a == 0) { + left = *cbd1; + left.pos = 0.0f; + cbd2 = &left; + } + else { + cbd2 = cbd1 - 1; + } + + if ((in >= cbd1->pos) && ELEM(ipotype, COLBAND_INTERP_LINEAR, COLBAND_INTERP_EASE)) { + out[0] = cbd1->r; + out[1] = cbd1->g; + out[2] = cbd1->b; + out[3] = cbd1->a; + } + else { + + if (cbd2->pos != cbd1->pos) { + fac = (in - cbd1->pos) / (cbd2->pos - cbd1->pos); + } + else { + /* was setting to 0.0 in 2.56 & previous, but this + * is incorrect for the last element, see [#26732] */ + fac = (a != coba->tot) ? 0.0f : 1.0f; + } + + if (ipotype == COLBAND_INTERP_CONSTANT) { + /* constant */ + out[0] = cbd2->r; + out[1] = cbd2->g; + out[2] = cbd2->b; + out[3] = cbd2->a; + } + else if (ipotype >= COLBAND_INTERP_B_SPLINE) { + /* ipo from right to left: 3 2 1 0 */ + float t[4]; + + if (a >= coba->tot - 1) cbd0 = cbd1; + else cbd0 = cbd1 + 1; + if (a < 2) cbd3 = cbd2; + else cbd3 = cbd2 - 1; + + CLAMP(fac, 0.0f, 1.0f); + + if (ipotype == COLBAND_INTERP_CARDINAL) { + key_curve_position_weights(fac, t, KEY_CARDINAL); + } + else { + key_curve_position_weights(fac, t, KEY_BSPLINE); + } + + out[0] = t[3] * cbd3->r + t[2] * cbd2->r + t[1] * cbd1->r + t[0] * cbd0->r; + out[1] = t[3] * cbd3->g + t[2] * cbd2->g + t[1] * cbd1->g + t[0] * cbd0->g; + out[2] = t[3] * cbd3->b + t[2] * cbd2->b + t[1] * cbd1->b + t[0] * cbd0->b; + out[3] = t[3] * cbd3->a + t[2] * cbd2->a + t[1] * cbd1->a + t[0] * cbd0->a; + CLAMP(out[0], 0.0f, 1.0f); + CLAMP(out[1], 0.0f, 1.0f); + CLAMP(out[2], 0.0f, 1.0f); + CLAMP(out[3], 0.0f, 1.0f); + } + else { + float mfac; + + if (ipotype == COLBAND_INTERP_EASE) { + mfac = fac * fac; + fac = 3.0f * mfac - 2.0f * mfac * fac; + } + + mfac = 1.0f - fac; + + if (UNLIKELY(coba->color_mode == COLBAND_BLEND_HSV)) { + float col1[3], col2[3]; + + rgb_to_hsv_v(&cbd1->r, col1); + rgb_to_hsv_v(&cbd2->r, col2); + + out[0] = colorband_hue_interp(coba->ipotype_hue, mfac, fac, col1[0], col2[0]); + out[1] = mfac * col1[1] + fac * col2[1]; + out[2] = mfac * col1[2] + fac * col2[2]; + out[3] = mfac * cbd1->a + fac * cbd2->a; + + hsv_to_rgb_v(out, out); + } + else if (UNLIKELY(coba->color_mode == COLBAND_BLEND_HSL)) { + float col1[3], col2[3]; + + rgb_to_hsl_v(&cbd1->r, col1); + rgb_to_hsl_v(&cbd2->r, col2); + + out[0] = colorband_hue_interp(coba->ipotype_hue, mfac, fac, col1[0], col2[0]); + out[1] = mfac * col1[1] + fac * col2[1]; + out[2] = mfac * col1[2] + fac * col2[2]; + out[3] = mfac * cbd1->a + fac * cbd2->a; + + hsl_to_rgb_v(out, out); + } + else { + /* COLBAND_BLEND_RGB */ + out[0] = mfac * cbd1->r + fac * cbd2->r; + out[1] = mfac * cbd1->g + fac * cbd2->g; + out[2] = mfac * cbd1->b + fac * cbd2->b; + out[3] = mfac * cbd1->a + fac * cbd2->a; + } + } + } + } + return true; /* OK */ +} + +void colorband_table_RGBA(ColorBand *coba, float **array, int *size) +{ + int a; + + *size = CM_TABLE + 1; + *array = MEM_callocN(sizeof(float) * (*size) * 4, "ColorBand"); + + for (a = 0; a < *size; a++) + do_colorband(coba, (float)a / (float)CM_TABLE, &(*array)[a * 4]); +} + +static int vergcband(const void *a1, const void *a2) +{ + const CBData *x1 = a1, *x2 = a2; + + if (x1->pos > x2->pos) return 1; + else if (x1->pos < x2->pos) return -1; + return 0; +} + +void colorband_update_sort(ColorBand *coba) +{ + int a; + + if (coba->tot < 2) + return; + + for (a = 0; a < coba->tot; a++) + coba->data[a].cur = a; + + qsort(coba->data, coba->tot, sizeof(CBData), vergcband); + + for (a = 0; a < coba->tot; a++) { + if (coba->data[a].cur == coba->cur) { + coba->cur = a; + break; + } + } +} + +CBData *colorband_element_add(struct ColorBand *coba, float position) +{ + if (coba->tot == MAXCOLORBAND) { + return NULL; + } + else { + CBData *xnew; + + xnew = &coba->data[coba->tot]; + xnew->pos = position; + + if (coba->tot != 0) { + do_colorband(coba, position, &xnew->r); + } + else { + zero_v4(&xnew->r); + } + } + + coba->tot++; + coba->cur = coba->tot - 1; + + colorband_update_sort(coba); + + return coba->data + coba->cur; +} + +int colorband_element_remove(struct ColorBand *coba, int index) +{ + int a; + + if (coba->tot < 2) + return 0; + + if (index < 0 || index >= coba->tot) + return 0; + + coba->tot--; + for (a = index; a < coba->tot; a++) { + coba->data[a] = coba->data[a + 1]; + } + if (coba->cur) coba->cur--; + return 1; +} diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c index ae896176b6d..b809e13d1a0 100644 --- a/source/blender/blenkernel/intern/dynamicpaint.c +++ b/source/blender/blenkernel/intern/dynamicpaint.c @@ -55,6 +55,7 @@ #include "BKE_animsys.h" #include "BKE_armature.h" #include "BKE_bvhutils.h" /* bvh tree */ +#include "BKE_colorband.h" #include "BKE_cdderivedmesh.h" #include "BKE_constraint.h" #include "BKE_customdata.h" @@ -72,7 +73,6 @@ #include "BKE_particle.h" #include "BKE_pointcache.h" #include "BKE_scene.h" -#include "BKE_texture.h" /* for image output */ #include "IMB_imbuf_types.h" diff --git a/source/blender/blenkernel/intern/linestyle.c b/source/blender/blenkernel/intern/linestyle.c index f07cb97d476..653b79709e6 100644 --- a/source/blender/blenkernel/intern/linestyle.c +++ b/source/blender/blenkernel/intern/linestyle.c @@ -44,13 +44,13 @@ #include "BLI_string_utils.h" #include "BLI_utildefines.h" +#include "BKE_colorband.h" #include "BKE_context.h" #include "BKE_freestyle.h" #include "BKE_global.h" #include "BKE_library.h" #include "BKE_linestyle.h" #include "BKE_node.h" -#include "BKE_texture.h" #include "BKE_colortools.h" #include "BKE_animsys.h" diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c index 122b605f160..fc41815737d 100644 --- a/source/blender/blenkernel/intern/texture.c +++ b/source/blender/blenkernel/intern/texture.c @@ -58,6 +58,7 @@ #include "BKE_global.h" #include "BKE_main.h" +#include "BKE_colorband.h" #include "BKE_library.h" #include "BKE_library_query.h" #include "BKE_library_remap.h" @@ -198,365 +199,6 @@ void BKE_texture_colormapping_default(ColorMapping *colormap) colormap->blend_factor = 0.0f; } -/* ****************** COLORBAND ******************* */ - -void init_colorband(ColorBand *coba, bool rangetype) -{ - int a; - - coba->data[0].pos = 0.0; - coba->data[1].pos = 1.0; - - if (rangetype == 0) { - coba->data[0].r = 0.0; - coba->data[0].g = 0.0; - coba->data[0].b = 0.0; - coba->data[0].a = 0.0; - - coba->data[1].r = 1.0; - coba->data[1].g = 1.0; - coba->data[1].b = 1.0; - coba->data[1].a = 1.0; - } - else { - coba->data[0].r = 0.0; - coba->data[0].g = 0.0; - coba->data[0].b = 0.0; - coba->data[0].a = 1.0; - - coba->data[1].r = 1.0; - coba->data[1].g = 1.0; - coba->data[1].b = 1.0; - coba->data[1].a = 1.0; - } - - for (a = 2; a < MAXCOLORBAND; a++) { - coba->data[a].r = 0.5; - coba->data[a].g = 0.5; - coba->data[a].b = 0.5; - coba->data[a].a = 1.0; - coba->data[a].pos = 0.5; - } - - coba->tot = 2; - coba->color_mode = COLBAND_BLEND_RGB; -} - -ColorBand *add_colorband(bool rangetype) -{ - ColorBand *coba; - - coba = MEM_callocN(sizeof(ColorBand), "colorband"); - init_colorband(coba, rangetype); - - return coba; -} - -/* ------------------------------------------------------------------------- */ - -static float colorband_hue_interp( - const int ipotype_hue, - const float mfac, const float fac, - float h1, float h2) -{ - float h_interp; - int mode = 0; - -#define HUE_INTERP(h_a, h_b) ((mfac * (h_a)) + (fac * (h_b))) -#define HUE_MOD(h) (((h) < 1.0f) ? (h) : (h) - 1.0f) - - h1 = HUE_MOD(h1); - h2 = HUE_MOD(h2); - - BLI_assert(h1 >= 0.0f && h1 < 1.0f); - BLI_assert(h2 >= 0.0f && h2 < 1.0f); - - switch (ipotype_hue) { - case COLBAND_HUE_NEAR: - { - if ((h1 < h2) && (h2 - h1) > +0.5f) mode = 1; - else if ((h1 > h2) && (h2 - h1) < -0.5f) mode = 2; - else mode = 0; - break; - } - case COLBAND_HUE_FAR: - { - if ((h1 < h2) && (h2 - h1) < +0.5f) mode = 1; - else if ((h1 > h2) && (h2 - h1) > -0.5f) mode = 2; - else mode = 0; - break; - } - case COLBAND_HUE_CCW: - { - if (h1 > h2) mode = 2; - else mode = 0; - break; - } - case COLBAND_HUE_CW: - { - if (h1 < h2) mode = 1; - else mode = 0; - break; - } - } - - switch (mode) { - case 0: - h_interp = HUE_INTERP(h1, h2); - break; - case 1: - h_interp = HUE_INTERP(h1 + 1.0f, h2); - h_interp = HUE_MOD(h_interp); - break; - case 2: - h_interp = HUE_INTERP(h1, h2 + 1.0f); - h_interp = HUE_MOD(h_interp); - break; - } - - BLI_assert(h_interp >= 0.0f && h_interp < 1.0f); - -#undef HUE_INTERP -#undef HUE_MOD - - return h_interp; -} - -bool do_colorband(const ColorBand *coba, float in, float out[4]) -{ - const CBData *cbd1, *cbd2, *cbd0, *cbd3; - float fac; - int ipotype; - int a; - - if (coba == NULL || coba->tot == 0) return false; - - cbd1 = coba->data; - - ipotype = (coba->color_mode == COLBAND_BLEND_RGB) ? coba->ipotype : COLBAND_INTERP_LINEAR; - - if (coba->tot == 1) { - out[0] = cbd1->r; - out[1] = cbd1->g; - out[2] = cbd1->b; - out[3] = cbd1->a; - } - else if ((in <= cbd1->pos) && ELEM(ipotype, COLBAND_INTERP_LINEAR, COLBAND_INTERP_EASE)) { - out[0] = cbd1->r; - out[1] = cbd1->g; - out[2] = cbd1->b; - out[3] = cbd1->a; - } - else { - CBData left, right; - - /* we're looking for first pos > in */ - for (a = 0; a < coba->tot; a++, cbd1++) { - if (cbd1->pos > in) { - break; - } - } - - if (a == coba->tot) { - cbd2 = cbd1 - 1; - right = *cbd2; - right.pos = 1.0f; - cbd1 = &right; - } - else if (a == 0) { - left = *cbd1; - left.pos = 0.0f; - cbd2 = &left; - } - else { - cbd2 = cbd1 - 1; - } - - if ((in >= cbd1->pos) && ELEM(ipotype, COLBAND_INTERP_LINEAR, COLBAND_INTERP_EASE)) { - out[0] = cbd1->r; - out[1] = cbd1->g; - out[2] = cbd1->b; - out[3] = cbd1->a; - } - else { - - if (cbd2->pos != cbd1->pos) { - fac = (in - cbd1->pos) / (cbd2->pos - cbd1->pos); - } - else { - /* was setting to 0.0 in 2.56 & previous, but this - * is incorrect for the last element, see [#26732] */ - fac = (a != coba->tot) ? 0.0f : 1.0f; - } - - if (ipotype == COLBAND_INTERP_CONSTANT) { - /* constant */ - out[0] = cbd2->r; - out[1] = cbd2->g; - out[2] = cbd2->b; - out[3] = cbd2->a; - } - else if (ipotype >= COLBAND_INTERP_B_SPLINE) { - /* ipo from right to left: 3 2 1 0 */ - float t[4]; - - if (a >= coba->tot - 1) cbd0 = cbd1; - else cbd0 = cbd1 + 1; - if (a < 2) cbd3 = cbd2; - else cbd3 = cbd2 - 1; - - CLAMP(fac, 0.0f, 1.0f); - - if (ipotype == COLBAND_INTERP_CARDINAL) { - key_curve_position_weights(fac, t, KEY_CARDINAL); - } - else { - key_curve_position_weights(fac, t, KEY_BSPLINE); - } - - out[0] = t[3] * cbd3->r + t[2] * cbd2->r + t[1] * cbd1->r + t[0] * cbd0->r; - out[1] = t[3] * cbd3->g + t[2] * cbd2->g + t[1] * cbd1->g + t[0] * cbd0->g; - out[2] = t[3] * cbd3->b + t[2] * cbd2->b + t[1] * cbd1->b + t[0] * cbd0->b; - out[3] = t[3] * cbd3->a + t[2] * cbd2->a + t[1] * cbd1->a + t[0] * cbd0->a; - CLAMP(out[0], 0.0f, 1.0f); - CLAMP(out[1], 0.0f, 1.0f); - CLAMP(out[2], 0.0f, 1.0f); - CLAMP(out[3], 0.0f, 1.0f); - } - else { - float mfac; - - if (ipotype == COLBAND_INTERP_EASE) { - mfac = fac * fac; - fac = 3.0f * mfac - 2.0f * mfac * fac; - } - - mfac = 1.0f - fac; - - if (UNLIKELY(coba->color_mode == COLBAND_BLEND_HSV)) { - float col1[3], col2[3]; - - rgb_to_hsv_v(&cbd1->r, col1); - rgb_to_hsv_v(&cbd2->r, col2); - - out[0] = colorband_hue_interp(coba->ipotype_hue, mfac, fac, col1[0], col2[0]); - out[1] = mfac * col1[1] + fac * col2[1]; - out[2] = mfac * col1[2] + fac * col2[2]; - out[3] = mfac * cbd1->a + fac * cbd2->a; - - hsv_to_rgb_v(out, out); - } - else if (UNLIKELY(coba->color_mode == COLBAND_BLEND_HSL)) { - float col1[3], col2[3]; - - rgb_to_hsl_v(&cbd1->r, col1); - rgb_to_hsl_v(&cbd2->r, col2); - - out[0] = colorband_hue_interp(coba->ipotype_hue, mfac, fac, col1[0], col2[0]); - out[1] = mfac * col1[1] + fac * col2[1]; - out[2] = mfac * col1[2] + fac * col2[2]; - out[3] = mfac * cbd1->a + fac * cbd2->a; - - hsl_to_rgb_v(out, out); - } - else { - /* COLBAND_BLEND_RGB */ - out[0] = mfac * cbd1->r + fac * cbd2->r; - out[1] = mfac * cbd1->g + fac * cbd2->g; - out[2] = mfac * cbd1->b + fac * cbd2->b; - out[3] = mfac * cbd1->a + fac * cbd2->a; - } - } - } - } - return true; /* OK */ -} - -void colorband_table_RGBA(ColorBand *coba, float **array, int *size) -{ - int a; - - *size = CM_TABLE + 1; - *array = MEM_callocN(sizeof(float) * (*size) * 4, "ColorBand"); - - for (a = 0; a < *size; a++) - do_colorband(coba, (float)a / (float)CM_TABLE, &(*array)[a * 4]); -} - -static int vergcband(const void *a1, const void *a2) -{ - const CBData *x1 = a1, *x2 = a2; - - if (x1->pos > x2->pos) return 1; - else if (x1->pos < x2->pos) return -1; - return 0; -} - -void colorband_update_sort(ColorBand *coba) -{ - int a; - - if (coba->tot < 2) - return; - - for (a = 0; a < coba->tot; a++) - coba->data[a].cur = a; - - qsort(coba->data, coba->tot, sizeof(CBData), vergcband); - - for (a = 0; a < coba->tot; a++) { - if (coba->data[a].cur == coba->cur) { - coba->cur = a; - break; - } - } -} - -CBData *colorband_element_add(struct ColorBand *coba, float position) -{ - if (coba->tot == MAXCOLORBAND) { - return NULL; - } - else { - CBData *xnew; - - xnew = &coba->data[coba->tot]; - xnew->pos = position; - - if (coba->tot != 0) { - do_colorband(coba, position, &xnew->r); - } - else { - zero_v4(&xnew->r); - } - } - - coba->tot++; - coba->cur = coba->tot - 1; - - colorband_update_sort(coba); - - return coba->data + coba->cur; -} - -int colorband_element_remove(struct ColorBand *coba, int index) -{ - int a; - - if (coba->tot < 2) - return 0; - - if (index < 0 || index >= coba->tot) - return 0; - - coba->tot--; - for (a = index; a < coba->tot; a++) { - coba->data[a] = coba->data[a + 1]; - } - if (coba->cur) coba->cur--; - return 1; -} - /* ******************* TEX ************************ */ /** Free (or release) any data used by this texture (does not free the texure itself). */ diff --git a/source/blender/collada/DocumentImporter.cpp b/source/blender/collada/DocumentImporter.cpp index f7fdfb06a40..eada4b2bf98 100644 --- a/source/blender/collada/DocumentImporter.cpp +++ b/source/blender/collada/DocumentImporter.cpp @@ -60,7 +60,6 @@ extern "C" { #include "BKE_main.h" #include "BKE_lamp.h" #include "BKE_library.h" -#include "BKE_texture.h" #include "BKE_fcurve.h" #include "BKE_depsgraph.h" #include "BKE_scene.h" diff --git a/source/blender/compositor/operations/COM_ColorRampOperation.cpp b/source/blender/compositor/operations/COM_ColorRampOperation.cpp index 84d36034ec6..bbc09747ae1 100644 --- a/source/blender/compositor/operations/COM_ColorRampOperation.cpp +++ b/source/blender/compositor/operations/COM_ColorRampOperation.cpp @@ -25,7 +25,7 @@ #ifdef __cplusplus extern "C" { #endif -# include "BKE_texture.h" +# include "BKE_colorband.h" #ifdef __cplusplus } #endif diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc index fdeeb0de16f..6de6feb32f2 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc @@ -92,7 +92,6 @@ extern "C" { #include "BKE_particle.h" #include "BKE_rigidbody.h" #include "BKE_sound.h" -#include "BKE_texture.h" #include "BKE_tracking.h" #include "BKE_world.h" diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index f607fbd5380..f44d8f2c029 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -88,7 +88,6 @@ extern "C" { #include "BKE_particle.h" #include "BKE_rigidbody.h" #include "BKE_sound.h" -#include "BKE_texture.h" #include "BKE_tracking.h" #include "BKE_world.h" diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c index 01ea1e953fa..04e0a20243b 100644 --- a/source/blender/editors/interface/interface_draw.c +++ b/source/blender/editors/interface/interface_draw.c @@ -40,9 +40,9 @@ #include "BLI_string.h" #include "BLI_utildefines.h" +#include "BKE_colorband.h" #include "BKE_colortools.h" #include "BKE_node.h" -#include "BKE_texture.h" #include "BKE_tracking.h" diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 4dfb1a92bf6..06196b57220 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -61,6 +61,7 @@ #include "PIL_time.h" +#include "BKE_colorband.h" #include "BKE_blender_undo.h" #include "BKE_brush.h" #include "BKE_colortools.h" @@ -68,7 +69,6 @@ #include "BKE_idprop.h" #include "BKE_report.h" #include "BKE_screen.h" -#include "BKE_texture.h" #include "BKE_tracking.h" #include "BKE_unit.h" #include "BKE_paint.h" diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index e1e18b1f102..37d1146e97b 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -53,6 +53,7 @@ #include "BLF_api.h" #include "BLT_translation.h" +#include "BKE_colorband.h" #include "BKE_colortools.h" #include "BKE_context.h" #include "BKE_depsgraph.h" @@ -70,7 +71,6 @@ #include "BKE_report.h" #include "BKE_sca.h" #include "BKE_screen.h" -#include "BKE_texture.h" #include "ED_screen.h" #include "ED_object.h" diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c index 4b47d0da13e..a73ecbac85f 100644 --- a/source/blender/editors/interface/resources.c +++ b/source/blender/editors/interface/resources.c @@ -46,10 +46,10 @@ #include "BLI_math.h" #include "BKE_appdir.h" +#include "BKE_colorband.h" #include "BKE_DerivedMesh.h" #include "BKE_global.h" #include "BKE_main.h" -#include "BKE_texture.h" #include "BIF_gl.h" diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index 3f82298f5b3..5048b70546c 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -90,7 +90,6 @@ #include "BKE_scene.h" #include "BKE_screen.h" #include "BKE_speaker.h" -#include "BKE_texture.h" #include "RNA_access.h" #include "RNA_define.h" diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c index 6b197bbb392..427d4a7bb7b 100644 --- a/source/blender/editors/sculpt_paint/paint_image.c +++ b/source/blender/editors/sculpt_paint/paint_image.c @@ -50,6 +50,7 @@ #include "DNA_node_types.h" #include "DNA_object_types.h" +#include "BKE_colorband.h" #include "BKE_context.h" #include "BKE_depsgraph.h" #include "BKE_DerivedMesh.h" @@ -59,7 +60,6 @@ #include "BKE_material.h" #include "BKE_node.h" #include "BKE_paint.h" -#include "BKE_texture.h" #include "UI_interface.h" #include "UI_view2d.h" diff --git a/source/blender/editors/sculpt_paint/paint_image_2d.c b/source/blender/editors/sculpt_paint/paint_image_2d.c index 09b0847b306..766942a5fce 100644 --- a/source/blender/editors/sculpt_paint/paint_image_2d.c +++ b/source/blender/editors/sculpt_paint/paint_image_2d.c @@ -44,13 +44,13 @@ #include "BLI_bitmap.h" #include "BLI_task.h" +#include "BKE_colorband.h" #include "BKE_context.h" #include "BKE_depsgraph.h" #include "BKE_brush.h" #include "BKE_image.h" #include "BKE_paint.h" #include "BKE_report.h" -#include "BKE_texture.h" #include "ED_paint.h" #include "ED_screen.h" diff --git a/source/blender/editors/sculpt_paint/paint_image_proj.c b/source/blender/editors/sculpt_paint/paint_image_proj.c index 6fa45f1932a..60a4cd86aa5 100644 --- a/source/blender/editors/sculpt_paint/paint_image_proj.c +++ b/source/blender/editors/sculpt_paint/paint_image_proj.c @@ -62,6 +62,7 @@ #include "DNA_object_types.h" #include "BKE_camera.h" +#include "BKE_colorband.h" #include "BKE_context.h" #include "BKE_colortools.h" #include "BKE_depsgraph.h" diff --git a/source/blender/editors/space_view3d/drawvolume.c b/source/blender/editors/space_view3d/drawvolume.c index c076bfb4aa4..dafe25a7072 100644 --- a/source/blender/editors/space_view3d/drawvolume.c +++ b/source/blender/editors/space_view3d/drawvolume.c @@ -41,7 +41,7 @@ #include "BLI_math.h" #include "BKE_DerivedMesh.h" -#include "BKE_texture.h" +#include "BKE_colorband.h" #include "BKE_particle.h" #include "smoke_API.h" diff --git a/source/blender/freestyle/intern/python/BPy_Freestyle.cpp b/source/blender/freestyle/intern/python/BPy_Freestyle.cpp index f8aef2a08ae..b2a6d53f992 100644 --- a/source/blender/freestyle/intern/python/BPy_Freestyle.cpp +++ b/source/blender/freestyle/intern/python/BPy_Freestyle.cpp @@ -157,7 +157,7 @@ static PyObject *Freestyle_blendRamp(PyObject * /*self*/, PyObject *args) return Vector_CreatePyObject(a, 3, NULL); } -#include "BKE_texture.h" /* do_colorband() */ +#include "BKE_colorband.h" /* do_colorband() */ static char Freestyle_evaluateColorRamp___doc__[] = ".. function:: evaluateColorRamp(ramp, in)\n" diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c index f39cad20b9b..b46a1b6f48e 100644 --- a/source/blender/gpu/intern/gpu_material.c +++ b/source/blender/gpu/intern/gpu_material.c @@ -47,13 +47,13 @@ #include "BLI_utildefines.h" #include "BKE_anim.h" +#include "BKE_colorband.h" #include "BKE_colortools.h" #include "BKE_global.h" #include "BKE_image.h" #include "BKE_main.h" #include "BKE_node.h" #include "BKE_scene.h" -#include "BKE_texture.h" #include "BKE_group.h" #include "IMB_imbuf_types.h" diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c index 78614bebceb..816ab5783c6 100644 --- a/source/blender/makesrna/intern/rna_brush.c +++ b/source/blender/makesrna/intern/rna_brush.c @@ -128,7 +128,7 @@ const EnumPropertyItem rna_enum_brush_image_tool_items[] = { #include "RNA_access.h" -#include "BKE_texture.h" +#include "BKE_colorband.h" #include "BKE_brush.h" #include "BKE_icons.h" #include "BKE_paint.h" diff --git a/source/blender/makesrna/intern/rna_color.c b/source/blender/makesrna/intern/rna_color.c index 51c7e93f3ef..95b14ab11dd 100644 --- a/source/blender/makesrna/intern/rna_color.c +++ b/source/blender/makesrna/intern/rna_color.c @@ -52,13 +52,13 @@ #include "MEM_guardedalloc.h" +#include "BKE_colorband.h" #include "BKE_colortools.h" #include "BKE_depsgraph.h" #include "BKE_image.h" #include "BKE_movieclip.h" #include "BKE_node.h" #include "BKE_sequencer.h" -#include "BKE_texture.h" #include "BKE_linestyle.h" #include "ED_node.h" diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c index bb0005e7a3e..ea712f993f1 100644 --- a/source/blender/makesrna/intern/rna_material.c +++ b/source/blender/makesrna/intern/rna_material.c @@ -85,6 +85,7 @@ const EnumPropertyItem rna_enum_ramp_blend_items[] = { #include "DNA_screen_types.h" #include "DNA_space_types.h" +#include "BKE_colorband.h" #include "BKE_context.h" #include "BKE_depsgraph.h" #include "BKE_main.h" diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c index 77d7f7833c6..4ffd1f00426 100644 --- a/source/blender/makesrna/intern/rna_smoke.c +++ b/source/blender/makesrna/intern/rna_smoke.c @@ -52,10 +52,10 @@ #ifdef RNA_RUNTIME +#include "BKE_colorband.h" #include "BKE_context.h" #include "BKE_depsgraph.h" #include "BKE_particle.h" -#include "BKE_texture.h" #include "smoke_API.h" diff --git a/source/blender/makesrna/intern/rna_texture.c b/source/blender/makesrna/intern/rna_texture.c index a78b3242a66..831fc8beb89 100644 --- a/source/blender/makesrna/intern/rna_texture.c +++ b/source/blender/makesrna/intern/rna_texture.c @@ -112,6 +112,7 @@ static const EnumPropertyItem blend_type_items[] = { #include "RNA_access.h" +#include "BKE_colorband.h" #include "BKE_context.h" #include "BKE_depsgraph.h" #include "BKE_image.h" diff --git a/source/blender/nodes/composite/node_composite_util.h b/source/blender/nodes/composite/node_composite_util.h index 2dac0cc639a..22c5e6f9507 100644 --- a/source/blender/nodes/composite/node_composite_util.h +++ b/source/blender/nodes/composite/node_composite_util.h @@ -42,6 +42,7 @@ #include "BLT_translation.h" +#include "BKE_colorband.h" #include "BKE_colortools.h" #include "BKE_image.h" #include "BKE_texture.h" diff --git a/source/blender/nodes/shader/node_shader_util.h b/source/blender/nodes/shader/node_shader_util.h index 4cb39e0f13b..a902ede8aa7 100644 --- a/source/blender/nodes/shader/node_shader_util.h +++ b/source/blender/nodes/shader/node_shader_util.h @@ -55,6 +55,7 @@ #include "BLI_threads.h" #include "BLI_utildefines.h" +#include "BKE_colorband.h" #include "BKE_colortools.h" #include "BKE_global.h" #include "BKE_image.h" diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_pointdensity.c b/source/blender/nodes/shader/nodes/node_shader_tex_pointdensity.c index 8748c884a25..436eeeefb4a 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tex_pointdensity.c +++ b/source/blender/nodes/shader/nodes/node_shader_tex_pointdensity.c @@ -27,7 +27,6 @@ #include "../node_shader_util.h" -#include "BKE_texture.h" #include "RE_render_ext.h" diff --git a/source/blender/nodes/texture/node_texture_util.h b/source/blender/nodes/texture/node_texture_util.h index 2263c271ccf..f6af5b1b6ca 100644 --- a/source/blender/nodes/texture/node_texture_util.h +++ b/source/blender/nodes/texture/node_texture_util.h @@ -53,6 +53,7 @@ #include "BLI_threads.h" #include "BLI_utildefines.h" +#include "BKE_colorband.h" #include "BKE_colortools.h" #include "BKE_global.h" #include "BKE_image.h" diff --git a/source/blender/render/intern/source/pointdensity.c b/source/blender/render/intern/source/pointdensity.c index fb047aad897..1fd6cec0d4d 100644 --- a/source/blender/render/intern/source/pointdensity.c +++ b/source/blender/render/intern/source/pointdensity.c @@ -48,6 +48,7 @@ #include "DNA_particle_types.h" #include "DNA_texture_types.h" +#include "BKE_colorband.h" #include "BKE_deform.h" #include "BKE_DerivedMesh.h" #include "BKE_lattice.h" @@ -55,7 +56,6 @@ #include "BKE_object.h" #include "BKE_particle.h" #include "BKE_scene.h" -#include "BKE_texture.h" #include "BKE_colortools.h" #include "render_types.h" diff --git a/source/blender/render/intern/source/render_texture.c b/source/blender/render/intern/source/render_texture.c index 91d1f63a1be..db0f2b57d90 100644 --- a/source/blender/render/intern/source/render_texture.c +++ b/source/blender/render/intern/source/render_texture.c @@ -54,6 +54,7 @@ #include "BKE_node.h" #include "BKE_animsys.h" +#include "BKE_colorband.h" #include "BKE_DerivedMesh.h" #include "BKE_global.h" #include "BKE_main.h" diff --git a/source/blender/render/intern/source/shadeoutput.c b/source/blender/render/intern/source/shadeoutput.c index 8dea0930b9e..75fb6e8a240 100644 --- a/source/blender/render/intern/source/shadeoutput.c +++ b/source/blender/render/intern/source/shadeoutput.c @@ -27,7 +27,6 @@ * \ingroup render */ - #include #include #include @@ -36,10 +35,9 @@ #include "BLI_math.h" #include "BLI_utildefines.h" +#include "BKE_colorband.h" #include "BKE_colortools.h" #include "BKE_material.h" -#include "BKE_texture.h" - #include "DNA_group_types.h" #include "DNA_lamp_types.h" -- cgit v1.2.3