47ec592f70ea64f04fd12e66629e15511b58adc2
[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_texture(BlenderRNA *brna)
40 {
41         StructRNA *srna;
42         PropertyRNA *prop;
43
44         static EnumPropertyItem prop_type_items[] = {
45                 {TEX_CLOUDS, "CLOUDS", "Clouds", ""},
46                 {TEX_WOOD, "WOOD", "Wood", ""},
47                 {TEX_MARBLE, "MARBLE", "Marble", ""},
48                 {TEX_MAGIC, "MAGIC", "Magic", ""},
49                 {TEX_BLEND, "BLEND", "Blend", ""},
50                 {TEX_STUCCI, "STUCCI", "Stucci", ""},
51                 {TEX_NOISE, "NOISE", "Noise", ""},
52                 {TEX_IMAGE, "IMAGE", "Image", ""},
53                 {TEX_PLUGIN, "PLUGIN", "Plugin", ""},
54                 {TEX_ENVMAP, "ENVIRONMENTAL_MAP", "Environmental Map", ""},
55                 {TEX_MUSGRAVE, "MUSGRAVE", "Musgrave", ""},
56                 {TEX_VORONOI, "VORONOI", "Voronoi", ""},
57                 {TEX_DISTNOISE, "DISTORTED_NOISE", "Distorted Noise", ""},
58                 {0, NULL, NULL, NULL}};
59
60         static EnumPropertyItem prop_distance_metric_items[] = {
61                 {TEX_DISTANCE, "DISTANCE", "Actual Distance", ""},
62                 {TEX_DISTANCE_SQUARED, "DISTANCE_SQUARED", "Distance Squared", ""},
63                 {TEX_MANHATTAN, "MANHATTAN", "Manhattan", ""},
64                 {TEX_CHEBYCHEV, "CHEBYCHEV", "Chebychev", ""},
65                 {TEX_MINKOVSKY_HALF, "MINKOVSKY_HALF", "Minkovsky 1/2", ""},
66                 {TEX_MINKOVSKY_FOUR, "MINKOVSKY_FOUR", "Minkovsky 4", ""},
67                 {TEX_MINKOVSKY, "MINKOVSKY", "Minkovsky", ""},
68                 {0, NULL, NULL, NULL}};
69
70         static EnumPropertyItem prop_color_type_items[] = {
71                 /* XXX: OK names / descriptions? */
72                 {TEX_INTENSITY, "INTENSITY", "Intensity", "Only calculate intensity."},
73                 {TEX_COL1, "POSITION", "Position", "Color cells by position."},
74                 {TEX_COL2, "POSITION_OUTLINE", "Position and Outline", "Use position plus an outline based on F2-F.1"},
75                 {TEX_COL3, "POSITION_OUTLINE_INTENSITY", "Position, Outline, and Intensity", "Multiply position and outline by intensity."},
76                 {0, NULL, NULL, NULL}};
77
78         static EnumPropertyItem prop_noise_basis_items[] = {
79                 {TEX_BLENDER, "BLENDER_ORIGINAL", "Blender Original", ""},
80                 {TEX_STDPERLIN, "ORIGINAL_PERLIN", "Original Perlin", ""},
81                 {TEX_NEWPERLIN, "IMPROVED_PERLIN", "Improved Perlin", ""},
82                 {TEX_VORONOI_F1, "VORONOI_F1", "Voronoi F1", ""},
83                 {TEX_VORONOI_F2, "VORONOI_F2", "Voronoi F2", ""},
84                 {TEX_VORONOI_F3, "VORONOI_F3", "Voronoi F3", ""},
85                 {TEX_VORONOI_F4, "VORONOI_F4", "Voronoi F4", ""},
86                 {TEX_VORONOI_F2F1, "VORONOI_F2_F1", "Voronoi F2-F1", ""},
87                 {TEX_VORONOI_CRACKLE, "VORONOI_CRACKLE", "Voronoi Crackle", ""},
88                 {TEX_CELLNOISE, "CELL_NOISE", "Cell Noise", ""},
89                 {0, NULL, NULL, NULL}};
90
91         srna= RNA_def_struct(brna, "Texture", "ID");
92         RNA_def_struct_sdna(srna, "Tex");
93         RNA_def_struct_ui_text(srna, "Texture", "DOC_BROKEN");
94
95         prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
96         RNA_def_property_enum_items(prop, prop_type_items);
97         RNA_def_property_ui_text(prop, "Type", "");
98
99         prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
100         RNA_def_property_float_sdna(prop, NULL, "noisesize");
101         RNA_def_property_range(prop, 0.0001, FLT_MAX);
102         RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
103         RNA_def_property_ui_text(prop, "Noise Size", "");
104
105         prop= RNA_def_property(srna, "turbulance", PROP_FLOAT, PROP_NONE);
106         RNA_def_property_float_sdna(prop, NULL, "turbul");
107         RNA_def_property_range(prop, 0, FLT_MAX);
108         RNA_def_property_ui_range(prop, 0, 200, 10, 2);
109         RNA_def_property_ui_text(prop, "Turbulance", "");
110
111         prop= RNA_def_property(srna, "brightness", PROP_FLOAT, PROP_NONE);
112         RNA_def_property_float_sdna(prop, NULL, "bright");
113         RNA_def_property_range(prop, 0, 2);
114         RNA_def_property_ui_text(prop, "Brightness", "");
115
116         prop= RNA_def_property(srna, "contrast", PROP_FLOAT, PROP_NONE);
117         RNA_def_property_range(prop, 0.01, 5);
118         RNA_def_property_ui_text(prop, "Contrast", "");
119
120         /* XXX: would be nicer to have this as a color selector?
121            but the values can go past [0,1]. */
122         prop= RNA_def_property(srna, "rgb_factor", PROP_FLOAT, PROP_NONE);
123         RNA_def_property_float_sdna(prop, NULL, "rfac");
124         RNA_def_property_array(prop, 3);
125         RNA_def_property_range(prop, 0, 2);
126         RNA_def_property_ui_text(prop, "RGB Factor", "");
127
128         /* XXX: tex->filtersize */
129
130         /* Musgrave */
131         prop= RNA_def_property(srna, "highest_dimension", PROP_FLOAT, PROP_NONE);
132         RNA_def_property_float_sdna(prop, NULL, "mg_H");
133         RNA_def_property_range(prop, 0.0001, 2);
134         RNA_def_property_ui_text(prop, "Highest Dimension", "Highest fractal dimension for musgrave.");
135
136         prop= RNA_def_property(srna, "lacunarity", PROP_FLOAT, PROP_NONE);
137         RNA_def_property_float_sdna(prop, NULL, "mg_lacunarity");
138         RNA_def_property_range(prop, 0, 6);
139         RNA_def_property_ui_text(prop, "Lacunarity", "Gap between succesive frequencies for musgrave.");
140
141         prop= RNA_def_property(srna, "octaves", PROP_FLOAT, PROP_NONE);
142         RNA_def_property_float_sdna(prop, NULL, "mg_octaves");
143         RNA_def_property_range(prop, 0, 8);
144         RNA_def_property_ui_text(prop, "Lacunarity", "Number of frequencies used for musgrave.");
145
146         prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE);
147         RNA_def_property_float_sdna(prop, NULL, "mg_offset");
148         RNA_def_property_range(prop, 0, 6);
149         RNA_def_property_ui_text(prop, "Offset", "The fractal offset for musgrave.");
150
151         prop= RNA_def_property(srna, "gain", PROP_FLOAT, PROP_NONE);
152         RNA_def_property_float_sdna(prop, NULL, "mg_gain");
153         RNA_def_property_range(prop, 0, 6);
154         RNA_def_property_ui_text(prop, "Gain", "The gain multiplier for musgrave.");
155
156         /* Distorted Noise */
157         prop= RNA_def_property(srna, "distortion_amount", PROP_FLOAT, PROP_NONE);
158         RNA_def_property_float_sdna(prop, NULL, "dist_amount");
159         RNA_def_property_range(prop, 0, 10);
160         RNA_def_property_ui_text(prop, "Distortion Amount", "");
161
162         /* Musgrave / Voronoi */
163         prop= RNA_def_property(srna, "noise_intensity", PROP_FLOAT, PROP_NONE);
164         RNA_def_property_float_sdna(prop, NULL, "ns_outscale");
165         RNA_def_property_range(prop, 0, 10);
166         RNA_def_property_ui_text(prop, "Noise Intensity", "");
167
168         /* Voronoi */
169         prop= RNA_def_property(srna, "feature_weights", PROP_FLOAT, PROP_NONE);
170         RNA_def_property_float_sdna(prop, NULL, "vn_w1");
171         RNA_def_property_array(prop, 4);
172         RNA_def_property_range(prop, -2, 2);
173         RNA_def_property_ui_text(prop, "Feature Weights", "");
174
175         prop= RNA_def_property(srna, "minkovsky_exponent", PROP_FLOAT, PROP_NONE);
176         RNA_def_property_float_sdna(prop, NULL, "vn_mexp");
177         RNA_def_property_range(prop, 0.01, 10);
178         RNA_def_property_ui_text(prop, "Minkovsky Exponent", "");
179
180         prop= RNA_def_property(srna, "distance_metric", PROP_ENUM, PROP_NONE);
181         RNA_def_property_enum_sdna(prop, NULL, "vn_distm");
182         RNA_def_property_enum_items(prop, prop_distance_metric_items);
183         RNA_def_property_ui_text(prop, "Distance Metric", "");
184
185         prop= RNA_def_property(srna, "color_type", PROP_ENUM, PROP_NONE);
186         RNA_def_property_enum_sdna(prop, NULL, "vn_coltype");
187         RNA_def_property_enum_items(prop, prop_color_type_items);
188         RNA_def_property_ui_text(prop, "Color Type", "");
189
190         prop= RNA_def_property(srna, "noise_basis", PROP_ENUM, PROP_NONE);
191         RNA_def_property_enum_sdna(prop, NULL, "noisebasis");
192         RNA_def_property_enum_items(prop, prop_noise_basis_items);
193         RNA_def_property_ui_text(prop, "Noise Basis", "");
194 }
195
196 #endif