Blender  V2.93
rna_shader_fx.c
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16 
21 #include <float.h>
22 #include <limits.h>
23 #include <stdlib.h>
24 
25 #include "DNA_gpencil_types.h"
26 #include "DNA_object_types.h"
27 #include "DNA_scene_types.h"
28 #include "DNA_shader_fx_types.h"
29 
30 #include "MEM_guardedalloc.h"
31 
32 #include "BLI_math.h"
33 
34 #include "BLT_translation.h"
35 
36 #include "BKE_animsys.h"
37 
38 #include "RNA_access.h"
39 #include "RNA_define.h"
40 #include "RNA_enum_types.h"
41 
42 #include "rna_internal.h"
43 
44 #include "WM_api.h"
45 #include "WM_types.h"
46 
48  {eShaderFxType_Blur, "FX_BLUR", ICON_SHADERFX, "Blur", "Apply Gaussian Blur to object"},
50  "FX_COLORIZE",
51  ICON_SHADERFX,
52  "Colorize",
53  "Apply different tint effects"},
54  {eShaderFxType_Flip, "FX_FLIP", ICON_SHADERFX, "Flip", "Flip image"},
55  {eShaderFxType_Glow, "FX_GLOW", ICON_SHADERFX, "Glow", "Create a glow effect"},
56  {eShaderFxType_Pixel, "FX_PIXEL", ICON_SHADERFX, "Pixelate", "Pixelate image"},
57  {eShaderFxType_Rim, "FX_RIM", ICON_SHADERFX, "Rim", "Add a rim to the image"},
58  {eShaderFxType_Shadow, "FX_SHADOW", ICON_SHADERFX, "Shadow", "Create a shadow effect"},
59  {eShaderFxType_Swirl, "FX_SWIRL", ICON_SHADERFX, "Swirl", "Create a rotation distortion"},
61  "FX_WAVE",
62  ICON_SHADERFX,
63  "Wave Distortion",
64  "Apply sinusoidal deformation"},
65  {0, NULL, 0, NULL, NULL},
66 };
67 
69  {eShaderFxRimMode_Normal, "NORMAL", 0, "Regular", ""},
70  {eShaderFxRimMode_Overlay, "OVERLAY", 0, "Overlay", ""},
71  {eShaderFxRimMode_Add, "ADD", 0, "Add", ""},
72  {eShaderFxRimMode_Subtract, "SUBTRACT", 0, "Subtract", ""},
73  {eShaderFxRimMode_Multiply, "MULTIPLY", 0, "Multiply", ""},
74  {eShaderFxRimMode_Divide, "DIVIDE", 0, "Divide", ""},
75  {0, NULL, 0, NULL, NULL}};
76 
78  {eShaderFxGlowMode_Luminance, "LUMINANCE", 0, "Luminance", ""},
79  {eShaderFxGlowMode_Color, "COLOR", 0, "Color", ""},
80  {0, NULL, 0, NULL, NULL}};
81 
83  {eShaderFxColorizeMode_GrayScale, "GRAYSCALE", 0, "Gray Scale", ""},
84  {eShaderFxColorizeMode_Sepia, "SEPIA", 0, "Sepia", ""},
85  {eShaderFxColorizeMode_Duotone, "DUOTONE", 0, "Duotone", ""},
86  {eShaderFxColorizeMode_Transparent, "TRANSPARENT", 0, "Transparent", ""},
87  {eShaderFxColorizeMode_Custom, "CUSTOM", 0, "Custom", ""},
88  {0, NULL, 0, NULL, NULL}};
89 
91  {eGplBlendMode_Regular, "REGULAR", 0, "Regular", ""},
92  {eGplBlendMode_Add, "ADD", 0, "Add", ""},
93  {eGplBlendMode_Subtract, "SUBTRACT", 0, "Subtract", ""},
94  {eGplBlendMode_Multiply, "MULTIPLY", 0, "Multiply", ""},
95  {eGplBlendMode_Divide, "DIVIDE", 0, "Divide", ""},
96  {0, NULL, 0, NULL, NULL}};
97 
98 #ifdef RNA_RUNTIME
99 
100 # include "BKE_shader_fx.h"
101 
102 # include "DEG_depsgraph.h"
103 # include "DEG_depsgraph_build.h"
104 
105 static StructRNA *rna_ShaderFx_refine(struct PointerRNA *ptr)
106 {
107  ShaderFxData *md = (ShaderFxData *)ptr->data;
108 
109  switch ((ShaderFxType)md->type) {
110  case eShaderFxType_Blur:
111  return &RNA_ShaderFxBlur;
113  return &RNA_ShaderFxColorize;
114  case eShaderFxType_Wave:
115  return &RNA_ShaderFxWave;
116  case eShaderFxType_Pixel:
117  return &RNA_ShaderFxPixel;
118  case eShaderFxType_Rim:
119  return &RNA_ShaderFxRim;
121  return &RNA_ShaderFxShadow;
122  case eShaderFxType_Swirl:
123  return &RNA_ShaderFxSwirl;
124  case eShaderFxType_Flip:
125  return &RNA_ShaderFxFlip;
126  case eShaderFxType_Glow:
127  return &RNA_ShaderFxGlow;
128  /* Default */
129  case eShaderFxType_None:
130  case NUM_SHADER_FX_TYPES:
131  default:
132  return &RNA_ShaderFx;
133  }
134 
135  return &RNA_ShaderFx;
136 }
137 
138 static void rna_ShaderFx_name_set(PointerRNA *ptr, const char *value)
139 {
140  ShaderFxData *gmd = ptr->data;
141  char oldname[sizeof(gmd->name)];
142 
143  /* make a copy of the old name first */
144  BLI_strncpy(oldname, gmd->name, sizeof(gmd->name));
145 
146  /* copy the new name into the name slot */
147  BLI_strncpy_utf8(gmd->name, value, sizeof(gmd->name));
148 
149  /* make sure the name is truly unique */
150  if (ptr->owner_id) {
151  Object *ob = (Object *)ptr->owner_id;
153  }
154 
155  /* fix all the animation data which may link to this */
156  BKE_animdata_fix_paths_rename_all(NULL, "shader_effects", oldname, gmd->name);
157 }
158 
159 static char *rna_ShaderFx_path(PointerRNA *ptr)
160 {
161  ShaderFxData *gmd = ptr->data;
162  char name_esc[sizeof(gmd->name) * 2];
163 
164  BLI_str_escape(name_esc, gmd->name, sizeof(name_esc));
165  return BLI_sprintfN("shader_effects[\"%s\"]", name_esc);
166 }
167 
168 static void rna_ShaderFx_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
169 {
172 }
173 
174 static void rna_ShaderFx_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
175 {
176  rna_ShaderFx_update(bmain, scene, ptr);
178 }
179 
180 /* Objects */
181 
182 static void shaderfx_object_set(Object *self, Object **ob_p, int type, PointerRNA value)
183 {
184  Object *ob = value.data;
185 
186  if (!self || ob != self) {
187  if (!ob || type == OB_EMPTY || ob->type == type) {
188  id_lib_extern((ID *)ob);
189  *ob_p = ob;
190  }
191  }
192 }
193 
194 # define RNA_FX_OBJECT_SET(_type, _prop, _obtype) \
195  static void rna_##_type##ShaderFx_##_prop##_set( \
196  PointerRNA *ptr, PointerRNA value, struct ReportList *UNUSED(reports)) \
197  { \
198  _type##ShaderFxData *tmd = (_type##ShaderFxData *)ptr->data; \
199  shaderfx_object_set((Object *)ptr->owner_id, &tmd->_prop, _obtype, value); \
200  }
201 
202 RNA_FX_OBJECT_SET(Shadow, object, OB_EMPTY);
203 RNA_FX_OBJECT_SET(Swirl, object, OB_EMPTY);
204 
205 # undef RNA_FX_OBJECT_SET
206 
207 #else
208 
210 {
211  StructRNA *srna;
212  PropertyRNA *prop;
213 
214  srna = RNA_def_struct(brna, "ShaderFxBlur", "ShaderFx");
215  RNA_def_struct_ui_text(srna, "Gaussian Blur Effect", "Gaussian Blur effect");
216  RNA_def_struct_sdna(srna, "BlurShaderFxData");
217  RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
218 
219  prop = RNA_def_property(srna, "size", PROP_FLOAT, PROP_XYZ);
220  RNA_def_property_float_sdna(prop, NULL, "radius");
221  RNA_def_property_range(prop, 0.0f, FLT_MAX);
222  RNA_def_property_ui_text(prop, "Size", "Factor of Blur");
223  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
224 
225  prop = RNA_def_property(srna, "samples", PROP_INT, PROP_NONE);
226  RNA_def_property_int_sdna(prop, NULL, "samples");
227  RNA_def_property_range(prop, 0, 32);
228  RNA_def_property_ui_range(prop, 0, 32, 2, -1);
230  RNA_def_property_ui_text(prop, "Samples", "Number of Blur Samples (zero, disable blur)");
231  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
232 
233  prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_ANGLE);
234  RNA_def_property_float_sdna(prop, NULL, "rotation");
235  RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
236  RNA_def_property_ui_text(prop, "Rotation", "Rotation of the effect");
237  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
238 
239  prop = RNA_def_property(srna, "use_dof_mode", PROP_BOOLEAN, PROP_NONE);
241  RNA_def_property_ui_text(prop, "Use as Depth Of Field", "Blur using camera depth of field");
242  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
243 }
244 
246 {
247  StructRNA *srna;
248  PropertyRNA *prop;
249 
250  srna = RNA_def_struct(brna, "ShaderFxColorize", "ShaderFx");
251  RNA_def_struct_ui_text(srna, "Colorize Effect", "Colorize effect");
252  RNA_def_struct_sdna(srna, "ColorizeShaderFxData");
253  RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
254 
255  prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
256  RNA_def_property_float_sdna(prop, NULL, "factor");
257  RNA_def_property_range(prop, 0, 1.0);
258  RNA_def_property_ui_text(prop, "Factor", "Mix factor");
259  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
260 
261  prop = RNA_def_property(srna, "low_color", PROP_FLOAT, PROP_COLOR);
262  RNA_def_property_range(prop, 0.0, 1.0);
263  RNA_def_property_float_sdna(prop, NULL, "low_color");
264  RNA_def_property_array(prop, 4);
265  RNA_def_property_ui_text(prop, "Low Color", "First color used for effect");
266  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
267 
268  prop = RNA_def_property(srna, "high_color", PROP_FLOAT, PROP_COLOR);
269  RNA_def_property_range(prop, 0.0, 1.0);
270  RNA_def_property_float_sdna(prop, NULL, "high_color");
271  RNA_def_property_array(prop, 4);
272  RNA_def_property_ui_text(prop, "High Color", "Second color used for effect");
273  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
274 
275  prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
276  RNA_def_property_enum_sdna(prop, NULL, "mode");
278  RNA_def_property_ui_text(prop, "Mode", "Effect mode");
279  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
280 }
281 
283 {
284  StructRNA *srna;
285  PropertyRNA *prop;
286 
287  static EnumPropertyItem prop_shaderfx_wave_type_items[] = {
288  {0, "HORIZONTAL", 0, "Horizontal", ""},
289  {1, "VERTICAL", 0, "Vertical", ""},
290  {0, NULL, 0, NULL, NULL}};
291 
292  srna = RNA_def_struct(brna, "ShaderFxWave", "ShaderFx");
293  RNA_def_struct_ui_text(srna, "Wave Deformation Effect", "Wave Deformation effect");
294  RNA_def_struct_sdna(srna, "WaveShaderFxData");
295  RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
296 
297  prop = RNA_def_property(srna, "orientation", PROP_ENUM, PROP_NONE);
298  RNA_def_property_enum_sdna(prop, NULL, "orientation");
299  RNA_def_property_enum_items(prop, prop_shaderfx_wave_type_items);
300  RNA_def_property_ui_text(prop, "Orientation", "Direction of the wave");
301  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
302 
303  prop = RNA_def_property(srna, "amplitude", PROP_FLOAT, PROP_NONE);
304  RNA_def_property_float_sdna(prop, NULL, "amplitude");
305  RNA_def_property_range(prop, 0, FLT_MAX);
306  RNA_def_property_ui_text(prop, "Amplitude", "Amplitude of Wave");
307  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
308 
309  prop = RNA_def_property(srna, "period", PROP_FLOAT, PROP_NONE);
310  RNA_def_property_float_sdna(prop, NULL, "period");
311  RNA_def_property_range(prop, 0, FLT_MAX);
312  RNA_def_property_ui_text(prop, "Period", "Period of Wave");
313  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
314 
315  prop = RNA_def_property(srna, "phase", PROP_FLOAT, PROP_NONE);
316  RNA_def_property_float_sdna(prop, NULL, "phase");
317  RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
318  RNA_def_property_ui_text(prop, "Phase", "Phase Shift of Wave");
319  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
320 }
321 
323 {
324  StructRNA *srna;
325  PropertyRNA *prop;
326 
327  srna = RNA_def_struct(brna, "ShaderFxPixel", "ShaderFx");
328  RNA_def_struct_ui_text(srna, "Pixelate Effect", "Pixelate effect");
329  RNA_def_struct_sdna(srna, "PixelShaderFxData");
330  RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
331 
332  prop = RNA_def_property(srna, "size", PROP_INT, PROP_PIXEL);
333  RNA_def_property_int_sdna(prop, NULL, "size");
334  RNA_def_property_range(prop, 1, SHRT_MAX);
335  RNA_def_property_array(prop, 2);
336  RNA_def_property_ui_text(prop, "Size", "Pixel size");
337  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
338 
339  prop = RNA_def_property(srna, "use_antialiasing", PROP_BOOLEAN, PROP_NONE);
341  RNA_def_property_ui_text(prop, "Antialiasing", "Antialias pixels");
342  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
343 }
344 
346 {
347  StructRNA *srna;
348  PropertyRNA *prop;
349 
350  srna = RNA_def_struct(brna, "ShaderFxRim", "ShaderFx");
351  RNA_def_struct_ui_text(srna, "Rim Effect", "Rim effect");
352  RNA_def_struct_sdna(srna, "RimShaderFxData");
353  RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
354 
355  prop = RNA_def_property(srna, "offset", PROP_INT, PROP_PIXEL);
356  RNA_def_property_int_sdna(prop, NULL, "offset");
357  RNA_def_property_range(prop, SHRT_MIN, SHRT_MAX);
358  RNA_def_property_ui_text(prop, "Offset", "Offset of the rim");
359  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
360 
361  prop = RNA_def_property(srna, "rim_color", PROP_FLOAT, PROP_COLOR);
362  RNA_def_property_range(prop, 0.0, 1.0);
363  RNA_def_property_float_sdna(prop, NULL, "rim_rgb");
364  RNA_def_property_array(prop, 3);
365  RNA_def_property_ui_text(prop, "Rim Color", "Color used for Rim");
366  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
367 
368  prop = RNA_def_property(srna, "mask_color", PROP_FLOAT, PROP_COLOR);
369  RNA_def_property_range(prop, 0.0, 1.0);
370  RNA_def_property_float_sdna(prop, NULL, "mask_rgb");
371  RNA_def_property_array(prop, 3);
372  RNA_def_property_ui_text(prop, "Mask Color", "Color that must be kept");
373  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
374 
375  prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
376  RNA_def_property_enum_sdna(prop, NULL, "mode");
378  RNA_def_property_ui_text(prop, "Mode", "Blend mode");
379  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
380 
381  prop = RNA_def_property(srna, "blur", PROP_INT, PROP_PIXEL);
382  RNA_def_property_int_sdna(prop, NULL, "blur");
383  RNA_def_property_range(prop, 0, SHRT_MAX);
385  prop, "Blur", "Number of pixels for blurring rim (set to 0 to disable)");
386  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
387 
388  prop = RNA_def_property(srna, "samples", PROP_INT, PROP_NONE);
389  RNA_def_property_int_sdna(prop, NULL, "samples");
390  RNA_def_property_range(prop, 0, 32);
391  RNA_def_property_ui_range(prop, 0, 32, 2, -1);
393  RNA_def_property_ui_text(prop, "Samples", "Number of Blur Samples (zero, disable blur)");
394  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
395 }
396 
398 {
399  static EnumPropertyItem prop_shaderfx_shadow_type_items[] = {
400  {0, "HORIZONTAL", 0, "Horizontal", ""},
401  {1, "VERTICAL", 0, "Vertical", ""},
402  {0, NULL, 0, NULL, NULL}};
403 
404  StructRNA *srna;
405  PropertyRNA *prop;
406 
407  srna = RNA_def_struct(brna, "ShaderFxShadow", "ShaderFx");
408  RNA_def_struct_ui_text(srna, "Shadow Effect", "Shadow effect");
409  RNA_def_struct_sdna(srna, "ShadowShaderFxData");
410  RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
411 
412  prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
413  RNA_def_property_ui_text(prop, "Object", "Object to determine center of rotation");
414  RNA_def_property_pointer_funcs(prop, NULL, "rna_ShadowShaderFx_object_set", NULL, NULL);
417  RNA_def_property_update(prop, 0, "rna_ShaderFx_dependency_update");
418 
419  prop = RNA_def_property(srna, "offset", PROP_INT, PROP_PIXEL);
420  RNA_def_property_int_sdna(prop, NULL, "offset");
421  RNA_def_property_range(prop, SHRT_MIN, SHRT_MAX);
422  RNA_def_property_ui_text(prop, "Offset", "Offset of the shadow");
423  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
424 
425  prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_XYZ);
426  RNA_def_property_float_sdna(prop, NULL, "scale");
427  RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
428  RNA_def_property_ui_text(prop, "Scale", "Offset of the shadow");
429  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
430 
431  prop = RNA_def_property(srna, "shadow_color", PROP_FLOAT, PROP_COLOR);
432  RNA_def_property_range(prop, 0.0, 1.0);
433  RNA_def_property_float_sdna(prop, NULL, "shadow_rgba");
434  RNA_def_property_array(prop, 4);
435  RNA_def_property_ui_text(prop, "Shadow Color", "Color used for Shadow");
436  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
437 
438  prop = RNA_def_property(srna, "orientation", PROP_ENUM, PROP_NONE);
439  RNA_def_property_enum_sdna(prop, NULL, "orientation");
440  RNA_def_property_enum_items(prop, prop_shaderfx_shadow_type_items);
441  RNA_def_property_ui_text(prop, "Orientation", "Direction of the wave");
442  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
443 
444  prop = RNA_def_property(srna, "amplitude", PROP_FLOAT, PROP_NONE);
445  RNA_def_property_float_sdna(prop, NULL, "amplitude");
446  RNA_def_property_range(prop, 0, FLT_MAX);
447  RNA_def_property_ui_text(prop, "Amplitude", "Amplitude of Wave");
448  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
449 
450  prop = RNA_def_property(srna, "period", PROP_FLOAT, PROP_NONE);
451  RNA_def_property_float_sdna(prop, NULL, "period");
452  RNA_def_property_range(prop, 0, FLT_MAX);
453  RNA_def_property_ui_text(prop, "Period", "Period of Wave");
454  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
455 
456  prop = RNA_def_property(srna, "phase", PROP_FLOAT, PROP_NONE);
457  RNA_def_property_float_sdna(prop, NULL, "phase");
458  RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
459  RNA_def_property_ui_text(prop, "Phase", "Phase Shift of Wave");
460  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
461 
462  prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_ANGLE);
463  RNA_def_property_float_sdna(prop, NULL, "rotation");
464  RNA_def_property_range(prop, DEG2RAD(-360), DEG2RAD(360));
465  RNA_def_property_ui_range(prop, DEG2RAD(-360), DEG2RAD(360), 5, 2);
466  RNA_def_property_ui_text(prop, "Rotation", "Rotation around center or object");
467  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
468 
469  prop = RNA_def_property(srna, "blur", PROP_INT, PROP_PIXEL);
470  RNA_def_property_int_sdna(prop, NULL, "blur");
471  RNA_def_property_range(prop, 0, SHRT_MAX);
473  prop, "Blur", "Number of pixels for blurring shadow (set to 0 to disable)");
474  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
475 
476  prop = RNA_def_property(srna, "samples", PROP_INT, PROP_NONE);
477  RNA_def_property_int_sdna(prop, NULL, "samples");
478  RNA_def_property_range(prop, 0, 32);
479  RNA_def_property_ui_range(prop, 0, 32, 2, -1);
481  RNA_def_property_ui_text(prop, "Samples", "Number of Blur Samples (zero, disable blur)");
482  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
483 
484  prop = RNA_def_property(srna, "use_object", PROP_BOOLEAN, PROP_NONE);
486  RNA_def_property_ui_text(prop, "Use Object", "Use object as center of rotation");
487  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
488 
489  prop = RNA_def_property(srna, "use_wave", PROP_BOOLEAN, PROP_NONE);
491  RNA_def_property_ui_text(prop, "Wave", "Use wave effect");
492  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
493 }
494 
496 {
497  StructRNA *srna;
498  PropertyRNA *prop;
499 
500  srna = RNA_def_struct(brna, "ShaderFxGlow", "ShaderFx");
501  RNA_def_struct_ui_text(srna, "Glow Effect", "Glow effect");
502  RNA_def_struct_sdna(srna, "GlowShaderFxData");
503  RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
504 
505  prop = RNA_def_property(srna, "glow_color", PROP_FLOAT, PROP_COLOR);
506  RNA_def_property_range(prop, 0.0, 1.0);
507  RNA_def_property_float_sdna(prop, NULL, "glow_color");
508  RNA_def_property_array(prop, 3);
509  RNA_def_property_ui_text(prop, "Glow Color", "Color used for generated glow");
510  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
511 
512  prop = RNA_def_property(srna, "opacity", PROP_FLOAT, PROP_FACTOR);
513  RNA_def_property_float_sdna(prop, NULL, "glow_color[3]");
514  RNA_def_property_range(prop, 0.0, 1.0f);
515  RNA_def_property_ui_text(prop, "Opacity", "Effect Opacity");
516  RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update");
517  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
518 
519  prop = RNA_def_property(srna, "select_color", PROP_FLOAT, PROP_COLOR);
520  RNA_def_property_range(prop, 0.0, 1.0);
521  RNA_def_property_float_sdna(prop, NULL, "select_color");
522  RNA_def_property_array(prop, 3);
523  RNA_def_property_ui_text(prop, "Select Color", "Color selected to apply glow");
524  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
525 
526  prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
527  RNA_def_property_enum_sdna(prop, NULL, "mode");
529  RNA_def_property_ui_text(prop, "Mode", "Glow mode");
530  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
531 
532  prop = RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_FACTOR);
533  RNA_def_property_float_sdna(prop, NULL, "threshold");
534  RNA_def_property_range(prop, 0.0f, 1.0f);
535  RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1f, 3);
536  RNA_def_property_ui_text(prop, "Threshold", "Limit to select color for glow effect");
537  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
538 
539  /* Use blur fields to make compatible with blur filter */
540  prop = RNA_def_property(srna, "size", PROP_FLOAT, PROP_XYZ);
541  RNA_def_property_float_sdna(prop, NULL, "blur");
542  RNA_def_property_range(prop, 0.0f, FLT_MAX);
543  RNA_def_property_ui_text(prop, "Size", "Size of the effect");
544  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
545 
546  prop = RNA_def_property(srna, "samples", PROP_INT, PROP_NONE);
547  RNA_def_property_int_sdna(prop, NULL, "samples");
548  RNA_def_property_range(prop, 1, 32);
549  RNA_def_property_ui_range(prop, 1, 32, 2, -1);
551  RNA_def_property_ui_text(prop, "Samples", "Number of Blur Samples");
552  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
553 
554  prop = RNA_def_property(srna, "use_glow_under", PROP_BOOLEAN, PROP_NONE);
557  prop, "Glow Under", "Glow only areas with alpha (not supported with Regular blend mode)");
558  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
559 
560  prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_ANGLE);
561  RNA_def_property_float_sdna(prop, NULL, "rotation");
562  RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
563  RNA_def_property_ui_text(prop, "Rotation", "Rotation of the effect");
564  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
565 
566  /* blend mode */
567  prop = RNA_def_property(srna, "blend_mode", PROP_ENUM, PROP_NONE);
568  RNA_def_property_enum_sdna(prop, NULL, "blend_mode");
570  RNA_def_property_ui_text(prop, "Blend Mode", "Blend mode");
571  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
572 }
573 
575 {
576  StructRNA *srna;
577  PropertyRNA *prop;
578 
579  srna = RNA_def_struct(brna, "ShaderFxSwirl", "ShaderFx");
580  RNA_def_struct_ui_text(srna, "Swirl Effect", "Swirl effect");
581  RNA_def_struct_sdna(srna, "SwirlShaderFxData");
582  RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
583 
584  prop = RNA_def_property(srna, "radius", PROP_INT, PROP_PIXEL);
585  RNA_def_property_int_sdna(prop, NULL, "radius");
586  RNA_def_property_range(prop, 0, SHRT_MAX);
587  RNA_def_property_ui_text(prop, "Radius", "Radius to apply");
588  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
589 
590  prop = RNA_def_property(srna, "angle", PROP_FLOAT, PROP_ANGLE);
591  RNA_def_property_float_sdna(prop, NULL, "angle");
592  RNA_def_property_range(prop, DEG2RAD(-5 * 360), DEG2RAD(5 * 360));
593  RNA_def_property_ui_range(prop, DEG2RAD(-5 * 360), DEG2RAD(5 * 360), 5, 2);
594  RNA_def_property_ui_text(prop, "Angle", "Angle of rotation");
595  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
596 
597  prop = RNA_def_property(srna, "use_transparent", PROP_BOOLEAN, PROP_NONE);
599  RNA_def_property_ui_text(prop, "Transparent", "Make image transparent outside of radius");
600  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
601 
602  prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
603  RNA_def_property_ui_text(prop, "Object", "Object to determine center location");
604  RNA_def_property_pointer_funcs(prop, NULL, "rna_SwirlShaderFx_object_set", NULL, NULL);
607  RNA_def_property_update(prop, 0, "rna_ShaderFx_dependency_update");
608 }
609 
611 {
612  StructRNA *srna;
613  PropertyRNA *prop;
614 
615  srna = RNA_def_struct(brna, "ShaderFxFlip", "ShaderFx");
616  RNA_def_struct_ui_text(srna, "Flip Effect", "Flip effect");
617  RNA_def_struct_sdna(srna, "FlipShaderFxData");
618  RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
619 
620  prop = RNA_def_property(srna, "flip_horizontal", PROP_BOOLEAN, PROP_NONE);
622  RNA_def_property_ui_text(prop, "Horizontal", "Flip image horizontally");
623  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
624 
625  prop = RNA_def_property(srna, "flip_vertical", PROP_BOOLEAN, PROP_NONE);
627  RNA_def_property_ui_text(prop, "Vertical", "Flip image vertically");
628  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
629 }
630 
632 {
633  StructRNA *srna;
634  PropertyRNA *prop;
635 
636  /* data */
637  srna = RNA_def_struct(brna, "ShaderFx", NULL);
638  RNA_def_struct_ui_text(srna, "ShaderFx", "Effect affecting the grease pencil object");
639  RNA_def_struct_refine_func(srna, "rna_ShaderFx_refine");
640  RNA_def_struct_path_func(srna, "rna_ShaderFx_path");
641  RNA_def_struct_sdna(srna, "ShaderFxData");
642 
643  /* strings */
644  prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
645  RNA_def_property_string_funcs(prop, NULL, NULL, "rna_ShaderFx_name_set");
646  RNA_def_property_ui_text(prop, "Name", "Effect name");
648  RNA_def_struct_name_property(srna, prop);
649 
650  /* enums */
651  prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
653  RNA_def_property_enum_sdna(prop, NULL, "type");
655  RNA_def_property_ui_text(prop, "Type", "");
656  RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_ID); /* Abused, for "Light"... */
657 
658  /* flags */
659  prop = RNA_def_property(srna, "show_viewport", PROP_BOOLEAN, PROP_NONE);
661  RNA_def_property_ui_text(prop, "Realtime", "Display effect in viewport");
664  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
665  RNA_def_property_ui_icon(prop, ICON_RESTRICT_VIEW_ON, 1);
666 
667  prop = RNA_def_property(srna, "show_render", PROP_BOOLEAN, PROP_NONE);
670  RNA_def_property_ui_text(prop, "Render", "Use effect during render");
671  RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_ON, 1);
673 
674  prop = RNA_def_property(srna, "show_in_editmode", PROP_BOOLEAN, PROP_NONE);
676  RNA_def_property_ui_text(prop, "Edit Mode", "Display effect in Edit mode");
677  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
678  RNA_def_property_ui_icon(prop, ICON_EDITMODE_HLT, 0);
679 
680  prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
682  RNA_def_property_boolean_sdna(prop, NULL, "ui_expand_flag", 0);
684  RNA_def_property_ui_text(prop, "Expanded", "Set effect expansion in the user interface");
685  RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1);
686 
687  /* types */
692  rna_def_shader_fx_rim(brna);
697 }
698 
699 #endif
void BKE_animdata_fix_paths_rename_all(struct ID *ref_id, const char *prefix, const char *oldName, const char *newName)
Definition: anim_data.c:1414
void id_lib_extern(struct ID *id)
Definition: lib_id.c:207
bool BKE_shaderfx_unique_name(struct ListBase *shaderfx, struct ShaderFxData *fx)
Definition: shader_fx.c:140
#define DEG2RAD(_deg)
size_t size_t char * BLI_sprintfN(const char *__restrict format,...) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_PRINTF_FORMAT(1
size_t size_t char size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, const size_t dst_maxncpy) ATTR_NONNULL()
Definition: string.c:333
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, const size_t maxncpy) ATTR_NONNULL()
Definition: string.c:108
char * BLI_strncpy_utf8(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
Definition: string_utf8.c:258
#define UNUSED(x)
#define BLT_I18NCONTEXT_ID_ID
void DEG_id_tag_update(struct ID *id, int flag)
void DEG_relations_tag_update(struct Main *bmain)
@ ID_RECALC_GEOMETRY
Definition: DNA_ID.h:611
@ eGplBlendMode_Regular
@ eGplBlendMode_Add
@ eGplBlendMode_Multiply
@ eGplBlendMode_Divide
@ eGplBlendMode_Subtract
Object is a sort of wrapper for general info.
@ OB_EMPTY
@ FX_BLUR_DOF_MODE
@ FX_SHADOW_USE_OBJECT
@ FX_SHADOW_USE_WAVE
@ eShaderFxMode_Realtime
@ eShaderFxMode_Editmode
@ eShaderFxMode_Render
@ eShaderFxGlowMode_Luminance
@ eShaderFxGlowMode_Color
@ eShaderFxColorizeMode_Custom
@ eShaderFxColorizeMode_GrayScale
@ eShaderFxColorizeMode_Transparent
@ eShaderFxColorizeMode_Duotone
@ eShaderFxColorizeMode_Sepia
@ FX_SWIRL_MAKE_TRANSPARENT
@ eShaderFxRimMode_Multiply
@ eShaderFxRimMode_Add
@ eShaderFxRimMode_Normal
@ eShaderFxRimMode_Overlay
@ eShaderFxRimMode_Subtract
@ eShaderFxRimMode_Divide
@ FX_PIXEL_FILTER_NEAREST
@ FX_FLIP_HORIZONTAL
@ FX_FLIP_VERTICAL
@ FX_GLOW_USE_ALPHA
ShaderFxType
@ eShaderFxType_Pixel
@ eShaderFxType_Rim
@ eShaderFxType_None
@ eShaderFxType_Swirl
@ eShaderFxType_Glow
@ eShaderFxType_Flip
@ NUM_SHADER_FX_TYPES
@ eShaderFxType_Blur
@ eShaderFxType_Shadow
@ eShaderFxType_Colorize
@ eShaderFxType_Wave
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
Read Guarded memory(de)allocation.
StructRNA RNA_ShaderFxWave
StructRNA RNA_ShaderFxBlur
StructRNA RNA_ShaderFxColorize
StructRNA RNA_ShaderFxSwirl
StructRNA RNA_ShaderFxRim
StructRNA RNA_ShaderFxFlip
StructRNA RNA_ShaderFx
StructRNA RNA_ShaderFxPixel
StructRNA RNA_ShaderFxGlow
StructRNA RNA_ShaderFxShadow
@ PROP_FLOAT
Definition: RNA_types.h:75
@ PROP_BOOLEAN
Definition: RNA_types.h:73
@ PROP_ENUM
Definition: RNA_types.h:77
@ PROP_INT
Definition: RNA_types.h:74
@ PROP_STRING
Definition: RNA_types.h:76
@ PROP_POINTER
Definition: RNA_types.h:78
@ PROPOVERRIDE_OVERRIDABLE_LIBRARY
Definition: RNA_types.h:297
@ PROP_EDITABLE
Definition: RNA_types.h:175
@ PROP_LIB_EXCEPTION
Definition: RNA_types.h:181
@ PROP_NO_DEG_UPDATE
Definition: RNA_types.h:286
@ PROP_ID_SELF_CHECK
Definition: RNA_types.h:218
@ PROP_XYZ
Definition: RNA_types.h:148
@ PROP_COLOR
Definition: RNA_types.h:139
@ PROP_PIXEL
Definition: RNA_types.h:128
@ PROP_ANGLE
Definition: RNA_types.h:132
@ PROP_NONE
Definition: RNA_types.h:113
@ PROP_FACTOR
Definition: RNA_types.h:131
#define ND_DATA
Definition: WM_types.h:408
#define NC_GPENCIL
Definition: WM_types.h:300
#define NA_RENAME
Definition: WM_types.h:466
#define ND_SHADERFX
Definition: WM_types.h:372
#define NC_OBJECT
Definition: WM_types.h:280
Scene scene
void RNA_def_struct_refine_func(StructRNA *srna, const char *refine)
Definition: rna_define.c:1167
void RNA_def_struct_path_func(StructRNA *srna, const char *path)
Definition: rna_define.c:1212
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t bit)
Definition: rna_define.c:2257
void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set)
Definition: rna_define.c:3312
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
Definition: rna_define.c:1676
void RNA_def_property_ui_icon(PropertyRNA *prop, int icon, int consecutive)
Definition: rna_define.c:1684
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
Definition: rna_define.c:1259
void RNA_def_property_int_default(PropertyRNA *prop, int value)
Definition: rna_define.c:1998
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
Definition: rna_define.c:1892
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
Definition: rna_define.c:1067
void RNA_def_property_array(PropertyRNA *prop, int length)
Definition: rna_define.c:1568
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
Definition: rna_define.c:1757
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
Definition: rna_define.c:2927
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
Definition: rna_define.c:1279
void RNA_def_struct_name_property(struct StructRNA *srna, struct PropertyRNA *prop)
Definition: rna_define.c:1122
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
Definition: rna_define.c:1517
void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll)
Definition: rna_define.c:3373
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
Definition: rna_define.c:1047
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2623
void RNA_def_struct_ui_icon(StructRNA *srna, int icon)
Definition: rna_define.c:1267
void RNA_def_property_translation_context(PropertyRNA *prop, const char *context)
Definition: rna_define.c:2870
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
Definition: rna_define.c:1512
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2515
void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision)
Definition: rna_define.c:1706
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2364
void RNA_def_property_boolean_negative_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
Definition: rna_define.c:2348
void RNA_def_property_override_flag(PropertyRNA *prop, PropertyOverrideFlag flag)
Definition: rna_define.c:1525
static void rna_def_shader_fx_wave(BlenderRNA *brna)
static void rna_def_shader_fx_glow(BlenderRNA *brna)
static void rna_def_shader_fx_flip(BlenderRNA *brna)
static void rna_def_shader_fx_pixel(BlenderRNA *brna)
static void rna_def_shader_fx_swirl(BlenderRNA *brna)
void RNA_def_shader_fx(BlenderRNA *brna)
static void rna_def_shader_fx_blur(BlenderRNA *brna)
static void rna_def_shader_fx_colorize(BlenderRNA *brna)
static const EnumPropertyItem rna_enum_shaderfx_colorize_modes_items[]
Definition: rna_shader_fx.c:82
const EnumPropertyItem rna_enum_object_shaderfx_type_items[]
Definition: rna_shader_fx.c:47
static void rna_def_shader_fx_rim(BlenderRNA *brna)
static void rna_def_shader_fx_shadow(BlenderRNA *brna)
static const EnumPropertyItem rna_enum_glow_blend_modes_items[]
Definition: rna_shader_fx.c:90
static const EnumPropertyItem rna_enum_shaderfx_rim_modes_items[]
Definition: rna_shader_fx.c:68
static const EnumPropertyItem rna_enum_shaderfx_glow_modes_items[]
Definition: rna_shader_fx.c:77
Definition: DNA_ID.h:273
Definition: BKE_main.h:116
ListBase shader_fx
void * data
Definition: RNA_types.h:52
struct ID * owner_id
Definition: RNA_types.h:50
void WM_main_add_notifier(unsigned int type, void *reference)
PointerRNA * ptr
Definition: wm_files.c:3157