added "description" and "readonly" properties to RNA Structs (also accessible via...
[blender.git] / source / blender / makesrna / intern / rna_lamp.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 <stdlib.h>
26
27 #include "RNA_define.h"
28 #include "RNA_types.h"
29
30 #include "rna_internal.h"
31
32 #include "DNA_lamp_types.h"
33
34 #ifdef RNA_RUNTIME
35
36 static void rna_Lamp_buffer_size_set(PointerRNA *ptr, int value)
37 {
38         Lamp *la= (Lamp*)ptr->data;
39
40         CLAMP(value, 512, 10240);
41         la->bufsize= value;
42         la->bufsize &= (~15); /* round to multiple of 16 */
43 }
44
45
46 #else
47
48 void RNA_def_lamp(BlenderRNA *brna)
49 {
50         StructRNA *srna;
51         PropertyRNA *prop;
52         static EnumPropertyItem prop_type_items[] = {
53                 {LA_LOCAL, "LOCAL", "Local", ""},
54                 {LA_SUN, "SUN", "Sun", ""},
55                 {LA_SPOT, "SPOT", "Spot", ""},
56                 {LA_HEMI, "HEMI", "Hemi", ""},
57                 {LA_AREA, "AREA", "Area", ""},
58                 {0, NULL, NULL, NULL}};
59         static EnumPropertyItem prop_shadow_items[] = {
60                 {0, "NOSHADOW", "No Shadow", ""},
61                 {LA_SHAD_BUF, "BUFSHADOW", "Buffer Shadow", "Lets spotlight produce shadows using shadow buffer."},
62                 {LA_SHAD_RAY, "RAYSHADOW", "Ray Shadow", "Use ray tracing for shadow."},
63                 {0, NULL, NULL, NULL}};
64         static EnumPropertyItem prop_raysampmethod_items[] = {
65                 {LA_SAMP_CONSTANT, "CONSTANT", "Constant", ""},
66                 {LA_SAMP_HALTON, "HALTON", "Halton", ""},
67                 {LA_SHAD_RAY, "LA_SAMP_HAMMERSLEY", "Hammersley", ""},
68                 {0, NULL, NULL, NULL}};
69         static EnumPropertyItem prop_areashape_items[] = {
70                 {LA_AREA_SQUARE, "SQUARE", "Square", ""},
71                 {LA_AREA_RECT, "RECTANGLE", "Rectangle", ""},
72                 {0, NULL, NULL, NULL}};
73         static EnumPropertyItem prop_shadbuftype_items[] = {
74                 {LA_SHADBUF_REGULAR     , "REGULAR", "Classical", "Use the Classic Buffer type"},
75                 {LA_SHADBUF_IRREGULAR, "IRREGULAR", "Irregular", "Use the Irregular Shadow Buffer type."},
76                 {LA_SHADBUF_HALFWAY, "HALFWAY", "Classic-Halfway", "Use the Classic-Halfway Buffer type."},
77                 {0, NULL, NULL, NULL}};
78         static EnumPropertyItem prop_shadbuffiltertype_items[] = {
79                 {LA_SHADBUF_BOX , "BOX", "Box", "Use the Box filter"},
80                 {LA_SHADBUF_TENT, "TENT", "Tent", "Use the Tent Filter."},
81                 {LA_SHADBUF_GAUSS, "GAUSS", "Gauss", "Use the Gauss filter."},
82                 {0, NULL, NULL, NULL}};
83         static EnumPropertyItem prop_numbuffer_items[] = {
84                 {1, "1BUFF", "1", "Sample 1 Shadow Buffer."},
85                 {4, "4BUFF", "4", "Sample 4 Shadow Buffers."},
86                 {9, "9BUFF", "9", "Sample 9 Shadow Buffers."},
87                 {0, NULL, NULL, NULL}};
88         static EnumPropertyItem prop_skycolorspace_items[] = {
89                 {0, "SMPTE", "SMPTE", ""},
90                 {1, "REC709", "REC709", ""},
91                 {2, "CIE", "CIE", ""},
92                 {0, NULL, NULL, NULL}};
93         static EnumPropertyItem prop_blendmode_items[] = {
94                 {0, "MIX", "Mix", ""},
95                 {1, "ADD", "Add", ""},
96                 {2, "MULTIPLY", "Multiply", ""},
97                 {3, "SUBTRACT", "Subtract", ""},
98                 {4, "SCREEN", "Screen", ""},
99                 {5, "DIVIDE", "Divide", ""},
100                 {6, "DIFFERENCE", "Difference", ""},
101                 {7, "DARKEN", "Darken", ""},
102                 {8, "LIGHTEN", "Lighten", ""},
103                 {9, "OVERLAY", "Overlay", ""},
104                 {10, "DODGE", "Dodge", ""},
105                 {11, "BURN", "Burn", ""},
106                 {12, "HUE", "Hue", ""},
107                 {13, "SATURATION", "Saturation", ""},
108                 {14, "VALUE", "Value", ""},
109                 {15, "COLOR", "Color", ""},
110                 {0, NULL, NULL, NULL}};
111         static EnumPropertyItem prop_fallofftype_items[] = {
112                 {LA_FALLOFF_CONSTANT, "CONSTANT", "Constant", ""},
113                 {LA_FALLOFF_INVLINEAR, "INVLINEAR", "Inverse Linear", ""},
114                 {LA_FALLOFF_INVSQUARE, "INVSQUARE", "Inverse Square", ""},
115                 {LA_FALLOFF_CURVE, "CURVE", "Custom Curve", ""},
116                 {LA_FALLOFF_SLIDERS, "SLIDERS", "Lin/Quad Weighted", ""},
117                 {0, NULL, NULL, NULL}};
118
119         srna= RNA_def_struct(brna, "Lamp", "ID");
120         RNA_def_struct_ui_text(srna, "Lamp", "DOC_BROKEN");
121
122         /* Enums */
123         prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
124         RNA_def_property_enum_items(prop, prop_type_items);
125         RNA_def_property_ui_text(prop, "Type", "Type of Lamp.");
126
127         prop= RNA_def_property(srna, "sky_colorspace", PROP_ENUM, PROP_NONE);
128         RNA_def_property_enum_items(prop, prop_skycolorspace_items);
129         RNA_def_property_ui_text(prop, "Sky Color Space", "");
130
131         prop= RNA_def_property(srna, "sky_blend_type", PROP_ENUM, PROP_NONE);
132         RNA_def_property_enum_sdna(prop, NULL, "skyblendtype");
133         RNA_def_property_enum_items(prop, prop_blendmode_items);
134         RNA_def_property_ui_text(prop, "Sky Blend Type", "Blend type for how sky is combined with world sky");
135
136         prop= RNA_def_property(srna, "area_shape", PROP_ENUM, PROP_NONE);
137         RNA_def_property_enum_items(prop, prop_areashape_items);
138         RNA_def_property_ui_text(prop, "Area Shape", "Shape of the Area lamp");
139
140         prop= RNA_def_property(srna, "ray_samp_method", PROP_ENUM, PROP_NONE);
141         RNA_def_property_enum_items(prop, prop_raysampmethod_items);
142         RNA_def_property_ui_text(prop, "Ray Sample Method", "The Method in how rays are sampled");
143
144         prop= RNA_def_property(srna, "buffer_type", PROP_ENUM, PROP_NONE);
145         RNA_def_property_enum_sdna(prop, NULL, "buftype");
146         RNA_def_property_enum_items(prop, prop_shadbuftype_items);
147         RNA_def_property_ui_text(prop, "Buffer Type", "Type of Shadow Buffer.");
148
149         prop= RNA_def_property(srna, "filter_type", PROP_ENUM, PROP_NONE);
150         RNA_def_property_enum_sdna(prop, NULL, "filtertype");
151         RNA_def_property_enum_items(prop, prop_shadbuffiltertype_items);
152         RNA_def_property_ui_text(prop, "Filter Type", "Type of Shadow Buffer Filter.");
153
154         prop= RNA_def_property(srna, "buffers", PROP_ENUM, PROP_NONE);
155         RNA_def_property_enum_items(prop, prop_numbuffer_items);
156         RNA_def_property_ui_text(prop, "Sample Buffers", "Number of Buffers to sample.");
157
158         prop= RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE);
159         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); /* needs to be able to create curve mapping */
160         RNA_def_property_enum_items(prop, prop_fallofftype_items);
161         RNA_def_property_ui_text(prop, "Falloff Type", "Intensity Decay with distance.");
162
163         prop= RNA_def_property(srna, "falloff_curve", PROP_POINTER, PROP_NONE);
164         RNA_def_property_pointer_sdna(prop, NULL, "curfalloff");
165         RNA_def_property_ui_text(prop, "Falloff Curve", "Custom Lamp Falloff Curve");
166
167         /* Number values */
168         prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE);
169         RNA_def_property_float_sdna(prop, NULL, "dist");
170         RNA_def_property_range(prop, 0.0f, 9999.0f);
171         RNA_def_property_ui_text(prop, "Distance", "Distance that the lamp emits light.");
172
173         prop= RNA_def_property(srna, "linear_attenuation", PROP_FLOAT, PROP_NONE);
174         RNA_def_property_float_sdna(prop, NULL, "att1");
175         RNA_def_property_range(prop, 0.0f, 1.0f);
176         RNA_def_property_ui_text(prop, "Linear Attenuation", "Linear distance attentuation.");
177
178         prop= RNA_def_property(srna, "quadratic_attenuation", PROP_FLOAT, PROP_NONE);
179         RNA_def_property_float_sdna(prop, NULL, "att2");
180         RNA_def_property_range(prop, 0.0f, 1.0f);
181         RNA_def_property_ui_text(prop, "Quadratic Attenuation", "Quadratic distance attentuation.");
182
183         prop= RNA_def_property(srna, "spot_blend", PROP_FLOAT, PROP_NONE);
184         RNA_def_property_float_sdna(prop, NULL, "spotblend");
185         RNA_def_property_range(prop, 0.0f ,1.0f);
186         RNA_def_property_ui_text(prop, "Spot Blend", "The softeness of the spotlight edge.");
187
188         prop= RNA_def_property(srna, "spot_size", PROP_FLOAT, PROP_NONE);
189         RNA_def_property_float_sdna(prop, NULL, "spotsize");
190         RNA_def_property_range(prop, 1.0f ,180.0f);
191         RNA_def_property_ui_text(prop, "Spot Size", "The angle of the spotlight beam in degrees.");
192
193         prop= RNA_def_property(srna, "clip_start", PROP_FLOAT, PROP_NONE);
194         RNA_def_property_float_sdna(prop, NULL, "clipsta");
195         RNA_def_property_range(prop, 0.0f, 9999.0f);
196         RNA_def_property_ui_text(prop, "Clip Start", "Distance that the buffer calculations start.");
197
198         prop= RNA_def_property(srna, "clip_end", PROP_FLOAT, PROP_NONE);
199         RNA_def_property_float_sdna(prop, NULL, "clipend");
200         RNA_def_property_range(prop, 0.0f, 9999.0f);
201         RNA_def_property_ui_text(prop, "Clip End", "Distance that the buffer calculations finish.");
202
203         prop= RNA_def_property(srna, "bias", PROP_FLOAT, PROP_NONE);
204         RNA_def_property_range(prop, 0.0f, 5.0f);
205         RNA_def_property_ui_text(prop, "Bias", "Shadow Map sampling bias.");
206
207         prop= RNA_def_property(srna, "soft", PROP_FLOAT, PROP_NONE);
208         RNA_def_property_range(prop, 0.0f, 100.0f);
209         RNA_def_property_ui_text(prop, "Soft", "Size of shadow sampling area.");
210
211         prop= RNA_def_property(srna, "samples", PROP_INT, PROP_NONE);
212         RNA_def_property_int_sdna(prop, NULL, "samp");
213         RNA_def_property_range(prop, 1,16);
214         RNA_def_property_ui_text(prop, "Samples", "Number of shadow map samples.");
215
216         prop= RNA_def_property(srna, "energy", PROP_FLOAT, PROP_NONE);
217         RNA_def_property_range(prop, 0.0f, 10.0f);
218         RNA_def_property_ui_text(prop, "Energy", "Amount of light that the lamp emits.");
219
220         prop= RNA_def_property(srna, "ray_samples", PROP_INT, PROP_NONE);
221         RNA_def_property_int_sdna(prop, NULL, "ray_samp");
222         RNA_def_property_range(prop, 1, 16);
223         RNA_def_property_ui_text(prop, "Ray Samples", "Amount of samples taken extra (samples x samples).");
224
225         prop= RNA_def_property(srna, "ray_sampy", PROP_INT, PROP_NONE);
226         RNA_def_property_range(prop, 1,16);
227         RNA_def_property_ui_text(prop, "Ray Samples Y", "Amount of samples taken extra (samples x samples).");
228
229         prop= RNA_def_property(srna, "area_size", PROP_FLOAT, PROP_NONE);
230         RNA_def_property_range(prop, 0.0f, 100.0f);
231         RNA_def_property_ui_text(prop, "Area Size", "Size of the area of the Area Lamp.");
232
233         prop= RNA_def_property(srna, "area_sizey", PROP_FLOAT, PROP_NONE);
234         RNA_def_property_range(prop, 0.0f, 100.0f);
235         RNA_def_property_ui_text(prop, "Area Size Y", "Size of the area of the Area Lamp.");
236
237         prop= RNA_def_property(srna, "adapt_thresh", PROP_FLOAT, PROP_NONE);
238         RNA_def_property_range(prop, 0.0f, 1.0f);
239         RNA_def_property_ui_text(prop, "Adapt Threshold", "Threshold for Adaptive Sampling.");
240
241         prop= RNA_def_property(srna, "buffer_size", PROP_INT, PROP_NONE);
242         RNA_def_property_int_sdna(prop, NULL, "bufsize");
243         RNA_def_property_range(prop, 512, 10240);
244         RNA_def_property_ui_text(prop, "Buffer Size", "Sets the size of the shadow buffer to nearest multiple of 16");
245         RNA_def_property_int_funcs(prop, NULL, "rna_Lamp_buffer_size_set", NULL);
246
247         prop= RNA_def_property(srna, "halo_intensity", PROP_FLOAT, PROP_NONE);
248         RNA_def_property_float_sdna(prop, NULL, "haint");
249         RNA_def_property_range(prop, 0.0f, 5.0f);
250         RNA_def_property_ui_text(prop, "Halo Intensity", "Intensity of Spot Halo");
251
252         prop= RNA_def_property(srna, "horizon_brightness", PROP_FLOAT, PROP_NONE);
253         RNA_def_property_range(prop, 0.0f, 20.0f);
254         RNA_def_property_ui_text(prop, "Hor. Bright", "horizon brightness");
255
256         prop= RNA_def_property(srna, "spread", PROP_FLOAT, PROP_NONE);
257         RNA_def_property_range(prop, 0.0f, 10.0f);
258         RNA_def_property_ui_text(prop, "Hor. Spread", "horizon Spread");
259
260         prop= RNA_def_property(srna, "sun_brightness", PROP_FLOAT, PROP_NONE);
261         RNA_def_property_range(prop, 0.0f, 10.0f);
262         RNA_def_property_ui_text(prop, "Sun Bright", "Sun Brightness");
263
264         prop= RNA_def_property(srna, "sun_size", PROP_FLOAT, PROP_NONE);
265         RNA_def_property_range(prop, 0.0f, 10.0f);
266         RNA_def_property_ui_text(prop, "Sun Size", "Sun Size");
267
268         prop= RNA_def_property(srna, "backscattered_light", PROP_FLOAT, PROP_NONE);
269         RNA_def_property_range(prop, 0.0f, 1.0f);
270         RNA_def_property_ui_text(prop, "Back Light", "Backscatter Light");
271
272         prop= RNA_def_property(srna, "sun_intensity", PROP_FLOAT, PROP_NONE);
273         RNA_def_property_range(prop, 0.0f, 10.0f);
274         RNA_def_property_ui_text(prop, "Sun Intens", "Sun Intensity");
275
276         prop= RNA_def_property(srna, "atm_turbidity", PROP_FLOAT, PROP_NONE);
277         RNA_def_property_range(prop, 0.0f, 30.0f);
278         RNA_def_property_ui_text(prop, "Turbidity", "Sky Tubidity");
279
280         prop= RNA_def_property(srna, "atm_inscattering_factor", PROP_FLOAT, PROP_NONE);
281         RNA_def_property_range(prop, 0.0f, 1.0f);
282         RNA_def_property_ui_text(prop, "Inscatter", "Scatter contribution factor");
283
284         prop= RNA_def_property(srna, "atm_extinction_factor", PROP_FLOAT, PROP_NONE);
285         RNA_def_property_range(prop, 0.0f, 1.0f);
286         RNA_def_property_ui_text(prop, "Extinction", "Extinction scattering contribution factor");
287
288         prop= RNA_def_property(srna, "atm_distance_factor", PROP_FLOAT, PROP_NONE);
289         RNA_def_property_range(prop, 0.0f, 500.0f);
290         RNA_def_property_ui_text(prop, "Atmos Distance", "Scale blender distance to real distance");
291
292         prop= RNA_def_property(srna, "sky_blend_factor", PROP_FLOAT, PROP_NONE);
293         RNA_def_property_float_sdna(prop, NULL, "skyblendfac");
294         RNA_def_property_range(prop, 0.0f, 2.0f);
295         RNA_def_property_ui_text(prop, "Sky Blend Factor", "Blend factor with sky");
296
297         prop= RNA_def_property(srna, "sky_exposure", PROP_FLOAT, PROP_NONE);
298         RNA_def_property_range(prop, 0.0f, 20.0f);
299         RNA_def_property_ui_text(prop, "Sky Exposure", "Exposure correction");
300
301
302         /*short sky_colorspace, pad4;*/
303
304         /* Colors */
305         prop= RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
306         RNA_def_property_float_sdna(prop, NULL, "r");
307         RNA_def_property_array(prop, 3);
308         RNA_def_property_ui_text(prop, "Color", "");
309         RNA_def_property_ui_range(prop, 0.0f, 1.0f, 10.0f, 3.0f);
310
311         prop= RNA_def_property(srna, "shadow_color", PROP_FLOAT, PROP_COLOR);
312         RNA_def_property_float_sdna(prop, NULL, "shdwr");
313         RNA_def_property_array(prop, 3);
314         RNA_def_property_ui_text(prop, "Shadow Color", "");
315         RNA_def_property_ui_range(prop, 0.0f, 1.0f, 10.0f, 3.0f);
316
317         /* Booleans */
318         prop= RNA_def_property(srna, "auto_clip_start", PROP_BOOLEAN, PROP_NONE);
319         RNA_def_property_boolean_sdna(prop, NULL, "bufflag", LA_SHADBUF_AUTO_START);
320         RNA_def_property_ui_text(prop, "Autoclip Start", "Automatically Sets Clip start to the nearest pixel.");
321
322         prop= RNA_def_property(srna, "auto_clip_end", PROP_BOOLEAN, PROP_NONE);
323         RNA_def_property_boolean_sdna(prop, NULL, "bufflag", LA_SHADBUF_AUTO_END);
324         RNA_def_property_ui_text(prop, "Autoclip End", "Automatically Sets Clip end to the farthest away pixel.");
325
326         prop= RNA_def_property(srna, "umbra", PROP_BOOLEAN, PROP_NONE);
327         RNA_def_property_boolean_sdna(prop, NULL, "ray_samp_type", LA_SAMP_UMBRA);
328         RNA_def_property_ui_text(prop, "Umbra", "Emphasise parts in full shadow.");
329
330         prop= RNA_def_property(srna, "dither", PROP_BOOLEAN, PROP_NONE);
331         RNA_def_property_boolean_sdna(prop, NULL, "ray_samp_type", LA_SAMP_DITHER);
332         RNA_def_property_ui_text(prop, "Dither", "Use 2x2 dithering for sampling.");
333
334         prop= RNA_def_property(srna, "jitter", PROP_BOOLEAN, PROP_NONE);
335         RNA_def_property_boolean_sdna(prop, NULL, "ray_samp_type", LA_SAMP_JITTER);
336         RNA_def_property_ui_text(prop, "Jitter", "Use noise for sampling.");
337
338         prop= RNA_def_property(srna, "sky", PROP_BOOLEAN, PROP_NONE);
339         RNA_def_property_boolean_sdna(prop, NULL, "sun_effect_type", LA_SUN_EFFECT_SKY);
340         RNA_def_property_ui_text(prop, "sky", "Apply sun effect on sky");
341
342         prop= RNA_def_property(srna, "atmosphere", PROP_BOOLEAN, PROP_NONE);
343         RNA_def_property_boolean_sdna(prop, NULL, "sun_effect_type", LA_SUN_EFFECT_AP);
344         RNA_def_property_ui_text(prop, "Atmosphere", "Apply sun effect on Atmosphere");
345
346         /* mode */
347         prop= RNA_def_property(srna, "halo", PROP_BOOLEAN, PROP_NONE);
348         RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_HALO);
349         RNA_def_property_ui_text(prop, "Halo", "Lamp creates a halo.");
350
351         prop= RNA_def_property(srna, "layer", PROP_BOOLEAN, PROP_NONE);
352         RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_LAYER);
353         RNA_def_property_ui_text(prop, "Layer", "Lamp is only used on the Scene layer the lamp is on.");
354
355         prop= RNA_def_property(srna, "negative", PROP_BOOLEAN, PROP_NONE);
356         RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_NEG);
357         RNA_def_property_ui_text(prop, "Negative", "Lamp casts negative light.");
358
359         prop= RNA_def_property(srna, "specular", PROP_BOOLEAN, PROP_NONE);
360         RNA_def_property_boolean_negative_sdna(prop, NULL, "mode", LA_NO_SPEC);
361         RNA_def_property_ui_text(prop, "Specular", "Lamp creates specular highlights.");
362
363         prop= RNA_def_property(srna, "diffuse", PROP_BOOLEAN, PROP_NONE);
364         RNA_def_property_boolean_negative_sdna(prop, NULL, "mode", LA_NO_DIFF);
365         RNA_def_property_ui_text(prop, "Diffuse", "Lamp does diffuse shading.");
366
367         prop= RNA_def_property(srna, "only_shadow", PROP_BOOLEAN, PROP_NONE);
368         RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_ONLYSHADOW);
369         RNA_def_property_ui_text(prop, "Only Shadow", "Lamp only creates shadows.");
370
371         prop= RNA_def_property(srna, "shadow", PROP_ENUM, PROP_NONE);
372         RNA_def_property_enum_bitflag_sdna(prop, NULL, "mode");
373         RNA_def_property_enum_items(prop, prop_shadow_items);
374         RNA_def_property_ui_text(prop, "Shadow", "Method to compute lamp shadow.");
375
376         prop= RNA_def_property(srna, "sphere", PROP_BOOLEAN, PROP_NONE);
377         RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_SPHERE);
378         RNA_def_property_ui_text(prop, "Sphere", "Sets square spotbundles.");
379
380         prop= RNA_def_property(srna, "square", PROP_BOOLEAN, PROP_NONE);
381         RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_SQUARE);
382         RNA_def_property_ui_text(prop, "Square", "Sets light intensity to zero beyond lamp distance.");
383 }
384
385 #endif
386