Blender  V3.3
rna_shader_fx.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
7 #include <float.h>
8 #include <limits.h>
9 #include <stdlib.h>
10 
11 #include "DNA_gpencil_types.h"
12 #include "DNA_object_types.h"
13 #include "DNA_scene_types.h"
14 #include "DNA_shader_fx_types.h"
15 
16 #include "MEM_guardedalloc.h"
17 
18 #include "BLI_math.h"
19 
20 #include "BLT_translation.h"
21 
22 #include "BKE_animsys.h"
23 
24 #include "RNA_access.h"
25 #include "RNA_define.h"
26 #include "RNA_enum_types.h"
27 
28 #include "rna_internal.h"
29 
30 #include "WM_api.h"
31 #include "WM_types.h"
32 
34  {eShaderFxType_Blur, "FX_BLUR", ICON_SHADERFX, "Blur", "Apply Gaussian Blur to object"},
36  "FX_COLORIZE",
37  ICON_SHADERFX,
38  "Colorize",
39  "Apply different tint effects"},
40  {eShaderFxType_Flip, "FX_FLIP", ICON_SHADERFX, "Flip", "Flip image"},
41  {eShaderFxType_Glow, "FX_GLOW", ICON_SHADERFX, "Glow", "Create a glow effect"},
42  {eShaderFxType_Pixel, "FX_PIXEL", ICON_SHADERFX, "Pixelate", "Pixelate image"},
43  {eShaderFxType_Rim, "FX_RIM", ICON_SHADERFX, "Rim", "Add a rim to the image"},
44  {eShaderFxType_Shadow, "FX_SHADOW", ICON_SHADERFX, "Shadow", "Create a shadow effect"},
45  {eShaderFxType_Swirl, "FX_SWIRL", ICON_SHADERFX, "Swirl", "Create a rotation distortion"},
47  "FX_WAVE",
48  ICON_SHADERFX,
49  "Wave Distortion",
50  "Apply sinusoidal deformation"},
51  {0, NULL, 0, NULL, NULL},
52 };
53 
55  {eShaderFxRimMode_Normal, "NORMAL", 0, "Regular", ""},
56  {eShaderFxRimMode_Overlay, "OVERLAY", 0, "Overlay", ""},
57  {eShaderFxRimMode_Add, "ADD", 0, "Add", ""},
58  {eShaderFxRimMode_Subtract, "SUBTRACT", 0, "Subtract", ""},
59  {eShaderFxRimMode_Multiply, "MULTIPLY", 0, "Multiply", ""},
60  {eShaderFxRimMode_Divide, "DIVIDE", 0, "Divide", ""},
61  {0, NULL, 0, NULL, NULL}};
62 
64  {eShaderFxGlowMode_Luminance, "LUMINANCE", 0, "Luminance", ""},
65  {eShaderFxGlowMode_Color, "COLOR", 0, "Color", ""},
66  {0, NULL, 0, NULL, NULL}};
67 
69  {eShaderFxColorizeMode_GrayScale, "GRAYSCALE", 0, "Gray Scale", ""},
70  {eShaderFxColorizeMode_Sepia, "SEPIA", 0, "Sepia", ""},
71  {eShaderFxColorizeMode_Duotone, "DUOTONE", 0, "Duotone", ""},
72  {eShaderFxColorizeMode_Transparent, "TRANSPARENT", 0, "Transparent", ""},
73  {eShaderFxColorizeMode_Custom, "CUSTOM", 0, "Custom", ""},
74  {0, NULL, 0, NULL, NULL}};
75 
77  {eGplBlendMode_Regular, "REGULAR", 0, "Regular", ""},
78  {eGplBlendMode_Add, "ADD", 0, "Add", ""},
79  {eGplBlendMode_Subtract, "SUBTRACT", 0, "Subtract", ""},
80  {eGplBlendMode_Multiply, "MULTIPLY", 0, "Multiply", ""},
81  {eGplBlendMode_Divide, "DIVIDE", 0, "Divide", ""},
82  {0, NULL, 0, NULL, NULL}};
83 
84 #ifdef RNA_RUNTIME
85 
86 # include "BKE_shader_fx.h"
87 
88 # include "DEG_depsgraph.h"
89 # include "DEG_depsgraph_build.h"
90 
91 static StructRNA *rna_ShaderFx_refine(struct PointerRNA *ptr)
92 {
94 
95  switch ((ShaderFxType)md->type) {
96  case eShaderFxType_Blur:
97  return &RNA_ShaderFxBlur;
99  return &RNA_ShaderFxColorize;
100  case eShaderFxType_Wave:
101  return &RNA_ShaderFxWave;
102  case eShaderFxType_Pixel:
103  return &RNA_ShaderFxPixel;
104  case eShaderFxType_Rim:
105  return &RNA_ShaderFxRim;
107  return &RNA_ShaderFxShadow;
108  case eShaderFxType_Swirl:
109  return &RNA_ShaderFxSwirl;
110  case eShaderFxType_Flip:
111  return &RNA_ShaderFxFlip;
112  case eShaderFxType_Glow:
113  return &RNA_ShaderFxGlow;
114  /* Default */
115  case eShaderFxType_None:
116  case NUM_SHADER_FX_TYPES:
117  default:
118  return &RNA_ShaderFx;
119  }
120 
121  return &RNA_ShaderFx;
122 }
123 
124 static void rna_ShaderFx_name_set(PointerRNA *ptr, const char *value)
125 {
126  ShaderFxData *gmd = ptr->data;
127  char oldname[sizeof(gmd->name)];
128 
129  /* make a copy of the old name first */
130  BLI_strncpy(oldname, gmd->name, sizeof(gmd->name));
131 
132  /* copy the new name into the name slot */
133  BLI_strncpy_utf8(gmd->name, value, sizeof(gmd->name));
134 
135  /* make sure the name is truly unique */
136  if (ptr->owner_id) {
137  Object *ob = (Object *)ptr->owner_id;
139  }
140 
141  /* fix all the animation data which may link to this */
142  BKE_animdata_fix_paths_rename_all(NULL, "shader_effects", oldname, gmd->name);
143 }
144 
145 static char *rna_ShaderFx_path(const PointerRNA *ptr)
146 {
147  const ShaderFxData *gmd = ptr->data;
148  char name_esc[sizeof(gmd->name) * 2];
149 
150  BLI_str_escape(name_esc, gmd->name, sizeof(name_esc));
151  return BLI_sprintfN("shader_effects[\"%s\"]", name_esc);
152 }
153 
154 static void rna_ShaderFx_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
155 {
158 }
159 
160 static void rna_ShaderFx_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
161 {
162  rna_ShaderFx_update(bmain, scene, ptr);
164 }
165 
166 /* Objects */
167 
168 static void shaderfx_object_set(Object *self, Object **ob_p, int type, PointerRNA value)
169 {
170  Object *ob = value.data;
171 
172  if (!self || ob != self) {
173  if (!ob || type == OB_EMPTY || ob->type == type) {
174  id_lib_extern((ID *)ob);
175  *ob_p = ob;
176  }
177  }
178 }
179 
180 # define RNA_FX_OBJECT_SET(_type, _prop, _obtype) \
181  static void rna_##_type##ShaderFx_##_prop##_set( \
182  PointerRNA *ptr, PointerRNA value, struct ReportList *UNUSED(reports)) \
183  { \
184  _type##ShaderFxData *tmd = (_type##ShaderFxData *)ptr->data; \
185  shaderfx_object_set((Object *)ptr->owner_id, &tmd->_prop, _obtype, value); \
186  }
187 
188 RNA_FX_OBJECT_SET(Shadow, object, OB_EMPTY);
189 RNA_FX_OBJECT_SET(Swirl, object, OB_EMPTY);
190 
191 # undef RNA_FX_OBJECT_SET
192 
193 #else
194 
196 {
197  StructRNA *srna;
198  PropertyRNA *prop;
199 
200  srna = RNA_def_struct(brna, "ShaderFxBlur", "ShaderFx");
201  RNA_def_struct_ui_text(srna, "Gaussian Blur Effect", "Gaussian Blur effect");
202  RNA_def_struct_sdna(srna, "BlurShaderFxData");
203  RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
204 
206 
207  prop = RNA_def_property(srna, "size", PROP_FLOAT, PROP_XYZ);
208  RNA_def_property_float_sdna(prop, NULL, "radius");
209  RNA_def_property_range(prop, 0.0f, FLT_MAX);
210  RNA_def_property_ui_text(prop, "Size", "Factor of Blur");
211  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
212 
213  prop = RNA_def_property(srna, "samples", PROP_INT, PROP_NONE);
214  RNA_def_property_int_sdna(prop, NULL, "samples");
215  RNA_def_property_range(prop, 0, 32);
216  RNA_def_property_ui_range(prop, 0, 32, 2, -1);
218  RNA_def_property_ui_text(prop, "Samples", "Number of Blur Samples (zero, disable blur)");
219  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
220 
221  prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_ANGLE);
222  RNA_def_property_float_sdna(prop, NULL, "rotation");
223  RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
224  RNA_def_property_ui_text(prop, "Rotation", "Rotation of the effect");
225  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
226 
227  prop = RNA_def_property(srna, "use_dof_mode", PROP_BOOLEAN, PROP_NONE);
229  RNA_def_property_ui_text(prop, "Use as Depth Of Field", "Blur using camera depth of field");
230  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
231 
233 }
234 
236 {
237  StructRNA *srna;
238  PropertyRNA *prop;
239 
240  srna = RNA_def_struct(brna, "ShaderFxColorize", "ShaderFx");
241  RNA_def_struct_ui_text(srna, "Colorize Effect", "Colorize effect");
242  RNA_def_struct_sdna(srna, "ColorizeShaderFxData");
243  RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
244 
246 
247  prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
248  RNA_def_property_float_sdna(prop, NULL, "factor");
249  RNA_def_property_range(prop, 0, 1.0);
250  RNA_def_property_ui_text(prop, "Factor", "Mix factor");
251  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
252 
253  prop = RNA_def_property(srna, "low_color", PROP_FLOAT, PROP_COLOR);
254  RNA_def_property_range(prop, 0.0, 1.0);
255  RNA_def_property_float_sdna(prop, NULL, "low_color");
256  RNA_def_property_array(prop, 4);
257  RNA_def_property_ui_text(prop, "Low Color", "First color used for effect");
258  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
259 
260  prop = RNA_def_property(srna, "high_color", PROP_FLOAT, PROP_COLOR);
261  RNA_def_property_range(prop, 0.0, 1.0);
262  RNA_def_property_float_sdna(prop, NULL, "high_color");
263  RNA_def_property_array(prop, 4);
264  RNA_def_property_ui_text(prop, "High Color", "Second color used for effect");
265  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
266 
267  prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
268  RNA_def_property_enum_sdna(prop, NULL, "mode");
270  RNA_def_property_ui_text(prop, "Mode", "Effect mode");
271  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
272 
274 }
275 
277 {
278  StructRNA *srna;
279  PropertyRNA *prop;
280 
281  static EnumPropertyItem prop_shaderfx_wave_type_items[] = {
282  {0, "HORIZONTAL", 0, "Horizontal", ""},
283  {1, "VERTICAL", 0, "Vertical", ""},
284  {0, NULL, 0, NULL, NULL}};
285 
286  srna = RNA_def_struct(brna, "ShaderFxWave", "ShaderFx");
287  RNA_def_struct_ui_text(srna, "Wave Deformation Effect", "Wave Deformation effect");
288  RNA_def_struct_sdna(srna, "WaveShaderFxData");
289  RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
290 
292 
293  prop = RNA_def_property(srna, "orientation", PROP_ENUM, PROP_NONE);
294  RNA_def_property_enum_sdna(prop, NULL, "orientation");
295  RNA_def_property_enum_items(prop, prop_shaderfx_wave_type_items);
296  RNA_def_property_ui_text(prop, "Orientation", "Direction of the wave");
297  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
298 
299  prop = RNA_def_property(srna, "amplitude", PROP_FLOAT, PROP_NONE);
300  RNA_def_property_float_sdna(prop, NULL, "amplitude");
301  RNA_def_property_range(prop, 0, FLT_MAX);
302  RNA_def_property_ui_text(prop, "Amplitude", "Amplitude of Wave");
303  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
304 
305  prop = RNA_def_property(srna, "period", PROP_FLOAT, PROP_NONE);
306  RNA_def_property_float_sdna(prop, NULL, "period");
307  RNA_def_property_range(prop, 0, FLT_MAX);
308  RNA_def_property_ui_text(prop, "Period", "Period of Wave");
309  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
310 
311  prop = RNA_def_property(srna, "phase", PROP_FLOAT, PROP_NONE);
312  RNA_def_property_float_sdna(prop, NULL, "phase");
313  RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
314  RNA_def_property_ui_text(prop, "Phase", "Phase Shift of Wave");
315  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
316 
318 }
319 
321 {
322  StructRNA *srna;
323  PropertyRNA *prop;
324 
325  srna = RNA_def_struct(brna, "ShaderFxPixel", "ShaderFx");
326  RNA_def_struct_ui_text(srna, "Pixelate Effect", "Pixelate effect");
327  RNA_def_struct_sdna(srna, "PixelShaderFxData");
328  RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
329 
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 
345 }
346 
348 {
349  StructRNA *srna;
350  PropertyRNA *prop;
351 
352  srna = RNA_def_struct(brna, "ShaderFxRim", "ShaderFx");
353  RNA_def_struct_ui_text(srna, "Rim Effect", "Rim effect");
354  RNA_def_struct_sdna(srna, "RimShaderFxData");
355  RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
356 
358 
359  prop = RNA_def_property(srna, "offset", PROP_INT, PROP_PIXEL);
360  RNA_def_property_int_sdna(prop, NULL, "offset");
361  RNA_def_property_range(prop, SHRT_MIN, SHRT_MAX);
362  RNA_def_property_ui_text(prop, "Offset", "Offset of the rim");
363  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
364 
365  prop = RNA_def_property(srna, "rim_color", PROP_FLOAT, PROP_COLOR);
366  RNA_def_property_range(prop, 0.0, 1.0);
367  RNA_def_property_float_sdna(prop, NULL, "rim_rgb");
368  RNA_def_property_array(prop, 3);
369  RNA_def_property_ui_text(prop, "Rim Color", "Color used for Rim");
370  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
371 
372  prop = RNA_def_property(srna, "mask_color", PROP_FLOAT, PROP_COLOR);
373  RNA_def_property_range(prop, 0.0, 1.0);
374  RNA_def_property_float_sdna(prop, NULL, "mask_rgb");
375  RNA_def_property_array(prop, 3);
376  RNA_def_property_ui_text(prop, "Mask Color", "Color that must be kept");
377  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
378 
379  prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
380  RNA_def_property_enum_sdna(prop, NULL, "mode");
382  RNA_def_property_ui_text(prop, "Mode", "Blend mode");
383  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
384 
385  prop = RNA_def_property(srna, "blur", PROP_INT, PROP_PIXEL);
386  RNA_def_property_int_sdna(prop, NULL, "blur");
387  RNA_def_property_range(prop, 0, SHRT_MAX);
389  prop, "Blur", "Number of pixels for blurring rim (set to 0 to disable)");
390  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
391 
392  prop = RNA_def_property(srna, "samples", PROP_INT, PROP_NONE);
393  RNA_def_property_int_sdna(prop, NULL, "samples");
394  RNA_def_property_range(prop, 0, 32);
395  RNA_def_property_ui_range(prop, 0, 32, 2, -1);
397  RNA_def_property_ui_text(prop, "Samples", "Number of Blur Samples (zero, disable blur)");
398  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
399 
401 }
402 
404 {
405  static EnumPropertyItem prop_shaderfx_shadow_type_items[] = {
406  {0, "HORIZONTAL", 0, "Horizontal", ""},
407  {1, "VERTICAL", 0, "Vertical", ""},
408  {0, NULL, 0, NULL, NULL}};
409 
410  StructRNA *srna;
411  PropertyRNA *prop;
412 
413  srna = RNA_def_struct(brna, "ShaderFxShadow", "ShaderFx");
414  RNA_def_struct_ui_text(srna, "Shadow Effect", "Shadow effect");
415  RNA_def_struct_sdna(srna, "ShadowShaderFxData");
416  RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
417 
419 
420  prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
421  RNA_def_property_ui_text(prop, "Object", "Object to determine center of rotation");
422  RNA_def_property_pointer_funcs(prop, NULL, "rna_ShadowShaderFx_object_set", NULL, NULL);
424  RNA_def_property_update(prop, 0, "rna_ShaderFx_dependency_update");
425 
426  prop = RNA_def_property(srna, "offset", PROP_INT, PROP_PIXEL);
427  RNA_def_property_int_sdna(prop, NULL, "offset");
428  RNA_def_property_range(prop, SHRT_MIN, SHRT_MAX);
429  RNA_def_property_ui_text(prop, "Offset", "Offset of the shadow");
430  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
431 
432  prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_XYZ);
433  RNA_def_property_float_sdna(prop, NULL, "scale");
434  RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
435  RNA_def_property_ui_text(prop, "Scale", "Offset of the shadow");
436  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
437 
438  prop = RNA_def_property(srna, "shadow_color", PROP_FLOAT, PROP_COLOR);
439  RNA_def_property_range(prop, 0.0, 1.0);
440  RNA_def_property_float_sdna(prop, NULL, "shadow_rgba");
441  RNA_def_property_array(prop, 4);
442  RNA_def_property_ui_text(prop, "Shadow Color", "Color used for Shadow");
443  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
444 
445  prop = RNA_def_property(srna, "orientation", PROP_ENUM, PROP_NONE);
446  RNA_def_property_enum_sdna(prop, NULL, "orientation");
447  RNA_def_property_enum_items(prop, prop_shaderfx_shadow_type_items);
448  RNA_def_property_ui_text(prop, "Orientation", "Direction of the wave");
449  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
450 
451  prop = RNA_def_property(srna, "amplitude", PROP_FLOAT, PROP_NONE);
452  RNA_def_property_float_sdna(prop, NULL, "amplitude");
453  RNA_def_property_range(prop, 0, FLT_MAX);
454  RNA_def_property_ui_text(prop, "Amplitude", "Amplitude of Wave");
455  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
456 
457  prop = RNA_def_property(srna, "period", PROP_FLOAT, PROP_NONE);
458  RNA_def_property_float_sdna(prop, NULL, "period");
459  RNA_def_property_range(prop, 0, FLT_MAX);
460  RNA_def_property_ui_text(prop, "Period", "Period of Wave");
461  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
462 
463  prop = RNA_def_property(srna, "phase", PROP_FLOAT, PROP_NONE);
464  RNA_def_property_float_sdna(prop, NULL, "phase");
465  RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
466  RNA_def_property_ui_text(prop, "Phase", "Phase Shift of Wave");
467  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
468 
469  prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_ANGLE);
470  RNA_def_property_float_sdna(prop, NULL, "rotation");
471  RNA_def_property_range(prop, DEG2RAD(-360), DEG2RAD(360));
472  RNA_def_property_ui_range(prop, DEG2RAD(-360), DEG2RAD(360), 5, 2);
473  RNA_def_property_ui_text(prop, "Rotation", "Rotation around center or object");
474  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
475 
476  prop = RNA_def_property(srna, "blur", PROP_INT, PROP_PIXEL);
477  RNA_def_property_int_sdna(prop, NULL, "blur");
478  RNA_def_property_range(prop, 0, SHRT_MAX);
480  prop, "Blur", "Number of pixels for blurring shadow (set to 0 to disable)");
481  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
482 
483  prop = RNA_def_property(srna, "samples", PROP_INT, PROP_NONE);
484  RNA_def_property_int_sdna(prop, NULL, "samples");
485  RNA_def_property_range(prop, 0, 32);
486  RNA_def_property_ui_range(prop, 0, 32, 2, -1);
488  RNA_def_property_ui_text(prop, "Samples", "Number of Blur Samples (zero, disable blur)");
489  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
490 
491  prop = RNA_def_property(srna, "use_object", PROP_BOOLEAN, PROP_NONE);
493  RNA_def_property_ui_text(prop, "Use Object", "Use object as center of rotation");
494  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
495 
496  prop = RNA_def_property(srna, "use_wave", PROP_BOOLEAN, PROP_NONE);
498  RNA_def_property_ui_text(prop, "Wave", "Use wave effect");
499  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
500 
502 }
503 
505 {
506  StructRNA *srna;
507  PropertyRNA *prop;
508 
509  srna = RNA_def_struct(brna, "ShaderFxGlow", "ShaderFx");
510  RNA_def_struct_ui_text(srna, "Glow Effect", "Glow effect");
511  RNA_def_struct_sdna(srna, "GlowShaderFxData");
512  RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
513 
515 
516  prop = RNA_def_property(srna, "glow_color", PROP_FLOAT, PROP_COLOR);
517  RNA_def_property_range(prop, 0.0, 1.0);
518  RNA_def_property_float_sdna(prop, NULL, "glow_color");
519  RNA_def_property_array(prop, 3);
520  RNA_def_property_ui_text(prop, "Glow Color", "Color used for generated glow");
521  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
522 
523  prop = RNA_def_property(srna, "opacity", PROP_FLOAT, PROP_FACTOR);
524  RNA_def_property_float_sdna(prop, NULL, "glow_color[3]");
525  RNA_def_property_range(prop, 0.0, 1.0f);
526  RNA_def_property_ui_text(prop, "Opacity", "Effect Opacity");
527  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
528 
529  prop = RNA_def_property(srna, "select_color", PROP_FLOAT, PROP_COLOR);
530  RNA_def_property_range(prop, 0.0, 1.0);
531  RNA_def_property_float_sdna(prop, NULL, "select_color");
532  RNA_def_property_array(prop, 3);
533  RNA_def_property_ui_text(prop, "Select Color", "Color selected to apply glow");
534  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
535 
536  prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
537  RNA_def_property_enum_sdna(prop, NULL, "mode");
539  RNA_def_property_ui_text(prop, "Mode", "Glow mode");
540  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
541 
542  prop = RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_FACTOR);
543  RNA_def_property_float_sdna(prop, NULL, "threshold");
544  RNA_def_property_range(prop, 0.0f, 1.0f);
545  RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1f, 3);
546  RNA_def_property_ui_text(prop, "Threshold", "Limit to select color for glow effect");
547  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
548 
549  /* Use blur fields to make compatible with blur filter */
550  prop = RNA_def_property(srna, "size", PROP_FLOAT, PROP_XYZ);
551  RNA_def_property_float_sdna(prop, NULL, "blur");
552  RNA_def_property_range(prop, 0.0f, FLT_MAX);
553  RNA_def_property_ui_text(prop, "Size", "Size of the effect");
554  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
555 
556  prop = RNA_def_property(srna, "samples", PROP_INT, PROP_NONE);
557  RNA_def_property_int_sdna(prop, NULL, "samples");
558  RNA_def_property_range(prop, 1, 32);
559  RNA_def_property_ui_range(prop, 1, 32, 2, -1);
561  RNA_def_property_ui_text(prop, "Samples", "Number of Blur Samples");
562  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
563 
564  prop = RNA_def_property(srna, "use_glow_under", PROP_BOOLEAN, PROP_NONE);
567  prop, "Glow Under", "Glow only areas with alpha (not supported with Regular blend mode)");
568  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
569 
570  prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_ANGLE);
571  RNA_def_property_float_sdna(prop, NULL, "rotation");
572  RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
573  RNA_def_property_ui_text(prop, "Rotation", "Rotation of the effect");
574  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
575 
576  /* blend mode */
577  prop = RNA_def_property(srna, "blend_mode", PROP_ENUM, PROP_NONE);
578  RNA_def_property_enum_sdna(prop, NULL, "blend_mode");
580  RNA_def_property_ui_text(prop, "Blend Mode", "Blend mode");
581  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
582 
584 }
585 
587 {
588  StructRNA *srna;
589  PropertyRNA *prop;
590 
591  srna = RNA_def_struct(brna, "ShaderFxSwirl", "ShaderFx");
592  RNA_def_struct_ui_text(srna, "Swirl Effect", "Swirl effect");
593  RNA_def_struct_sdna(srna, "SwirlShaderFxData");
594  RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
595 
597 
598  prop = RNA_def_property(srna, "radius", PROP_INT, PROP_PIXEL);
599  RNA_def_property_int_sdna(prop, NULL, "radius");
600  RNA_def_property_range(prop, 0, SHRT_MAX);
601  RNA_def_property_ui_text(prop, "Radius", "Radius to apply");
602  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
603 
604  prop = RNA_def_property(srna, "angle", PROP_FLOAT, PROP_ANGLE);
605  RNA_def_property_float_sdna(prop, NULL, "angle");
606  RNA_def_property_range(prop, DEG2RAD(-5 * 360), DEG2RAD(5 * 360));
607  RNA_def_property_ui_range(prop, DEG2RAD(-5 * 360), DEG2RAD(5 * 360), 5, 2);
608  RNA_def_property_ui_text(prop, "Angle", "Angle of rotation");
609  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
610 
611  prop = RNA_def_property(srna, "use_transparent", PROP_BOOLEAN, PROP_NONE);
613  RNA_def_property_ui_text(prop, "Transparent", "Make image transparent outside of radius");
614  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
615 
616  prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
617  RNA_def_property_ui_text(prop, "Object", "Object to determine center location");
618  RNA_def_property_pointer_funcs(prop, NULL, "rna_SwirlShaderFx_object_set", NULL, NULL);
620  RNA_def_property_update(prop, 0, "rna_ShaderFx_dependency_update");
621 
623 }
624 
626 {
627  StructRNA *srna;
628  PropertyRNA *prop;
629 
630  srna = RNA_def_struct(brna, "ShaderFxFlip", "ShaderFx");
631  RNA_def_struct_ui_text(srna, "Flip Effect", "Flip effect");
632  RNA_def_struct_sdna(srna, "FlipShaderFxData");
633  RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
634 
636 
637  prop = RNA_def_property(srna, "use_flip_x", PROP_BOOLEAN, PROP_NONE);
639  RNA_def_property_ui_text(prop, "Horizontal", "Flip image horizontally");
640  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
641 
642  prop = RNA_def_property(srna, "use_flip_y", PROP_BOOLEAN, PROP_NONE);
644  RNA_def_property_ui_text(prop, "Vertical", "Flip image vertically");
645  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
646 
648 }
649 
651 {
652  StructRNA *srna;
653  PropertyRNA *prop;
654 
655  /* data */
656  srna = RNA_def_struct(brna, "ShaderFx", NULL);
657  RNA_def_struct_ui_text(srna, "ShaderFx", "Effect affecting the grease pencil object");
658  RNA_def_struct_refine_func(srna, "rna_ShaderFx_refine");
659  RNA_def_struct_path_func(srna, "rna_ShaderFx_path");
660  RNA_def_struct_sdna(srna, "ShaderFxData");
661 
662  /* strings */
663  prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
664  RNA_def_property_string_funcs(prop, NULL, NULL, "rna_ShaderFx_name_set");
665  RNA_def_property_ui_text(prop, "Name", "Effect name");
667  RNA_def_struct_name_property(srna, prop);
668 
669  /* enums */
670  prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
672  RNA_def_property_enum_sdna(prop, NULL, "type");
674  RNA_def_property_ui_text(prop, "Type", "");
675  RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_ID); /* Abused, for "Light"... */
676 
677  /* flags */
678  prop = RNA_def_property(srna, "show_viewport", PROP_BOOLEAN, PROP_NONE);
680  RNA_def_property_ui_text(prop, "Realtime", "Display effect in viewport");
683  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
684  RNA_def_property_ui_icon(prop, ICON_RESTRICT_VIEW_ON, 1);
685 
686  prop = RNA_def_property(srna, "show_render", PROP_BOOLEAN, PROP_NONE);
689  RNA_def_property_ui_text(prop, "Render", "Use effect during render");
690  RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_ON, 1);
692 
693  prop = RNA_def_property(srna, "show_in_editmode", PROP_BOOLEAN, PROP_NONE);
695  RNA_def_property_ui_text(prop, "Edit Mode", "Display effect in Edit mode");
696  RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
697  RNA_def_property_ui_icon(prop, ICON_EDITMODE_HLT, 0);
698 
699  prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
701  RNA_def_property_boolean_sdna(prop, NULL, "ui_expand_flag", 0);
703  RNA_def_property_ui_text(prop, "Expanded", "Set effect expansion in the user interface");
704  RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1);
705 
706  /* types */
711  rna_def_shader_fx_rim(brna);
716 }
717 
718 #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:1287
void id_lib_extern(struct ID *id)
Definition: lib_id.c:237
bool BKE_shaderfx_unique_name(struct ListBase *shaderfx, struct ShaderFxData *fx)
Definition: shader_fx.c:122
#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
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
Definition: string.c:64
size_t size_t char size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL()
Definition: string.c:250
char * BLI_strncpy_utf8(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL(1
#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:791
@ 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.
@ PROP_FLOAT
Definition: RNA_types.h:61
@ PROP_BOOLEAN
Definition: RNA_types.h:59
@ PROP_ENUM
Definition: RNA_types.h:63
@ PROP_INT
Definition: RNA_types.h:60
@ PROP_STRING
Definition: RNA_types.h:62
@ PROP_POINTER
Definition: RNA_types.h:64
@ PROPOVERRIDE_OVERRIDABLE_LIBRARY
Definition: RNA_types.h:312
@ PROP_EDITABLE
Definition: RNA_types.h:189
@ PROP_LIB_EXCEPTION
Definition: RNA_types.h:195
@ PROP_NO_DEG_UPDATE
Definition: RNA_types.h:301
@ PROP_ID_SELF_CHECK
Definition: RNA_types.h:232
@ PROP_XYZ
Definition: RNA_types.h:162
@ PROP_COLOR
Definition: RNA_types.h:153
@ PROP_PIXEL
Definition: RNA_types.h:141
@ PROP_ANGLE
Definition: RNA_types.h:145
@ PROP_NONE
Definition: RNA_types.h:126
@ PROP_FACTOR
Definition: RNA_types.h:144
#define NA_RENAME
Definition: WM_types.h:527
#define ND_SHADERFX
Definition: WM_types.h:420
#define NC_OBJECT
Definition: WM_types.h:329
Scene scene
void RNA_def_struct_refine_func(StructRNA *srna, const char *refine)
Definition: rna_define.c:1148
void RNA_define_lib_overridable(const bool make_overridable)
Definition: rna_define.c:742
void RNA_def_struct_path_func(StructRNA *srna, const char *path)
Definition: rna_define.c:1193
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t bit)
Definition: rna_define.c:2236
void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set)
Definition: rna_define.c:3285
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
Definition: rna_define.c:1645
void RNA_def_property_ui_icon(PropertyRNA *prop, int icon, int consecutive)
Definition: rna_define.c:1653
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
Definition: rna_define.c:1237
void RNA_def_property_int_default(PropertyRNA *prop, int value)
Definition: rna_define.c:1978
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
Definition: rna_define.c:1872
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
Definition: rna_define.c:1048
void RNA_def_property_array(PropertyRNA *prop, int length)
Definition: rna_define.c:1539
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
Definition: rna_define.c:1737
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
Definition: rna_define.c:2900
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
Definition: rna_define.c:1257
void RNA_def_struct_name_property(struct StructRNA *srna, struct PropertyRNA *prop)
Definition: rna_define.c:1103
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
Definition: rna_define.c:1495
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:3385
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
Definition: rna_define.c:1028
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2601
void RNA_def_struct_ui_icon(StructRNA *srna, int icon)
Definition: rna_define.c:1245
void RNA_def_property_translation_context(PropertyRNA *prop, const char *context)
Definition: rna_define.c:2848
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
Definition: rna_define.c:1490
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2493
void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision)
Definition: rna_define.c:1664
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2343
void RNA_def_property_boolean_negative_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
Definition: rna_define.c:2327
void RNA_def_property_override_flag(PropertyRNA *prop, PropertyOverrideFlag flag)
Definition: rna_define.c:1503
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:68
const EnumPropertyItem rna_enum_object_shaderfx_type_items[]
Definition: rna_shader_fx.c:33
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:76
static const EnumPropertyItem rna_enum_shaderfx_rim_modes_items[]
Definition: rna_shader_fx.c:54
static const EnumPropertyItem rna_enum_shaderfx_glow_modes_items[]
Definition: rna_shader_fx.c:63
Definition: DNA_ID.h:368
Definition: BKE_main.h:121
ListBase shader_fx
void * data
Definition: RNA_types.h:38
struct ID * owner_id
Definition: RNA_types.h:36
void WM_main_add_notifier(unsigned int type, void *reference)
PointerRNA * ptr
Definition: wm_files.c:3480