3b943f807ad62076af0d1c71c8ec742b19dfc201
[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 #include "WM_types.h"
35
36 #ifdef RNA_RUNTIME
37
38 static void rna_Lamp_buffer_size_set(PointerRNA *ptr, int value)
39 {
40         Lamp *la= (Lamp*)ptr->data;
41
42         CLAMP(value, 512, 10240);
43         la->bufsize= value;
44         la->bufsize &= (~15); /* round to multiple of 16 */
45 }
46
47 static void *rna_Lamp_sunsky_settings_get(PointerRNA *ptr)
48 {
49         return ptr->id.data;
50 }
51
52
53 #else
54
55 static void rna_def_lamp_sunsky_settings(BlenderRNA *brna, StructRNA *parent)
56 {
57         StructRNA *srna;
58         PropertyRNA *prop;
59
60         static EnumPropertyItem prop_skycolorspace_items[] = {
61                 {0, "SMPTE", "SMPTE", ""},
62                 {1, "REC709", "REC709", ""},
63                 {2, "CIE", "CIE", ""},
64                 {0, NULL, NULL, NULL}};
65                 
66         static EnumPropertyItem prop_blendmode_items[] = {
67                 {0, "MIX", "Mix", ""},
68                 {1, "ADD", "Add", ""},
69                 {2, "MULTIPLY", "Multiply", ""},
70                 {3, "SUBTRACT", "Subtract", ""},
71                 {4, "SCREEN", "Screen", ""},
72                 {5, "DIVIDE", "Divide", ""},
73                 {6, "DIFFERENCE", "Difference", ""},
74                 {7, "DARKEN", "Darken", ""},
75                 {8, "LIGHTEN", "Lighten", ""},
76                 {9, "OVERLAY", "Overlay", ""},
77                 {10, "DODGE", "Dodge", ""},
78                 {11, "BURN", "Burn", ""},
79                 {12, "HUE", "Hue", ""},
80                 {13, "SATURATION", "Saturation", ""},
81                 {14, "VALUE", "Value", ""},
82                 {15, "COLOR", "Color", ""},
83                 {0, NULL, NULL, NULL}};
84                 
85         srna= RNA_def_struct(brna, "SunskySettings", NULL);
86         RNA_def_struct_sdna(srna, "Lamp");
87         RNA_def_struct_parent(srna, parent);
88         RNA_def_struct_ui_text(srna, "Sun/Sky Settings", "Sun/Sky related settings for the lamp.");
89                 
90         prop= RNA_def_property(srna, "sky_colorspace", PROP_ENUM, PROP_NONE);
91         RNA_def_property_enum_items(prop, prop_skycolorspace_items);
92         RNA_def_property_ui_text(prop, "Sky Color Space", "Color space to use for internal XYZ->RGB color conversion");
93         RNA_def_property_update(prop, NC_LAMP|ND_SKY, NULL);
94
95         prop= RNA_def_property(srna, "sky_blend_type", PROP_ENUM, PROP_NONE);
96         RNA_def_property_enum_sdna(prop, NULL, "skyblendtype");
97         RNA_def_property_enum_items(prop, prop_blendmode_items);
98         RNA_def_property_ui_text(prop, "Sky Blend Mode", "Blend mode for combining sun sky with world sky");
99         RNA_def_property_update(prop, NC_LAMP|ND_SKY, NULL);
100         
101         /* Number values */
102         
103         prop= RNA_def_property(srna, "horizon_brightness", PROP_FLOAT, PROP_NONE);
104         RNA_def_property_range(prop, 0.0f, 20.0f);
105         RNA_def_property_ui_text(prop, "Horizon Brightness", "horizon brightness");
106         RNA_def_property_update(prop, NC_LAMP|ND_SKY, NULL);
107
108         prop= RNA_def_property(srna, "spread", PROP_FLOAT, PROP_NONE);
109         RNA_def_property_range(prop, 0.0f, 10.0f);
110         RNA_def_property_ui_text(prop, "Horizon Spread", "horizon Spread");
111         RNA_def_property_update(prop, NC_LAMP|ND_SKY, NULL);
112
113         prop= RNA_def_property(srna, "sun_brightness", PROP_FLOAT, PROP_NONE);
114         RNA_def_property_range(prop, 0.0f, 10.0f);
115         RNA_def_property_ui_text(prop, "Sun Brightness", "Sun Brightness");
116         RNA_def_property_update(prop, NC_LAMP|ND_SKY, NULL);
117
118         prop= RNA_def_property(srna, "sun_size", PROP_FLOAT, PROP_NONE);
119         RNA_def_property_range(prop, 0.0f, 10.0f);
120         RNA_def_property_ui_text(prop, "Sun Size", "Sun Size");
121         RNA_def_property_update(prop, NC_LAMP|ND_SKY, NULL);
122
123         prop= RNA_def_property(srna, "backscattered_light", PROP_FLOAT, PROP_NONE);
124         RNA_def_property_range(prop, 0.0f, 1.0f);
125         RNA_def_property_ui_text(prop, "Back Light", "Backscatter Light");
126         RNA_def_property_update(prop, NC_LAMP|ND_SKY, NULL);
127
128         prop= RNA_def_property(srna, "sun_intensity", PROP_FLOAT, PROP_NONE);
129         RNA_def_property_range(prop, 0.0f, 10.0f);
130         RNA_def_property_ui_text(prop, "Sun Intensity", "Sun Intensity");
131         RNA_def_property_update(prop, NC_LAMP|ND_SKY, NULL);
132
133         prop= RNA_def_property(srna, "atm_turbidity", PROP_FLOAT, PROP_NONE);
134         RNA_def_property_range(prop, 0.0f, 30.0f);
135         RNA_def_property_ui_text(prop, "Turbidity", "Sky Turbidity");
136         RNA_def_property_update(prop, NC_LAMP|ND_SKY, NULL);
137
138         prop= RNA_def_property(srna, "atm_inscattering_factor", PROP_FLOAT, PROP_NONE);
139         RNA_def_property_range(prop, 0.0f, 1.0f);
140         RNA_def_property_ui_text(prop, "Inscatter", "Scatter contribution factor");
141         RNA_def_property_update(prop, NC_LAMP|ND_SKY, NULL);
142
143         prop= RNA_def_property(srna, "atm_extinction_factor", PROP_FLOAT, PROP_NONE);
144         RNA_def_property_range(prop, 0.0f, 1.0f);
145         RNA_def_property_ui_text(prop, "Extinction", "Extinction scattering contribution factor");
146         RNA_def_property_update(prop, NC_LAMP|ND_SKY, NULL);
147
148         prop= RNA_def_property(srna, "atm_distance_factor", PROP_FLOAT, PROP_NONE);
149         RNA_def_property_range(prop, 0.0f, 500.0f);
150         RNA_def_property_ui_text(prop, "Distance", "Multiplier to convert blender units to physical distance");
151         RNA_def_property_update(prop, NC_LAMP|ND_SKY, NULL);
152
153         prop= RNA_def_property(srna, "sky_blend_factor", PROP_FLOAT, PROP_NONE);
154         RNA_def_property_float_sdna(prop, NULL, "skyblendfac");
155         RNA_def_property_range(prop, 0.0f, 2.0f);
156         RNA_def_property_ui_text(prop, "Sky Blend Factor", "Blend factor with sky");
157         RNA_def_property_update(prop, NC_LAMP|ND_SKY, NULL);
158
159         prop= RNA_def_property(srna, "sky_exposure", PROP_FLOAT, PROP_NONE);
160         RNA_def_property_range(prop, 0.0f, 20.0f);
161         RNA_def_property_ui_text(prop, "Sky Exposure", "Strength of sky shading exponential exposure correction.");
162         RNA_def_property_update(prop, NC_LAMP|ND_SKY, NULL);
163
164         /* boolean */
165         
166         prop= RNA_def_property(srna, "sky", PROP_BOOLEAN, PROP_NONE);
167         RNA_def_property_boolean_sdna(prop, NULL, "sun_effect_type", LA_SUN_EFFECT_SKY);
168         RNA_def_property_ui_text(prop, "Sky", "Apply sun effect on sky");
169         RNA_def_property_update(prop, NC_LAMP|ND_SKY, NULL);
170
171         prop= RNA_def_property(srna, "atmosphere", PROP_BOOLEAN, PROP_NONE);
172         RNA_def_property_boolean_sdna(prop, NULL, "sun_effect_type", LA_SUN_EFFECT_AP);
173         RNA_def_property_ui_text(prop, "Atmosphere", "Apply sun effect on Atmosphere");
174         RNA_def_property_update(prop, NC_LAMP|ND_SKY, NULL);
175 }
176
177 static StructRNA *rna_def_lamp(BlenderRNA *brna)
178 {
179         StructRNA *srna;
180         PropertyRNA *prop;
181         static EnumPropertyItem prop_type_items[] = {
182                 {LA_LOCAL, "OMNI", "Omni", "Light cast evenly in all directions from a point source"},
183                 {LA_SUN, "SUN", "Sun", "Light cast in a single direction from a distant source"},
184                 {LA_SPOT, "SPOT", "Spot", "Light cast in a cone shape from a point"},
185                 {LA_HEMI, "HEMI", "Hemi", "Light cast from a hemispherical direction"},
186                 {LA_AREA, "AREA", "Area", "Light case from an area surface"},
187                 {0, NULL, NULL, NULL}};
188         static EnumPropertyItem prop_shadow_items[] = {
189                 {0, "NOSHADOW", "No Shadow", ""},
190                 {LA_SHAD_BUF, "BUFSHADOW", "Buffer Shadow", "Lets spotlight produce shadows using shadow buffer."},
191                 {LA_SHAD_RAY, "RAYSHADOW", "Ray Shadow", "Use ray tracing for shadow."},
192                 {0, NULL, NULL, NULL}};
193         static EnumPropertyItem prop_raysampmethod_items[] = {
194                 {LA_SAMP_CONSTANT, "CONSTANT_JITTERED", "Constant Jittered", ""},
195                 {LA_SAMP_HALTON, "ADAPTIVE_QMC", "Adaptive QMC", ""},
196                 {LA_SAMP_HAMMERSLEY, "CONSTANT_QMC", "Constant QMC", ""},
197                 {0, NULL, NULL, NULL}};
198         static EnumPropertyItem prop_areashape_items[] = {
199                 {LA_AREA_SQUARE, "SQUARE", "Square", ""},
200                 {LA_AREA_RECT, "RECTANGLE", "Rectangle", ""},
201                 {0, NULL, NULL, NULL}};
202         static EnumPropertyItem prop_shadbuftype_items[] = {
203                 {LA_SHADBUF_REGULAR     , "REGULAR", "Classical", "Use the Classic Buffer type"},
204                 {LA_SHADBUF_IRREGULAR, "IRREGULAR", "Irregular", "Use the Irregular Shadow Buffer type."},
205                 {LA_SHADBUF_HALFWAY, "HALFWAY", "Classic-Halfway", "Use the Classic-Halfway Buffer type."},
206                 {0, NULL, NULL, NULL}};
207         static EnumPropertyItem prop_shadbuffiltertype_items[] = {
208                 {LA_SHADBUF_BOX , "BOX", "Box", "Use the Box filter"},
209                 {LA_SHADBUF_TENT, "TENT", "Tent", "Use the Tent Filter."},
210                 {LA_SHADBUF_GAUSS, "GAUSS", "Gauss", "Use the Gauss filter."},
211                 {0, NULL, NULL, NULL}};
212         static EnumPropertyItem prop_numbuffer_items[] = {
213                 {1, "1BUFF", "1", "Sample 1 Shadow Buffer."},
214                 {4, "4BUFF", "4", "Sample 4 Shadow Buffers."},
215                 {9, "9BUFF", "9", "Sample 9 Shadow Buffers."},
216                 {0, NULL, NULL, NULL}};
217         static EnumPropertyItem prop_fallofftype_items[] = {
218                 {LA_FALLOFF_CONSTANT, "CONSTANT", "Constant", ""},
219                 {LA_FALLOFF_INVLINEAR, "INVLINEAR", "Inverse Linear", ""},
220                 {LA_FALLOFF_INVSQUARE, "INVSQUARE", "Inverse Square", ""},
221                 {LA_FALLOFF_CURVE, "CURVE", "Custom Curve", ""},
222                 {LA_FALLOFF_SLIDERS, "SLIDERS", "Lin/Quad Weighted", ""},
223                 {0, NULL, NULL, NULL}};
224
225         srna= RNA_def_struct(brna, "Lamp", "ID");
226         RNA_def_struct_ui_text(srna, "Lamp", "DOC_BROKEN");
227
228         /* Enums */
229         prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
230         RNA_def_property_enum_items(prop, prop_type_items);
231         RNA_def_property_ui_text(prop, "Type", "Type of Lamp.");
232         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING_DRAW, NULL);
233
234         prop= RNA_def_property(srna, "area_shape", PROP_ENUM, PROP_NONE);
235         RNA_def_property_enum_items(prop, prop_areashape_items);
236         RNA_def_property_ui_text(prop, "Area Shape", "Shape of the Area lamp");
237         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING_DRAW, NULL);
238
239         prop= RNA_def_property(srna, "ray_samp_method", PROP_ENUM, PROP_NONE);
240         RNA_def_property_enum_items(prop, prop_raysampmethod_items);
241         RNA_def_property_ui_text(prop, "Ray Sample Method", "The Method in how rays are sampled");
242         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
243
244         prop= RNA_def_property(srna, "buffer_type", PROP_ENUM, PROP_NONE);
245         RNA_def_property_enum_sdna(prop, NULL, "buftype");
246         RNA_def_property_enum_items(prop, prop_shadbuftype_items);
247         RNA_def_property_ui_text(prop, "Buffer Type", "Type of Shadow Buffer.");
248         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
249
250         prop= RNA_def_property(srna, "filter_type", PROP_ENUM, PROP_NONE);
251         RNA_def_property_enum_sdna(prop, NULL, "filtertype");
252         RNA_def_property_enum_items(prop, prop_shadbuffiltertype_items);
253         RNA_def_property_ui_text(prop, "Filter Type", "Type of Shadow Buffer Filter.");
254         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
255
256         prop= RNA_def_property(srna, "buffers", PROP_ENUM, PROP_NONE);
257         RNA_def_property_enum_items(prop, prop_numbuffer_items);
258         RNA_def_property_ui_text(prop, "Sample Buffers", "Number of Buffers to sample.");
259         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
260
261         prop= RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE);
262         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); /* needs to be able to create curve mapping */
263         RNA_def_property_enum_items(prop, prop_fallofftype_items);
264         RNA_def_property_ui_text(prop, "Falloff Type", "Intensity Decay with distance.");
265         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
266         
267         prop= RNA_def_property(srna, "falloff_curve", PROP_POINTER, PROP_NONE);
268         RNA_def_property_pointer_sdna(prop, NULL, "curfalloff");
269         RNA_def_property_ui_text(prop, "Falloff Curve", "Custom Lamp Falloff Curve");
270         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
271
272         /* Number values */
273         prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE);
274         RNA_def_property_float_sdna(prop, NULL, "dist");
275         RNA_def_property_range(prop, 0.0f, 9999.0f);
276         RNA_def_property_ui_text(prop, "Distance", "Falloff distance - the light is at half the original intensity at this point.");
277         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING_DRAW, NULL);
278
279         prop= RNA_def_property(srna, "linear_attenuation", PROP_FLOAT, PROP_NONE);
280         RNA_def_property_float_sdna(prop, NULL, "att1");
281         RNA_def_property_range(prop, 0.0f, 1.0f);
282         RNA_def_property_ui_text(prop, "Linear Attenuation", "Linear distance attentuation.");
283         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
284
285         prop= RNA_def_property(srna, "quadratic_attenuation", PROP_FLOAT, PROP_NONE);
286         RNA_def_property_float_sdna(prop, NULL, "att2");
287         RNA_def_property_range(prop, 0.0f, 1.0f);
288         RNA_def_property_ui_text(prop, "Quadratic Attenuation", "Quadratic distance attentuation.");
289         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
290
291         prop= RNA_def_property(srna, "spot_blend", PROP_FLOAT, PROP_NONE);
292         RNA_def_property_float_sdna(prop, NULL, "spotblend");
293         RNA_def_property_range(prop, 0.0f ,1.0f);
294         RNA_def_property_ui_text(prop, "Spot Blend", "The softness of the spotlight edge.");
295         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING_DRAW, NULL);
296
297         prop= RNA_def_property(srna, "spot_size", PROP_FLOAT, PROP_NONE);
298         RNA_def_property_float_sdna(prop, NULL, "spotsize");
299         RNA_def_property_range(prop, 1.0f ,180.0f);
300         RNA_def_property_ui_text(prop, "Spot Size", "The angle of the spotlight beam in degrees.");
301         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING_DRAW, NULL);
302
303         prop= RNA_def_property(srna, "clip_start", PROP_FLOAT, PROP_NONE);
304         RNA_def_property_float_sdna(prop, NULL, "clipsta");
305         RNA_def_property_range(prop, 0.0f, 9999.0f);
306         RNA_def_property_ui_text(prop, "Clip Start", "Distance that the buffer calculations start.");
307         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING_DRAW, NULL);
308
309         prop= RNA_def_property(srna, "clip_end", PROP_FLOAT, PROP_NONE);
310         RNA_def_property_float_sdna(prop, NULL, "clipend");
311         RNA_def_property_range(prop, 0.0f, 9999.0f);
312         RNA_def_property_ui_text(prop, "Clip End", "Distance that the buffer calculations finish.");
313         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING_DRAW, NULL);
314
315         prop= RNA_def_property(srna, "bias", PROP_FLOAT, PROP_NONE);
316         RNA_def_property_range(prop, 0.0f, 5.0f);
317         RNA_def_property_ui_text(prop, "Bias", "Shadow Map sampling bias.");
318         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
319
320         prop= RNA_def_property(srna, "soft", PROP_FLOAT, PROP_NONE);
321         RNA_def_property_range(prop, 0.0f, 100.0f);
322         RNA_def_property_ui_text(prop, "Soft", "Size of shadow sampling area.");
323         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
324
325         prop= RNA_def_property(srna, "samples", PROP_INT, PROP_NONE);
326         RNA_def_property_int_sdna(prop, NULL, "samp");
327         RNA_def_property_range(prop, 1,16);
328         RNA_def_property_ui_text(prop, "Samples", "Number of shadow map samples.");
329         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
330
331         prop= RNA_def_property(srna, "energy", PROP_FLOAT, PROP_NONE);
332         RNA_def_property_range(prop, 0.0f, 10.0f);
333         RNA_def_property_ui_text(prop, "Energy", "Amount of light that the lamp emits.");
334         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
335
336         prop= RNA_def_property(srna, "ray_samples", PROP_INT, PROP_NONE);
337         RNA_def_property_int_sdna(prop, NULL, "ray_samp");
338         RNA_def_property_range(prop, 1, 16);
339         RNA_def_property_ui_text(prop, "Ray Samples", "Amount of samples taken extra (samples x samples).");
340         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
341
342         prop= RNA_def_property(srna, "ray_sampy", PROP_INT, PROP_NONE);
343         RNA_def_property_range(prop, 1,16);
344         RNA_def_property_ui_text(prop, "Ray Samples Y", "Amount of samples taken extra (samples x samples).");
345         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
346
347         prop= RNA_def_property(srna, "area_size", PROP_FLOAT, PROP_NONE);
348         RNA_def_property_range(prop, 0.0f, 100.0f);
349         RNA_def_property_ui_text(prop, "Area Size", "Size of the area of the Area Lamp.");
350         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING_DRAW, NULL);
351
352         prop= RNA_def_property(srna, "area_sizey", PROP_FLOAT, PROP_NONE);
353         RNA_def_property_range(prop, 0.0f, 100.0f);
354         RNA_def_property_ui_text(prop, "Area Size Y", "Size of the area of the Area Lamp.");
355         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING_DRAW, NULL);
356
357         prop= RNA_def_property(srna, "adapt_thresh", PROP_FLOAT, PROP_NONE);
358         RNA_def_property_range(prop, 0.0f, 1.0f);
359         RNA_def_property_ui_text(prop, "Adapt Threshold", "Threshold for Adaptive Sampling.");
360         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
361
362         prop= RNA_def_property(srna, "buffer_size", PROP_INT, PROP_NONE);
363         RNA_def_property_int_sdna(prop, NULL, "bufsize");
364         RNA_def_property_range(prop, 512, 10240);
365         RNA_def_property_ui_text(prop, "Buffer Size", "Resolution of the buffer, higher values give crisper shadows but use more memory");
366         RNA_def_property_int_funcs(prop, NULL, "rna_Lamp_buffer_size_set", NULL);
367         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
368
369         prop= RNA_def_property(srna, "halo_intensity", PROP_FLOAT, PROP_NONE);
370         RNA_def_property_float_sdna(prop, NULL, "haint");
371         RNA_def_property_range(prop, 0.0f, 5.0f);
372         RNA_def_property_ui_text(prop, "Halo Intensity", "Brightness of the spotlight's halo cone.");
373         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
374
375         /*short sky_colorspace, pad4;*/
376
377         /* Colors */
378         prop= RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
379         RNA_def_property_float_sdna(prop, NULL, "r");
380         RNA_def_property_array(prop, 3);
381         RNA_def_property_ui_text(prop, "Color", "");
382         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
383
384         prop= RNA_def_property(srna, "shadow_color", PROP_FLOAT, PROP_COLOR);
385         RNA_def_property_float_sdna(prop, NULL, "shdwr");
386         RNA_def_property_array(prop, 3);
387         RNA_def_property_ui_text(prop, "Shadow Color", "");
388         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
389
390         /* Booleans */
391         prop= RNA_def_property(srna, "auto_clip_start", PROP_BOOLEAN, PROP_NONE);
392         RNA_def_property_boolean_sdna(prop, NULL, "bufflag", LA_SHADBUF_AUTO_START);
393         RNA_def_property_ui_text(prop, "Autoclip Start", "Automatically Sets Clip start to the nearest pixel.");
394         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING_DRAW, NULL);
395
396         prop= RNA_def_property(srna, "auto_clip_end", PROP_BOOLEAN, PROP_NONE);
397         RNA_def_property_boolean_sdna(prop, NULL, "bufflag", LA_SHADBUF_AUTO_END);
398         RNA_def_property_ui_text(prop, "Autoclip End", "Automatically Sets Clip end to the farthest away pixel.");
399         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING_DRAW, NULL);
400
401         prop= RNA_def_property(srna, "umbra", PROP_BOOLEAN, PROP_NONE);
402         RNA_def_property_boolean_sdna(prop, NULL, "ray_samp_type", LA_SAMP_UMBRA);
403         RNA_def_property_ui_text(prop, "Umbra", "Emphasise parts in full shadow.");
404         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
405
406         prop= RNA_def_property(srna, "dither", PROP_BOOLEAN, PROP_NONE);
407         RNA_def_property_boolean_sdna(prop, NULL, "ray_samp_type", LA_SAMP_DITHER);
408         RNA_def_property_ui_text(prop, "Dither", "Use 2x2 dithering for sampling.");
409         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
410
411         prop= RNA_def_property(srna, "jitter", PROP_BOOLEAN, PROP_NONE);
412         RNA_def_property_boolean_sdna(prop, NULL, "ray_samp_type", LA_SAMP_JITTER);
413         RNA_def_property_ui_text(prop, "Jitter", "Use noise for sampling.");
414         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
415
416         /* mode */
417         prop= RNA_def_property(srna, "halo", PROP_BOOLEAN, PROP_NONE);
418         RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_HALO);
419         RNA_def_property_ui_text(prop, "Halo", "Lamp creates a halo.");
420         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
421
422         prop= RNA_def_property(srna, "layer", PROP_BOOLEAN, PROP_NONE);
423         RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_LAYER);
424         RNA_def_property_ui_text(prop, "Layer", "Lamp is only used on the Scene layer the lamp is on.");
425         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
426
427         prop= RNA_def_property(srna, "negative", PROP_BOOLEAN, PROP_NONE);
428         RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_NEG);
429         RNA_def_property_ui_text(prop, "Negative", "Lamp casts negative light.");
430         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
431
432         prop= RNA_def_property(srna, "specular", PROP_BOOLEAN, PROP_NONE);
433         RNA_def_property_boolean_negative_sdna(prop, NULL, "mode", LA_NO_SPEC);
434         RNA_def_property_ui_text(prop, "Specular", "Lamp creates specular highlights.");
435         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
436
437         prop= RNA_def_property(srna, "diffuse", PROP_BOOLEAN, PROP_NONE);
438         RNA_def_property_boolean_negative_sdna(prop, NULL, "mode", LA_NO_DIFF);
439         RNA_def_property_ui_text(prop, "Diffuse", "Lamp does diffuse shading.");
440         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
441
442         prop= RNA_def_property(srna, "only_shadow", PROP_BOOLEAN, PROP_NONE);
443         RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_ONLYSHADOW);
444         RNA_def_property_ui_text(prop, "Only Shadow", "Lamp only creates shadows.");
445         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
446
447         prop= RNA_def_property(srna, "shadow", PROP_ENUM, PROP_NONE);
448         RNA_def_property_enum_bitflag_sdna(prop, NULL, "mode");
449         RNA_def_property_enum_items(prop, prop_shadow_items);
450         RNA_def_property_ui_text(prop, "Shadow", "Method to compute lamp shadow.");
451         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
452
453         prop= RNA_def_property(srna, "sphere", PROP_BOOLEAN, PROP_NONE);
454         RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_SPHERE);
455         RNA_def_property_ui_text(prop, "Sphere", "Sets light intensity to zero beyond lamp distance.");
456         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING_DRAW, NULL);
457
458         prop= RNA_def_property(srna, "square", PROP_BOOLEAN, PROP_NONE);
459         RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_SQUARE);
460         RNA_def_property_ui_text(prop, "Square", "Casts a square spot light shape");
461         RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING_DRAW, NULL);
462         
463         /* sun/sky */
464         prop= RNA_def_property(srna, "sunsky", PROP_POINTER, PROP_NONE);
465         RNA_def_property_struct_type(prop, "SunskySettings");
466         RNA_def_property_pointer_funcs(prop, "rna_Lamp_sunsky_settings_get", NULL, NULL);
467         RNA_def_property_ui_text(prop, "Sun/Sky Settings", "Sun/Sky related settings for the lamp.");
468
469         return srna;
470 }
471
472 void RNA_def_lamp(BlenderRNA *brna)
473 {
474         StructRNA *srna;
475         
476         srna= rna_def_lamp(brna);
477         rna_def_lamp_sunsky_settings(brna, srna);
478 }
479
480 #endif
481