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