Blender V4.3
rna_shader_fx.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include <cfloat>
10#include <climits>
11#include <cstdlib>
12
14#include "DNA_object_types.h"
15#include "DNA_scene_types.h"
16#include "DNA_shader_fx_types.h"
17
18#include "MEM_guardedalloc.h"
19
20#include "BLI_math_rotation.h"
21
22#include "BLT_translation.hh"
23
24#include "BKE_animsys.h"
25
26#include "RNA_access.hh"
27#include "RNA_define.hh"
28#include "RNA_enum_types.hh"
29
30#include "rna_internal.hh"
31
32#include "WM_api.hh"
33#include "WM_types.hh"
34
36 {eShaderFxType_Blur, "FX_BLUR", ICON_SHADERFX, "Blur", "Apply Gaussian Blur to object"},
38 "FX_COLORIZE",
39 ICON_SHADERFX,
40 "Colorize",
41 "Apply different tint effects"},
42 {eShaderFxType_Flip, "FX_FLIP", ICON_SHADERFX, "Flip", "Flip image"},
43 {eShaderFxType_Glow, "FX_GLOW", ICON_SHADERFX, "Glow", "Create a glow effect"},
44 {eShaderFxType_Pixel, "FX_PIXEL", ICON_SHADERFX, "Pixelate", "Pixelate image"},
45 {eShaderFxType_Rim, "FX_RIM", ICON_SHADERFX, "Rim", "Add a rim to the image"},
46 {eShaderFxType_Shadow, "FX_SHADOW", ICON_SHADERFX, "Shadow", "Create a shadow effect"},
47 {eShaderFxType_Swirl, "FX_SWIRL", ICON_SHADERFX, "Swirl", "Create a rotation distortion"},
49 "FX_WAVE",
50 ICON_SHADERFX,
51 "Wave Distortion",
52 "Apply sinusoidal deformation"},
53 {0, nullptr, 0, nullptr, nullptr},
54};
55
57 {eShaderFxRimMode_Normal, "NORMAL", 0, "Regular", ""},
58 {eShaderFxRimMode_Overlay, "OVERLAY", 0, "Overlay", ""},
59 {eShaderFxRimMode_Add, "ADD", 0, "Add", ""},
60 {eShaderFxRimMode_Subtract, "SUBTRACT", 0, "Subtract", ""},
61 {eShaderFxRimMode_Multiply, "MULTIPLY", 0, "Multiply", ""},
62 {eShaderFxRimMode_Divide, "DIVIDE", 0, "Divide", ""},
63 {0, nullptr, 0, nullptr, nullptr}};
64
66 {eShaderFxGlowMode_Luminance, "LUMINANCE", 0, "Luminance", ""},
67 {eShaderFxGlowMode_Color, "COLOR", 0, "Color", ""},
68 {0, nullptr, 0, nullptr, nullptr}};
69
71 {eShaderFxColorizeMode_GrayScale, "GRAYSCALE", 0, "Gray Scale", ""},
72 {eShaderFxColorizeMode_Sepia, "SEPIA", 0, "Sepia", ""},
73 {eShaderFxColorizeMode_Duotone, "DUOTONE", 0, "Duotone", ""},
74 {eShaderFxColorizeMode_Transparent, "TRANSPARENT", 0, "Transparent", ""},
75 {eShaderFxColorizeMode_Custom, "CUSTOM", 0, "Custom", ""},
76 {0, nullptr, 0, nullptr, nullptr}};
77
79 {eGplBlendMode_Regular, "REGULAR", 0, "Regular", ""},
80 {eGplBlendMode_Add, "ADD", 0, "Add", ""},
81 {eGplBlendMode_Subtract, "SUBTRACT", 0, "Subtract", ""},
82 {eGplBlendMode_Multiply, "MULTIPLY", 0, "Multiply", ""},
83 {eGplBlendMode_Divide, "DIVIDE", 0, "Divide", ""},
84 {0, nullptr, 0, nullptr, nullptr}};
85
86#ifdef RNA_RUNTIME
87
88# include <fmt/format.h>
89
90# include "BKE_shader_fx.h"
91
92# include "DEG_depsgraph.hh"
93# include "DEG_depsgraph_build.hh"
94
95static StructRNA *rna_ShaderFx_refine(PointerRNA *ptr)
96{
98
99 switch ((ShaderFxType)md->type) {
101 return &RNA_ShaderFxBlur;
103 return &RNA_ShaderFxColorize;
105 return &RNA_ShaderFxWave;
107 return &RNA_ShaderFxPixel;
109 return &RNA_ShaderFxRim;
111 return &RNA_ShaderFxShadow;
113 return &RNA_ShaderFxSwirl;
115 return &RNA_ShaderFxFlip;
117 return &RNA_ShaderFxGlow;
118 /* Default */
121 default:
122 return &RNA_ShaderFx;
123 }
124
125 return &RNA_ShaderFx;
126}
127
128static void rna_ShaderFx_name_set(PointerRNA *ptr, const char *value)
129{
130 ShaderFxData *gmd = static_cast<ShaderFxData *>(ptr->data);
131 char oldname[sizeof(gmd->name)];
132
133 /* make a copy of the old name first */
134 STRNCPY(oldname, gmd->name);
135
136 /* copy the new name into the name slot */
137 STRNCPY_UTF8(gmd->name, value);
138
139 /* make sure the name is truly unique */
140 if (ptr->owner_id) {
141 Object *ob = (Object *)ptr->owner_id;
142 BKE_shaderfx_unique_name(&ob->shader_fx, gmd);
143 }
144
145 /* fix all the animation data which may link to this */
146 BKE_animdata_fix_paths_rename_all(nullptr, "shader_effects", oldname, gmd->name);
147}
148
149static std::optional<std::string> rna_ShaderFx_path(const PointerRNA *ptr)
150{
151 const ShaderFxData *gmd = static_cast<ShaderFxData *>(ptr->data);
152 char name_esc[sizeof(gmd->name) * 2];
153
154 BLI_str_escape(name_esc, gmd->name, sizeof(name_esc));
155 return fmt::format("shader_effects[\"{}\"]", name_esc);
156}
157
158static void rna_ShaderFx_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
159{
162}
163
164static void rna_ShaderFx_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
165{
166 rna_ShaderFx_update(bmain, scene, ptr);
168}
169
170/* Objects */
171
172static void shaderfx_object_set(Object *self, Object **ob_p, int type, PointerRNA value)
173{
174 Object *ob = static_cast<Object *>(value.data);
175
176 if (!self || ob != self) {
177 if (!ob || type == OB_EMPTY || ob->type == type) {
178 id_lib_extern((ID *)ob);
179 *ob_p = ob;
180 }
181 }
182}
183
184# define RNA_FX_OBJECT_SET(_type, _prop, _obtype) \
185 static void rna_##_type##ShaderFx_##_prop##_set( \
186 PointerRNA *ptr, PointerRNA value, ReportList * /*reports*/) \
187 { \
188 _type##ShaderFxData *tmd = (_type##ShaderFxData *)ptr->data; \
189 shaderfx_object_set((Object *)ptr->owner_id, &tmd->_prop, _obtype, value); \
190 }
191
192RNA_FX_OBJECT_SET(Shadow, object, OB_EMPTY);
193RNA_FX_OBJECT_SET(Swirl, object, OB_EMPTY);
194
195# undef RNA_FX_OBJECT_SET
196
197#else
198
200{
201 StructRNA *srna;
202 PropertyRNA *prop;
203
204 srna = RNA_def_struct(brna, "ShaderFxBlur", "ShaderFx");
205 RNA_def_struct_ui_text(srna, "Gaussian Blur Effect", "Gaussian Blur effect");
206 RNA_def_struct_sdna(srna, "BlurShaderFxData");
207 RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
208
210
211 prop = RNA_def_property(srna, "size", PROP_FLOAT, PROP_XYZ);
212 RNA_def_property_float_sdna(prop, nullptr, "radius");
213 RNA_def_property_range(prop, 0.0f, FLT_MAX);
214 RNA_def_property_ui_text(prop, "Size", "Factor of Blur");
215 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
216
217 prop = RNA_def_property(srna, "samples", PROP_INT, PROP_NONE);
218 RNA_def_property_int_sdna(prop, nullptr, "samples");
219 RNA_def_property_range(prop, 0, 32);
220 RNA_def_property_ui_range(prop, 0, 32, 2, -1);
222 RNA_def_property_ui_text(prop, "Samples", "Number of Blur Samples (zero, disable blur)");
223 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
224
225 prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_ANGLE);
226 RNA_def_property_float_sdna(prop, nullptr, "rotation");
228 RNA_def_property_ui_text(prop, "Rotation", "Rotation of the effect");
229 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
230
231 prop = RNA_def_property(srna, "use_dof_mode", PROP_BOOLEAN, PROP_NONE);
232 RNA_def_property_boolean_sdna(prop, nullptr, "flag", FX_BLUR_DOF_MODE);
233 RNA_def_property_ui_text(prop, "Use as Depth Of Field", "Blur using camera depth of field");
234 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
235
237}
238
240{
241 StructRNA *srna;
242 PropertyRNA *prop;
243
244 srna = RNA_def_struct(brna, "ShaderFxColorize", "ShaderFx");
245 RNA_def_struct_ui_text(srna, "Colorize Effect", "Colorize effect");
246 RNA_def_struct_sdna(srna, "ColorizeShaderFxData");
247 RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
248
250
251 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
252 RNA_def_property_float_sdna(prop, nullptr, "factor");
253 RNA_def_property_range(prop, 0, 1.0);
254 RNA_def_property_ui_text(prop, "Factor", "Mix factor");
255 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
256
257 prop = RNA_def_property(srna, "low_color", PROP_FLOAT, PROP_COLOR);
258 RNA_def_property_range(prop, 0.0, 1.0);
259 RNA_def_property_float_sdna(prop, nullptr, "low_color");
260 RNA_def_property_array(prop, 4);
261 RNA_def_property_ui_text(prop, "Low Color", "First color used for effect");
262 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
263
264 prop = RNA_def_property(srna, "high_color", PROP_FLOAT, PROP_COLOR);
265 RNA_def_property_range(prop, 0.0, 1.0);
266 RNA_def_property_float_sdna(prop, nullptr, "high_color");
267 RNA_def_property_array(prop, 4);
268 RNA_def_property_ui_text(prop, "High Color", "Second color used for effect");
269 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
270
271 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
272 RNA_def_property_enum_sdna(prop, nullptr, "mode");
274 RNA_def_property_ui_text(prop, "Mode", "Effect mode");
275 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
276
278}
279
281{
282 StructRNA *srna;
283 PropertyRNA *prop;
284
285 static const EnumPropertyItem prop_shaderfx_wave_type_items[] = {
286 {0, "HORIZONTAL", 0, "Horizontal", ""},
287 {1, "VERTICAL", 0, "Vertical", ""},
288 {0, nullptr, 0, nullptr, nullptr}};
289
290 srna = RNA_def_struct(brna, "ShaderFxWave", "ShaderFx");
291 RNA_def_struct_ui_text(srna, "Wave Deformation Effect", "Wave Deformation effect");
292 RNA_def_struct_sdna(srna, "WaveShaderFxData");
293 RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
294
296
297 prop = RNA_def_property(srna, "orientation", PROP_ENUM, PROP_NONE);
298 RNA_def_property_enum_sdna(prop, nullptr, "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, nullptr, "amplitude");
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, nullptr, "period");
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, nullptr, "phase");
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
322}
323
325{
326 StructRNA *srna;
327 PropertyRNA *prop;
328
329 srna = RNA_def_struct(brna, "ShaderFxPixel", "ShaderFx");
330 RNA_def_struct_ui_text(srna, "Pixelate Effect", "Pixelate effect");
331 RNA_def_struct_sdna(srna, "PixelShaderFxData");
332 RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
333
335
336 prop = RNA_def_property(srna, "size", PROP_INT, PROP_PIXEL);
337 RNA_def_property_int_sdna(prop, nullptr, "size");
338 RNA_def_property_range(prop, 1, SHRT_MAX);
339 RNA_def_property_array(prop, 2);
340 RNA_def_property_ui_text(prop, "Size", "Pixel size");
341 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
342
343 prop = RNA_def_property(srna, "use_antialiasing", PROP_BOOLEAN, PROP_NONE);
345 RNA_def_property_ui_text(prop, "Antialiasing", "Antialias pixels");
346 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
347
349}
350
352{
353 StructRNA *srna;
354 PropertyRNA *prop;
355
356 srna = RNA_def_struct(brna, "ShaderFxRim", "ShaderFx");
357 RNA_def_struct_ui_text(srna, "Rim Effect", "Rim effect");
358 RNA_def_struct_sdna(srna, "RimShaderFxData");
359 RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
360
362
363 prop = RNA_def_property(srna, "offset", PROP_INT, PROP_PIXEL);
364 RNA_def_property_int_sdna(prop, nullptr, "offset");
365 RNA_def_property_range(prop, SHRT_MIN, SHRT_MAX);
366 RNA_def_property_ui_text(prop, "Offset", "Offset of the rim");
367 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
368
369 prop = RNA_def_property(srna, "rim_color", PROP_FLOAT, PROP_COLOR);
370 RNA_def_property_range(prop, 0.0, 1.0);
371 RNA_def_property_float_sdna(prop, nullptr, "rim_rgb");
372 RNA_def_property_array(prop, 3);
373 RNA_def_property_ui_text(prop, "Rim Color", "Color used for Rim");
374 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
375
376 prop = RNA_def_property(srna, "mask_color", PROP_FLOAT, PROP_COLOR);
377 RNA_def_property_range(prop, 0.0, 1.0);
378 RNA_def_property_float_sdna(prop, nullptr, "mask_rgb");
379 RNA_def_property_array(prop, 3);
380 RNA_def_property_ui_text(prop, "Mask Color", "Color that must be kept");
381 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
382
383 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
384 RNA_def_property_enum_sdna(prop, nullptr, "mode");
386 RNA_def_property_ui_text(prop, "Mode", "Blend mode");
387 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
388
389 prop = RNA_def_property(srna, "blur", PROP_INT, PROP_PIXEL);
390 RNA_def_property_int_sdna(prop, nullptr, "blur");
391 RNA_def_property_range(prop, 0, SHRT_MAX);
393 prop, "Blur", "Number of pixels for blurring rim (set to 0 to disable)");
394 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
395
396 prop = RNA_def_property(srna, "samples", PROP_INT, PROP_NONE);
397 RNA_def_property_int_sdna(prop, nullptr, "samples");
398 RNA_def_property_range(prop, 0, 32);
399 RNA_def_property_ui_range(prop, 0, 32, 2, -1);
401 RNA_def_property_ui_text(prop, "Samples", "Number of Blur Samples (zero, disable blur)");
402 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
403
405}
406
408{
409 static const EnumPropertyItem prop_shaderfx_shadow_type_items[] = {
410 {0, "HORIZONTAL", 0, "Horizontal", ""},
411 {1, "VERTICAL", 0, "Vertical", ""},
412 {0, nullptr, 0, nullptr, nullptr}};
413
414 StructRNA *srna;
415 PropertyRNA *prop;
416
417 srna = RNA_def_struct(brna, "ShaderFxShadow", "ShaderFx");
418 RNA_def_struct_ui_text(srna, "Shadow Effect", "Shadow effect");
419 RNA_def_struct_sdna(srna, "ShadowShaderFxData");
420 RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
421
423
424 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
425 RNA_def_property_ui_text(prop, "Object", "Object to determine center of rotation");
426 RNA_def_property_pointer_funcs(prop, nullptr, "rna_ShadowShaderFx_object_set", nullptr, nullptr);
428 RNA_def_property_update(prop, 0, "rna_ShaderFx_dependency_update");
429
430 prop = RNA_def_property(srna, "offset", PROP_INT, PROP_PIXEL);
431 RNA_def_property_int_sdna(prop, nullptr, "offset");
432 RNA_def_property_range(prop, SHRT_MIN, SHRT_MAX);
433 RNA_def_property_ui_text(prop, "Offset", "Offset of the shadow");
434 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
435
436 prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_XYZ);
437 RNA_def_property_float_sdna(prop, nullptr, "scale");
439 RNA_def_property_ui_text(prop, "Scale", "Scale of the shadow");
440 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
441
442 prop = RNA_def_property(srna, "shadow_color", PROP_FLOAT, PROP_COLOR);
443 RNA_def_property_range(prop, 0.0, 1.0);
444 RNA_def_property_float_sdna(prop, nullptr, "shadow_rgba");
445 RNA_def_property_array(prop, 4);
446 RNA_def_property_ui_text(prop, "Shadow Color", "Color used for Shadow");
447 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
448
449 prop = RNA_def_property(srna, "orientation", PROP_ENUM, PROP_NONE);
450 RNA_def_property_enum_sdna(prop, nullptr, "orientation");
451 RNA_def_property_enum_items(prop, prop_shaderfx_shadow_type_items);
452 RNA_def_property_ui_text(prop, "Orientation", "Direction of the wave");
453 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
454
455 prop = RNA_def_property(srna, "amplitude", PROP_FLOAT, PROP_NONE);
456 RNA_def_property_float_sdna(prop, nullptr, "amplitude");
458 RNA_def_property_ui_text(prop, "Amplitude", "Amplitude of Wave");
459 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
460
461 prop = RNA_def_property(srna, "period", PROP_FLOAT, PROP_NONE);
462 RNA_def_property_float_sdna(prop, nullptr, "period");
464 RNA_def_property_ui_text(prop, "Period", "Period of Wave");
465 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
466
467 prop = RNA_def_property(srna, "phase", PROP_FLOAT, PROP_NONE);
468 RNA_def_property_float_sdna(prop, nullptr, "phase");
470 RNA_def_property_ui_text(prop, "Phase", "Phase Shift of Wave");
471 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
472
473 prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_ANGLE);
474 RNA_def_property_float_sdna(prop, nullptr, "rotation");
475 RNA_def_property_range(prop, DEG2RAD(-360), DEG2RAD(360));
476 RNA_def_property_ui_range(prop, DEG2RAD(-360), DEG2RAD(360), 5, 2);
477 RNA_def_property_ui_text(prop, "Rotation", "Rotation around center or object");
478 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
479
480 prop = RNA_def_property(srna, "blur", PROP_INT, PROP_PIXEL);
481 RNA_def_property_int_sdna(prop, nullptr, "blur");
482 RNA_def_property_range(prop, 0, SHRT_MAX);
484 prop, "Blur", "Number of pixels for blurring shadow (set to 0 to disable)");
485 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
486
487 prop = RNA_def_property(srna, "samples", PROP_INT, PROP_NONE);
488 RNA_def_property_int_sdna(prop, nullptr, "samples");
489 RNA_def_property_range(prop, 0, 32);
490 RNA_def_property_ui_range(prop, 0, 32, 2, -1);
492 RNA_def_property_ui_text(prop, "Samples", "Number of Blur Samples (zero, disable blur)");
493 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
494
495 prop = RNA_def_property(srna, "use_object", PROP_BOOLEAN, PROP_NONE);
497 RNA_def_property_ui_text(prop, "Use Object", "Use object as center of rotation");
498 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
499
500 prop = RNA_def_property(srna, "use_wave", PROP_BOOLEAN, PROP_NONE);
502 RNA_def_property_ui_text(prop, "Wave", "Use wave effect");
504 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
505
507}
508
510{
511 StructRNA *srna;
512 PropertyRNA *prop;
513
514 srna = RNA_def_struct(brna, "ShaderFxGlow", "ShaderFx");
515 RNA_def_struct_ui_text(srna, "Glow Effect", "Glow effect");
516 RNA_def_struct_sdna(srna, "GlowShaderFxData");
517 RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
518
520
521 prop = RNA_def_property(srna, "glow_color", PROP_FLOAT, PROP_COLOR);
522 RNA_def_property_range(prop, 0.0, 1.0);
523 RNA_def_property_float_sdna(prop, nullptr, "glow_color");
524 RNA_def_property_array(prop, 3);
525 RNA_def_property_ui_text(prop, "Glow Color", "Color used for generated glow");
526 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
527
528 prop = RNA_def_property(srna, "opacity", PROP_FLOAT, PROP_FACTOR);
529 RNA_def_property_float_sdna(prop, nullptr, "glow_color[3]");
530 RNA_def_property_range(prop, 0.0, 1.0f);
531 RNA_def_property_ui_text(prop, "Opacity", "Effect Opacity");
532 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
533
534 prop = RNA_def_property(srna, "select_color", PROP_FLOAT, PROP_COLOR);
535 RNA_def_property_range(prop, 0.0, 1.0);
536 RNA_def_property_float_sdna(prop, nullptr, "select_color");
537 RNA_def_property_array(prop, 3);
538 RNA_def_property_ui_text(prop, "Select Color", "Color selected to apply glow");
539 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
540
541 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
542 RNA_def_property_enum_sdna(prop, nullptr, "mode");
544 RNA_def_property_ui_text(prop, "Mode", "Glow mode");
545 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
546
547 prop = RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_FACTOR);
548 RNA_def_property_float_sdna(prop, nullptr, "threshold");
549 RNA_def_property_range(prop, 0.0f, 1.0f);
550 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1f, 3);
551 RNA_def_property_ui_text(prop, "Threshold", "Limit to select color for glow effect");
552 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
553
554 /* Use blur fields to make compatible with blur filter */
555 prop = RNA_def_property(srna, "size", PROP_FLOAT, PROP_XYZ);
556 RNA_def_property_float_sdna(prop, nullptr, "blur");
557 RNA_def_property_range(prop, 0.0f, FLT_MAX);
558 RNA_def_property_ui_text(prop, "Size", "Size of the effect");
559 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
560
561 prop = RNA_def_property(srna, "samples", PROP_INT, PROP_NONE);
562 RNA_def_property_int_sdna(prop, nullptr, "samples");
563 RNA_def_property_range(prop, 1, 32);
564 RNA_def_property_ui_range(prop, 1, 32, 2, -1);
566 RNA_def_property_ui_text(prop, "Samples", "Number of Blur Samples");
567 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
568
569 prop = RNA_def_property(srna, "use_glow_under", PROP_BOOLEAN, PROP_NONE);
570 RNA_def_property_boolean_sdna(prop, nullptr, "flag", FX_GLOW_USE_ALPHA);
572 prop, "Glow Under", "Glow only areas with alpha (not supported with Regular blend mode)");
573 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
574
575 prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_ANGLE);
576 RNA_def_property_float_sdna(prop, nullptr, "rotation");
578 RNA_def_property_ui_text(prop, "Rotation", "Rotation of the effect");
579 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
580
581 /* blend mode */
582 prop = RNA_def_property(srna, "blend_mode", PROP_ENUM, PROP_NONE);
583 RNA_def_property_enum_sdna(prop, nullptr, "blend_mode");
585 RNA_def_property_ui_text(prop, "Blend Mode", "Blend mode");
586 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
587
589}
590
592{
593 StructRNA *srna;
594 PropertyRNA *prop;
595
596 srna = RNA_def_struct(brna, "ShaderFxSwirl", "ShaderFx");
597 RNA_def_struct_ui_text(srna, "Swirl Effect", "Swirl effect");
598 RNA_def_struct_sdna(srna, "SwirlShaderFxData");
599 RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
600
602
603 prop = RNA_def_property(srna, "radius", PROP_INT, PROP_PIXEL);
604 RNA_def_property_int_sdna(prop, nullptr, "radius");
605 RNA_def_property_range(prop, 0, SHRT_MAX);
606 RNA_def_property_ui_text(prop, "Radius", "Radius to apply");
607 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
608
609 prop = RNA_def_property(srna, "angle", PROP_FLOAT, PROP_ANGLE);
610 RNA_def_property_float_sdna(prop, nullptr, "angle");
611 RNA_def_property_range(prop, DEG2RAD(-5 * 360), DEG2RAD(5 * 360));
612 RNA_def_property_ui_range(prop, DEG2RAD(-5 * 360), DEG2RAD(5 * 360), 5, 2);
613 RNA_def_property_ui_text(prop, "Angle", "Angle of rotation");
614 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
615
616 prop = RNA_def_property(srna, "use_transparent", PROP_BOOLEAN, PROP_NONE);
618 RNA_def_property_ui_text(prop, "Transparent", "Make image transparent outside of radius");
619 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
620
621 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
622 RNA_def_property_ui_text(prop, "Object", "Object to determine center location");
623 RNA_def_property_pointer_funcs(prop, nullptr, "rna_SwirlShaderFx_object_set", nullptr, nullptr);
625 RNA_def_property_update(prop, 0, "rna_ShaderFx_dependency_update");
626
628}
629
631{
632 StructRNA *srna;
633 PropertyRNA *prop;
634
635 srna = RNA_def_struct(brna, "ShaderFxFlip", "ShaderFx");
636 RNA_def_struct_ui_text(srna, "Flip Effect", "Flip effect");
637 RNA_def_struct_sdna(srna, "FlipShaderFxData");
638 RNA_def_struct_ui_icon(srna, ICON_SHADERFX);
639
641
642 prop = RNA_def_property(srna, "use_flip_x", PROP_BOOLEAN, PROP_NONE);
644 RNA_def_property_ui_text(prop, "Horizontal", "Flip image horizontally");
645 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
646
647 prop = RNA_def_property(srna, "use_flip_y", PROP_BOOLEAN, PROP_NONE);
648 RNA_def_property_boolean_sdna(prop, nullptr, "flag", FX_FLIP_VERTICAL);
649 RNA_def_property_ui_text(prop, "Vertical", "Flip image vertically");
650 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
651
653}
654
656{
657 StructRNA *srna;
658 PropertyRNA *prop;
659
660 /* data */
661 srna = RNA_def_struct(brna, "ShaderFx", nullptr);
662 RNA_def_struct_ui_text(srna, "ShaderFx", "Effect affecting the grease pencil object");
663 RNA_def_struct_refine_func(srna, "rna_ShaderFx_refine");
664 RNA_def_struct_path_func(srna, "rna_ShaderFx_path");
665 RNA_def_struct_sdna(srna, "ShaderFxData");
666
667 /* strings */
668 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
669 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_ShaderFx_name_set");
670 RNA_def_property_ui_text(prop, "Name", "Effect name");
673
674 /* enums */
675 prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
677 RNA_def_property_enum_sdna(prop, nullptr, "type");
679 RNA_def_property_ui_text(prop, "Type", "");
680 RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_ID); /* Abused, for "Light"... */
681
682 /* flags */
683 prop = RNA_def_property(srna, "show_viewport", PROP_BOOLEAN, PROP_NONE);
685 RNA_def_property_ui_text(prop, "Realtime", "Display effect in viewport");
688 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
689 RNA_def_property_ui_icon(prop, ICON_RESTRICT_VIEW_ON, 1);
690
691 prop = RNA_def_property(srna, "show_render", PROP_BOOLEAN, PROP_NONE);
694 RNA_def_property_ui_text(prop, "Render", "Use effect during render");
695 RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_ON, 1);
697
698 prop = RNA_def_property(srna, "show_in_editmode", PROP_BOOLEAN, PROP_NONE);
700 RNA_def_property_ui_text(prop, "Edit Mode", "Display effect in Edit mode");
701 RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
702 RNA_def_property_ui_icon(prop, ICON_EDITMODE_HLT, 0);
703
704 prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
706 RNA_def_property_boolean_sdna(prop, nullptr, "ui_expand_flag", 0);
708 RNA_def_property_ui_text(prop, "Expanded", "Set effect expansion in the user interface");
709 RNA_def_property_ui_icon(prop, ICON_RIGHTARROW, 1);
710
711 /* types */
721}
722
723#endif
void BKE_animdata_fix_paths_rename_all(struct ID *ref_id, const char *prefix, const char *oldName, const char *newName)
void id_lib_extern(ID *id)
Definition lib_id.cc:283
void BKE_shaderfx_unique_name(struct ListBase *shaders, struct ShaderFxData *fx)
Definition shader_fx.cc:115
#define DEG2RAD(_deg)
#define STRNCPY(dst, src)
Definition BLI_string.h:593
size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
#define STRNCPY_UTF8(dst, src)
#define BLT_I18NCONTEXT_ID_ID
#define BLT_I18NCONTEXT_ID_GPENCIL
void DEG_id_tag_update(ID *id, unsigned int flags)
void DEG_relations_tag_update(Main *bmain)
@ ID_RECALC_GEOMETRY
Definition DNA_ID.h:1041
@ eGplBlendMode_Regular
@ eGplBlendMode_Multiply
@ 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
@ eShaderFxType_Pixel
@ eShaderFxType_Rim
@ eShaderFxType_None
@ eShaderFxType_Swirl
@ eShaderFxType_Glow
@ eShaderFxType_Flip
@ NUM_SHADER_FX_TYPES
@ eShaderFxType_Blur
@ eShaderFxType_Shadow
@ eShaderFxType_Colorize
@ eShaderFxType_Wave
Read Guarded memory(de)allocation.
@ PROP_FLOAT
Definition RNA_types.hh:67
@ PROP_BOOLEAN
Definition RNA_types.hh:65
@ PROP_ENUM
Definition RNA_types.hh:69
@ PROP_INT
Definition RNA_types.hh:66
@ PROP_STRING
Definition RNA_types.hh:68
@ PROP_POINTER
Definition RNA_types.hh:70
@ PROPOVERRIDE_OVERRIDABLE_LIBRARY
Definition RNA_types.hh:355
@ PROP_EDITABLE
Definition RNA_types.hh:207
@ PROP_LIB_EXCEPTION
Definition RNA_types.hh:213
@ PROP_NO_DEG_UPDATE
Definition RNA_types.hh:328
@ PROP_ID_SELF_CHECK
Definition RNA_types.hh:259
@ PROP_XYZ
Definition RNA_types.hh:172
@ PROP_COLOR
Definition RNA_types.hh:163
@ PROP_PIXEL
Definition RNA_types.hh:151
@ PROP_ANGLE
Definition RNA_types.hh:155
@ PROP_NONE
Definition RNA_types.hh:136
@ PROP_FACTOR
Definition RNA_types.hh:154
#define NA_RENAME
Definition WM_types.hh:554
#define ND_SHADERFX
Definition WM_types.hh:438
#define NC_OBJECT
Definition WM_types.hh:346
PyObject * self
void RNA_def_struct_name_property(StructRNA *srna, PropertyRNA *prop)
void RNA_def_struct_refine_func(StructRNA *srna, const char *refine)
void RNA_define_lib_overridable(const bool make_overridable)
void RNA_def_struct_path_func(StructRNA *srna, const char *path)
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t bit)
void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set)
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
void RNA_def_property_ui_icon(PropertyRNA *prop, int icon, int consecutive)
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
void RNA_def_property_int_default(PropertyRNA *prop, int value)
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
void RNA_def_property_array(PropertyRNA *prop, int length)
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll)
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_struct_ui_icon(StructRNA *srna, int icon)
void RNA_def_property_translation_context(PropertyRNA *prop, const char *context)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision)
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_boolean_negative_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
void RNA_def_property_override_flag(PropertyRNA *prop, PropertyOverrideFlag flag)
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[]
const EnumPropertyItem rna_enum_object_shaderfx_type_items[]
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[]
static const EnumPropertyItem rna_enum_shaderfx_rim_modes_items[]
static const EnumPropertyItem rna_enum_shaderfx_glow_modes_items[]
#define FLT_MAX
Definition stdcycles.h:14
Definition DNA_ID.h:413
ID * owner_id
Definition RNA_types.hh:40
void * data
Definition RNA_types.hh:42
void WM_main_add_notifier(uint type, void *reference)
PointerRNA * ptr
Definition wm_files.cc:4126