Cleanup: extract BKE_colorband from BKE_texture

This commit is contained in:
Campbell Barton 2017-12-07 15:36:26 +11:00
parent 6d31eb015c
commit cc811d1fd6
Notes: blender-bot 2023-02-14 07:39:44 +01:00
Referenced by commit 237df2f860, Fix Collada building
35 changed files with 474 additions and 392 deletions

View File

@ -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__ */

View File

@ -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);

View File

@ -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

View File

@ -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"

View File

@ -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;
}

View File

@ -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"

View File

@ -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"

View File

@ -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). */

View File

@ -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"

View File

@ -25,7 +25,7 @@
#ifdef __cplusplus
extern "C" {
#endif
# include "BKE_texture.h"
# include "BKE_colorband.h"
#ifdef __cplusplus
}
#endif

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -42,6 +42,7 @@
#include "BLT_translation.h"
#include "BKE_colorband.h"
#include "BKE_colortools.h"
#include "BKE_image.h"
#include "BKE_texture.h"

View File

@ -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"

View File

@ -27,7 +27,6 @@
#include "../node_shader_util.h"
#include "BKE_texture.h"
#include "RE_render_ext.h"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -27,7 +27,6 @@
* \ingroup render
*/
#include <stdio.h>
#include <float.h>
#include <math.h>
@ -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"