Fix warning from rB9925606539.
[blender.git] / source / blender / render / RE_texture.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2006 by Blender Foundation
17  * All rights reserved.
18  */
19 /** \file
20  * \ingroup render
21  *
22  * This include is for non-render pipeline exports (still old cruft here).
23  */
24
25 #pragma once
26
27 #include "BLI_compiler_attrs.h"
28
29 /* called by meshtools */
30 struct Depsgraph;
31 struct ImagePool;
32 struct MTex;
33 struct Tex;
34
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38
39 /* texture_procedural.c */
40
41 /**
42  * \param pool: Thread pool, may be NULL.
43  *
44  * \return True if the texture has color, otherwise false.
45  */
46 bool RE_texture_evaluate(const struct MTex *mtex,
47                          const float vec[3],
48                          int thread,
49                          struct ImagePool *pool,
50                          bool skip_load_image,
51                          bool texnode_preview,
52                          /* Return arguments. */
53                          float *r_intensity,
54                          float r_rgba[4]) ATTR_NONNULL(1, 2, 7, 8);
55
56 /**
57  * \param in: Destination
58  * \param tex: Texture.
59  * \param out: Previous color.
60  * \param fact: Texture strength.
61  * \param facg: Button strength value.
62  */
63 void texture_rgb_blend(
64     float in[3], const float tex[3], const float out[3], float fact, float facg, int blendtype);
65 float texture_value_blend(float tex, float out, float fact, float facg, int blendtype);
66
67 void RE_texture_rng_init(void);
68 void RE_texture_rng_exit(void);
69
70 /* texture_image.c */
71
72 void ibuf_sample(struct ImBuf *ibuf, float fx, float fy, float dx, float dy, float result[4]);
73
74 /* texture_pointdensity.c */
75
76 struct PointDensity;
77
78 void RE_point_density_cache(struct Depsgraph *depsgraph, struct PointDensity *pd);
79
80 void RE_point_density_minmax(struct Depsgraph *depsgraph,
81                              struct PointDensity *pd,
82                              float r_min[3],
83                              float r_max[3]);
84
85 /**
86  * \note Requires #RE_point_density_cache() to be called first.
87  * \note Frees point density structure after sampling.
88  */
89 void RE_point_density_sample(struct Depsgraph *depsgraph,
90                              struct PointDensity *pd,
91                              int resolution,
92                              float *values);
93
94 void RE_point_density_free(struct PointDensity *pd);
95
96 void RE_point_density_fix_linking(void);
97
98 /* texture_procedural.c */
99
100 /**
101  * Texture evaluation result.
102  * \note `tr tg tb ta` have to remain in this order for array access.
103  */
104 typedef struct TexResult {
105   float tin, tr, tg, tb, ta;
106   int talpha;
107   float *nor;
108 } TexResult;
109
110 /* This one uses nodes. */
111
112 /**
113  * \warning if the texres's values are not declared zero,
114  * check the return value to be sure the color values are set before using the r/g/b values,
115  * otherwise you may use uninitialized values - Campbell
116  *
117  * Use it for stuff which is out of render pipeline.
118  */
119 int multitex_ext(struct Tex *tex,
120                  float texvec[3],
121                  float dxt[3],
122                  float dyt[3],
123                  int osatex,
124                  struct TexResult *texres,
125                  short thread,
126                  struct ImagePool *pool,
127                  bool scene_color_manage,
128                  bool skip_load_image);
129
130 /**
131  * Nodes disabled.
132  * extern-tex doesn't support nodes (#ntreeBeginExec() can't be called when rendering is going on).
133  *
134  * Use it for stuff which is out of render pipeline.
135  */
136 int multitex_ext_safe(struct Tex *tex,
137                       const float texvec[3],
138                       struct TexResult *texres,
139                       struct ImagePool *pool,
140                       bool scene_color_manage,
141                       bool skip_load_image);
142
143 /**
144  * Only for internal node usage.
145  *
146  * this is called from the shader and texture nodes
147  * Use it from render pipeline only!
148  */
149 int multitex_nodes(struct Tex *tex,
150                    const float texvec[3],
151                    float dxt[3],
152                    float dyt[3],
153                    int osatex,
154                    struct TexResult *texres,
155                    short thread,
156                    short which_output,
157                    struct MTex *mtex,
158                    struct ImagePool *pool);
159
160 #ifdef __cplusplus
161 }
162 #endif