Added RNA for EnvMaps. Also some more properties for Textures.
[blender.git] / source / blender / makesrna / intern / rna_texture.c
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * Contributor(s): Blender Foundation (2008).
21  *
22  * ***** END GPL LICENSE BLOCK *****
23  */
24
25 #include <float.h>
26 #include <stdlib.h>
27
28 #include "RNA_define.h"
29 #include "RNA_types.h"
30
31 #include "rna_internal.h"
32
33 #include "DNA_texture_types.h"
34
35 #ifdef RNA_RUNTIME
36
37 #else
38
39 void rna_def_environmental_map(BlenderRNA *brna)
40 {
41         StructRNA *srna;
42         PropertyRNA *prop;
43
44         static EnumPropertyItem prop_source_items[] = {
45                 {ENV_STATIC, "STATIC", "Static", ""},
46                 {ENV_ANIM, "ANIMATED", "Animated", ""},
47                 {ENV_LOAD, "LOAD", "Load", ""},
48                 {0, NULL, NULL, NULL}};
49
50         static EnumPropertyItem prop_type_items[] = {
51                 {ENV_CUBE, "CUBE", "Cube", "Use environment map with six cube sides."},
52                 {ENV_PLANE, "PLANE", "Plane", "Only one side is rendered, with Z axis pointing in direction of image."},
53                 {0, NULL, NULL, NULL}};
54
55         srna= RNA_def_struct(brna, "EnvironmentalMap", NULL);
56         RNA_def_struct_sdna(srna, "EnvMap");
57         RNA_def_struct_ui_text(srna, "EnvironmentalMap", "DOC_BROKEN");
58         
59         prop= RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
60         RNA_def_property_pointer_sdna(prop, NULL, "ima");
61         RNA_def_property_struct_type(prop, "Image");
62         RNA_def_property_ui_text(prop, "Image", "");
63
64         prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
65         RNA_def_property_enum_sdna(prop, NULL, "type");
66         RNA_def_property_enum_items(prop, prop_type_items);
67         RNA_def_property_ui_text(prop, "Type", "");
68
69         prop= RNA_def_property(srna, "source", PROP_ENUM, PROP_NONE);
70         RNA_def_property_enum_sdna(prop, NULL, "stype");
71         RNA_def_property_enum_items(prop, prop_source_items);
72         RNA_def_property_ui_text(prop, "Source", "");
73
74         prop= RNA_def_property(srna, "clip_start", PROP_FLOAT, PROP_NONE);
75         RNA_def_property_float_sdna(prop, NULL, "clipsta");
76         RNA_def_property_range(prop, 0.01, FLT_MAX);
77         RNA_def_property_ui_range(prop, 0.01, 50, 100, 2);
78         RNA_def_property_ui_text(prop, "Clip Start", "Objects nearer than this are not visible to map.");
79
80         prop= RNA_def_property(srna, "clip_end", PROP_FLOAT, PROP_NONE);
81         RNA_def_property_float_sdna(prop, NULL, "clipend");
82         RNA_def_property_range(prop, 0.01, FLT_MAX);
83         RNA_def_property_ui_range(prop, 0.01, 50, 100, 2);
84         RNA_def_property_ui_text(prop, "Clip Start", "Objects further than this are not visible to map.");
85
86         prop= RNA_def_property(srna, "zoom", PROP_FLOAT, PROP_NONE);
87         RNA_def_property_float_sdna(prop, NULL, "viewscale");
88         RNA_def_property_range(prop, 0.01, FLT_MAX);
89         RNA_def_property_ui_range(prop, 0.5, 5, 100, 2);
90         RNA_def_property_ui_text(prop, "Zoom", "");
91
92         /* XXX: EnvMap.notlay */
93         
94         prop= RNA_def_property(srna, "Resolution", PROP_INT, PROP_NONE);
95         RNA_def_property_int_sdna(prop, NULL, "cuberes");
96         RNA_def_property_range(prop, 50, 4096);
97         RNA_def_property_ui_text(prop, "Resolution", "Pixel resolution of the rendered environment map.");
98
99         prop= RNA_def_property(srna, "depth", PROP_INT, PROP_NONE);
100         RNA_def_property_range(prop, 0, 5);
101         RNA_def_property_ui_text(prop, "Depth", "Number of times a map will be rendered recursively (mirror effects.)");
102 }
103
104 void RNA_def_texture(BlenderRNA *brna)
105 {
106         StructRNA *srna;
107         PropertyRNA *prop;
108
109         static EnumPropertyItem prop_type_items[] = {
110                 {TEX_CLOUDS, "CLOUDS", "Clouds", ""},
111                 {TEX_WOOD, "WOOD", "Wood", ""},
112                 {TEX_MARBLE, "MARBLE", "Marble", ""},
113                 {TEX_MAGIC, "MAGIC", "Magic", ""},
114                 {TEX_BLEND, "BLEND", "Blend", ""},
115                 {TEX_STUCCI, "STUCCI", "Stucci", ""},
116                 {TEX_NOISE, "NOISE", "Noise", ""},
117                 {TEX_IMAGE, "IMAGE", "Image", ""},
118                 {TEX_PLUGIN, "PLUGIN", "Plugin", ""},
119                 {TEX_ENVMAP, "ENVIRONMENTAL_MAP", "Environmental Map", ""},
120                 {TEX_MUSGRAVE, "MUSGRAVE", "Musgrave", ""},
121                 {TEX_VORONOI, "VORONOI", "Voronoi", ""},
122                 {TEX_DISTNOISE, "DISTORTED_NOISE", "Distorted Noise", ""},
123                 {0, NULL, NULL, NULL}};
124
125         static EnumPropertyItem prop_distance_metric_items[] = {
126                 {TEX_DISTANCE, "DISTANCE", "Actual Distance", ""},
127                 {TEX_DISTANCE_SQUARED, "DISTANCE_SQUARED", "Distance Squared", ""},
128                 {TEX_MANHATTAN, "MANHATTAN", "Manhattan", ""},
129                 {TEX_CHEBYCHEV, "CHEBYCHEV", "Chebychev", ""},
130                 {TEX_MINKOVSKY_HALF, "MINKOVSKY_HALF", "Minkovsky 1/2", ""},
131                 {TEX_MINKOVSKY_FOUR, "MINKOVSKY_FOUR", "Minkovsky 4", ""},
132                 {TEX_MINKOVSKY, "MINKOVSKY", "Minkovsky", ""},
133                 {0, NULL, NULL, NULL}};
134
135         static EnumPropertyItem prop_color_type_items[] = {
136                 /* XXX: OK names / descriptions? */
137                 {TEX_INTENSITY, "INTENSITY", "Intensity", "Only calculate intensity."},
138                 {TEX_COL1, "POSITION", "Position", "Color cells by position."},
139                 {TEX_COL2, "POSITION_OUTLINE", "Position and Outline", "Use position plus an outline based on F2-F.1"},
140                 {TEX_COL3, "POSITION_OUTLINE_INTENSITY", "Position, Outline, and Intensity", "Multiply position and outline by intensity."},
141                 {0, NULL, NULL, NULL}};
142
143         static EnumPropertyItem prop_noise_basis_items[] = {
144                 {TEX_BLENDER, "BLENDER_ORIGINAL", "Blender Original", ""},
145                 {TEX_STDPERLIN, "ORIGINAL_PERLIN", "Original Perlin", ""},
146                 {TEX_NEWPERLIN, "IMPROVED_PERLIN", "Improved Perlin", ""},
147                 {TEX_VORONOI_F1, "VORONOI_F1", "Voronoi F1", ""},
148                 {TEX_VORONOI_F2, "VORONOI_F2", "Voronoi F2", ""},
149                 {TEX_VORONOI_F3, "VORONOI_F3", "Voronoi F3", ""},
150                 {TEX_VORONOI_F4, "VORONOI_F4", "Voronoi F4", ""},
151                 {TEX_VORONOI_F2F1, "VORONOI_F2_F1", "Voronoi F2-F1", ""},
152                 {TEX_VORONOI_CRACKLE, "VORONOI_CRACKLE", "Voronoi Crackle", ""},
153                 {TEX_CELLNOISE, "CELL_NOISE", "Cell Noise", ""},
154                 {0, NULL, NULL, NULL}};
155
156         rna_def_environmental_map(brna);
157
158         srna= RNA_def_struct(brna, "Texture", "ID");
159         RNA_def_struct_sdna(srna, "Tex");
160         RNA_def_struct_ui_text(srna, "Texture", "DOC_BROKEN");
161
162         prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
163         RNA_def_property_enum_items(prop, prop_type_items);
164         RNA_def_property_ui_text(prop, "Type", "");
165
166         prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
167         RNA_def_property_float_sdna(prop, NULL, "noisesize");
168         RNA_def_property_range(prop, 0.0001, FLT_MAX);
169         RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
170         RNA_def_property_ui_text(prop, "Noise Size", "");
171
172         prop= RNA_def_property(srna, "turbulance", PROP_FLOAT, PROP_NONE);
173         RNA_def_property_float_sdna(prop, NULL, "turbul");
174         RNA_def_property_range(prop, 0, FLT_MAX);
175         RNA_def_property_ui_range(prop, 0, 200, 10, 2);
176         RNA_def_property_ui_text(prop, "Turbulance", "");
177
178         prop= RNA_def_property(srna, "brightness", PROP_FLOAT, PROP_NONE);
179         RNA_def_property_float_sdna(prop, NULL, "bright");
180         RNA_def_property_range(prop, 0, 2);
181         RNA_def_property_ui_text(prop, "Brightness", "");
182
183         prop= RNA_def_property(srna, "contrast", PROP_FLOAT, PROP_NONE);
184         RNA_def_property_range(prop, 0.01, 5);
185         RNA_def_property_ui_text(prop, "Contrast", "");
186
187         /* XXX: would be nicer to have this as a color selector?
188            but the values can go past [0,1]. */
189         prop= RNA_def_property(srna, "rgb_factor", PROP_FLOAT, PROP_NONE);
190         RNA_def_property_float_sdna(prop, NULL, "rfac");
191         RNA_def_property_array(prop, 3);
192         RNA_def_property_range(prop, 0, 2);
193         RNA_def_property_ui_text(prop, "RGB Factor", "");
194
195         /* XXX: tex->filtersize */
196
197         /* Musgrave */
198         prop= RNA_def_property(srna, "highest_dimension", PROP_FLOAT, PROP_NONE);
199         RNA_def_property_float_sdna(prop, NULL, "mg_H");
200         RNA_def_property_range(prop, 0.0001, 2);
201         RNA_def_property_ui_text(prop, "Highest Dimension", "Highest fractal dimension for musgrave.");
202
203         prop= RNA_def_property(srna, "lacunarity", PROP_FLOAT, PROP_NONE);
204         RNA_def_property_float_sdna(prop, NULL, "mg_lacunarity");
205         RNA_def_property_range(prop, 0, 6);
206         RNA_def_property_ui_text(prop, "Lacunarity", "Gap between succesive frequencies for musgrave.");
207
208         prop= RNA_def_property(srna, "octaves", PROP_FLOAT, PROP_NONE);
209         RNA_def_property_float_sdna(prop, NULL, "mg_octaves");
210         RNA_def_property_range(prop, 0, 8);
211         RNA_def_property_ui_text(prop, "Octaves", "Number of frequencies used for musgrave.");
212
213         prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE);
214         RNA_def_property_float_sdna(prop, NULL, "mg_offset");
215         RNA_def_property_range(prop, 0, 6);
216         RNA_def_property_ui_text(prop, "Offset", "The fractal offset for musgrave.");
217
218         prop= RNA_def_property(srna, "gain", PROP_FLOAT, PROP_NONE);
219         RNA_def_property_float_sdna(prop, NULL, "mg_gain");
220         RNA_def_property_range(prop, 0, 6);
221         RNA_def_property_ui_text(prop, "Gain", "The gain multiplier for musgrave.");
222
223         /* Distorted Noise */
224         prop= RNA_def_property(srna, "distortion_amount", PROP_FLOAT, PROP_NONE);
225         RNA_def_property_float_sdna(prop, NULL, "dist_amount");
226         RNA_def_property_range(prop, 0, 10);
227         RNA_def_property_ui_text(prop, "Distortion Amount", "");
228
229         /* Musgrave / Voronoi */
230         prop= RNA_def_property(srna, "noise_intensity", PROP_FLOAT, PROP_NONE);
231         RNA_def_property_float_sdna(prop, NULL, "ns_outscale");
232         RNA_def_property_range(prop, 0, 10);
233         RNA_def_property_ui_text(prop, "Noise Intensity", "");
234
235         /* Voronoi */
236         prop= RNA_def_property(srna, "feature_weights", PROP_FLOAT, PROP_NONE);
237         RNA_def_property_float_sdna(prop, NULL, "vn_w1");
238         RNA_def_property_array(prop, 4);
239         RNA_def_property_range(prop, -2, 2);
240         RNA_def_property_ui_text(prop, "Feature Weights", "");
241
242         prop= RNA_def_property(srna, "minkovsky_exponent", PROP_FLOAT, PROP_NONE);
243         RNA_def_property_float_sdna(prop, NULL, "vn_mexp");
244         RNA_def_property_range(prop, 0.01, 10);
245         RNA_def_property_ui_text(prop, "Minkovsky Exponent", "");
246
247         prop= RNA_def_property(srna, "distance_metric", PROP_ENUM, PROP_NONE);
248         RNA_def_property_enum_sdna(prop, NULL, "vn_distm");
249         RNA_def_property_enum_items(prop, prop_distance_metric_items);
250         RNA_def_property_ui_text(prop, "Distance Metric", "");
251
252         prop= RNA_def_property(srna, "color_type", PROP_ENUM, PROP_NONE);
253         RNA_def_property_enum_sdna(prop, NULL, "vn_coltype");
254         RNA_def_property_enum_items(prop, prop_color_type_items);
255         RNA_def_property_ui_text(prop, "Color Type", "");
256
257         prop= RNA_def_property(srna, "noise_basis", PROP_ENUM, PROP_NONE);
258         RNA_def_property_enum_sdna(prop, NULL, "noisebasis");
259         RNA_def_property_enum_items(prop, prop_noise_basis_items);
260         RNA_def_property_ui_text(prop, "Noise Basis", "");
261
262         /* XXX: noisebasis2 */
263         /* XXX: imaflag */
264         /* XXX: flag */
265         /* XXX: stype */
266
267         /* XXX: did this as an array, but needs better descriptions than "1 2 3 4"
268                 perhaps a new subtype could be added? */
269         prop= RNA_def_property(srna, "crop_rectangle", PROP_FLOAT, PROP_NONE);
270         RNA_def_property_float_sdna(prop, NULL, "cropxmin");
271         RNA_def_property_array(prop, 4);
272         RNA_def_property_range(prop, -10, 10);
273         RNA_def_property_ui_text(prop, "Crop Rectangle", "");
274         
275         prop= RNA_def_property(srna, "checker_separation", PROP_FLOAT, PROP_NONE);
276         RNA_def_property_float_sdna(prop, NULL, "checkerdist");
277         RNA_def_property_range(prop, 0, 1);
278         RNA_def_property_ui_text(prop, "Checker Separation", "");
279         
280         prop= RNA_def_property(srna, "nabla", PROP_FLOAT, PROP_NONE);
281         RNA_def_property_range(prop, 0.001, 0.1);
282         RNA_def_property_ui_range(prop, 0.001, 0.1, 1, 2);
283         RNA_def_property_ui_text(prop, "Nabla", "Size of derivative offset used for calculating normal.");
284
285         prop= RNA_def_property(srna, "normal_factor", PROP_FLOAT, PROP_NONE);
286         RNA_def_property_float_sdna(prop, NULL, "norfac");
287         RNA_def_property_range(prop, 0, 25);
288         RNA_def_property_ui_text(prop, "Normal Factor", "Amount the texture affects normal values.");
289
290         rna_def_ipo_common(srna);
291        
292         prop= RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
293         RNA_def_property_pointer_sdna(prop, NULL, "ima");
294         RNA_def_property_struct_type(prop, "Image");
295         RNA_def_property_ui_text(prop, "Image", "");
296
297         /* XXX: plugin */
298
299         /*
300         prop= RNA_def_property(srna, "color_band", PROP_POINTER, PROP_NONE);
301         RNA_def_property_pointer_sdna(prop, NULL, "coba");
302         RNA_def_property_struct_type(prop, "ColorBand");
303         RNA_def_property_ui_text(prop, "Color Band", "");*/
304
305         prop= RNA_def_property(srna, "environmental_map", PROP_POINTER, PROP_NONE);
306         RNA_def_property_pointer_sdna(prop, NULL, "env");
307         RNA_def_property_struct_type(prop, "EnvironmentalMap");
308         RNA_def_property_ui_text(prop, "Environmental Map", "");
309
310         /* XXX: preview */
311
312 }
313
314 #endif