Blender V4.3
versioning_260.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
8
9#include "BKE_idprop.hh"
10#include "BLI_utildefines.h"
11
12/* allow readfile to use deprecated functionality */
13#define DNA_DEPRECATED_ALLOW
14
15/* Define macros in `DNA_genfile.h`. */
16#define DNA_GENFILE_VERSIONING_MACROS
17
18#include "DNA_anim_types.h"
19#include "DNA_brush_types.h"
20#include "DNA_camera_types.h"
21#include "DNA_cloth_types.h"
24#include "DNA_fluid_types.h"
25#include "DNA_genfile.h"
26#include "DNA_light_types.h"
27#include "DNA_linestyle_types.h"
28#include "DNA_material_types.h"
29#include "DNA_mesh_types.h"
30#include "DNA_meshdata_types.h"
31#include "DNA_node_types.h"
33#include "DNA_object_types.h"
34#include "DNA_screen_types.h"
35#include "DNA_sequence_types.h"
36#include "DNA_space_types.h"
37#include "DNA_text_types.h"
38#include "DNA_view3d_types.h"
39#include "DNA_world_types.h"
40
41#undef DNA_GENFILE_VERSIONING_MACROS
42
43#include "MEM_guardedalloc.h"
44
45#include "BLI_blenlib.h"
46#include "BLI_math_matrix.h"
47#include "BLI_math_rotation.h"
48#include "BLI_math_vector.h"
49#include "BLI_string_utils.hh"
50
52#include "BKE_customdata.hh"
53#include "BKE_image.hh"
54#include "BKE_main.hh" /* for Main */
56#include "BKE_modifier.hh"
57#include "BKE_node_runtime.hh"
59#include "BKE_particle.h"
60#include "BKE_scene.hh"
61#include "BKE_screen.hh"
62#include "BKE_text.h" /* for txt_extended_ascii_as_utf8 */
63#include "BKE_texture.h"
64#include "BKE_tracking.h"
65
66#include "SEQ_iterator.hh"
67#include "SEQ_modifier.hh"
68#include "SEQ_utils.hh"
69
70#ifdef WITH_FFMPEG
71# include "BKE_writeffmpeg.hh"
72#endif
73
74#include "IMB_imbuf.hh" /* for proxy / time-code versioning stuff. */
75
76#include "NOD_common.h"
77#include "NOD_composite.hh"
78
79#include "BLO_readfile.hh"
80
81#include "readfile.hh"
82
84#define CLANG_FORMAT_NOP_WORKAROUND ((void)0)
85
86/* Make preferences read-only, use `versioning_userdef.cc`. */
87#define U (*((const UserDef *)&U))
88
90{
91 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
92 if (ELEM(node->type, CMP_NODE_IMAGE, CMP_NODE_R_LAYERS)) {
93 /* default Image output value should have 0 alpha */
94 bNodeSocket *sock = static_cast<bNodeSocket *>(node->outputs.first);
95 ((bNodeSocketValueRGBA *)sock->default_value)->value[3] = 0.0f;
96 }
97 }
98}
99
101{
102 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
103 if (node->type == CMP_NODE_ROTATE) {
104 /* Convert degrees to radians. */
105 bNodeSocket *sock = static_cast<bNodeSocket *>(node->inputs.first)->next;
106 ((bNodeSocketValueFloat *)sock->default_value)->value = DEG2RADF(
107 ((bNodeSocketValueFloat *)sock->default_value)->value);
108 }
109 else if (node->type == CMP_NODE_DBLUR) {
110 /* Convert degrees to radians. */
111 NodeDBlurData *ndbd = static_cast<NodeDBlurData *>(node->storage);
112 ndbd->angle = DEG2RADF(ndbd->angle);
113 ndbd->spin = DEG2RADF(ndbd->spin);
114 }
115 else if (node->type == CMP_NODE_DEFOCUS) {
116 /* Convert degrees to radians. */
117 NodeDefocus *nqd = static_cast<NodeDefocus *>(node->storage);
118 /* XXX DNA char to float conversion seems to map the char value
119 * into the [0.0f, 1.0f] range. */
120 nqd->rotation = DEG2RADF(nqd->rotation * 255.0f);
121 }
122 else if (node->type == CMP_NODE_CHROMA_MATTE) {
123 /* Convert degrees to radians. */
124 NodeChroma *ndc = static_cast<NodeChroma *>(node->storage);
125 ndc->t1 = DEG2RADF(ndc->t1);
126 ndc->t2 = DEG2RADF(ndc->t2);
127 }
128 else if (node->type == CMP_NODE_GLARE) {
129 /* Convert degrees to radians. */
130 NodeGlare *ndg = static_cast<NodeGlare *>(node->storage);
131 /* XXX DNA char to float conversion seems to map the char value
132 * into the [0.0f, 1.0f] range. */
133 ndg->angle_ofs = DEG2RADF(ndg->angle_ofs * 255.0f);
134 }
135 /* XXX TexMapping struct is used by other nodes too (at least node_composite_mapValue),
136 * but not the rot part...
137 */
138 else if (node->type == SH_NODE_MAPPING) {
139 /* Convert degrees to radians. */
140 TexMapping *tmap = static_cast<TexMapping *>(node->storage);
141 tmap->rot[0] = DEG2RADF(tmap->rot[0]);
142 tmap->rot[1] = DEG2RADF(tmap->rot[1]);
143 tmap->rot[2] = DEG2RADF(tmap->rot[2]);
144 }
145 }
146}
147
149{
150 /* RenderData.subimtype flag options for imtype */
151 enum {
152 R_OPENEXR_HALF = (1 << 0),
153 R_OPENEXR_ZBUF = (1 << 1),
154 R_PREVIEW_JPG = (1 << 2),
155 R_CINEON_LOG = (1 << 3),
156 R_TIFF_16BIT = (1 << 4),
157
158 R_JPEG2K_12BIT = (1 << 5),
159 /* Jpeg2000 */
160 R_JPEG2K_16BIT = (1 << 6),
161 R_JPEG2K_YCC = (1 << 7),
162 /* when disabled use RGB */
163 R_JPEG2K_CINE_PRESET = (1 << 8),
164 R_JPEG2K_CINE_48FPS = (1 << 9),
165 };
166
167 /* NOTE: rd->subimtype is moved into individual settings now and no longer
168 * exists */
169 RenderData *rd = &sce->r;
170 ImageFormatData *imf = &sce->r.im_format;
171
172 /* we know no data loss happens here, the old values were in char range */
173 imf->imtype = char(rd->imtype);
174 imf->planes = char(rd->planes);
175 imf->compress = char(rd->quality);
176 imf->quality = char(rd->quality);
177
178 /* default, was stored in multiple places, may override later */
180
181 /* openexr */
182 imf->exr_codec = rd->quality & 7; /* strange but true! 0-4 are valid values, OPENEXR_COMPRESS */
183
184 switch (imf->imtype) {
186 imf->depth = (rd->subimtype & R_OPENEXR_HALF) ? R_IMF_CHAN_DEPTH_16 : R_IMF_CHAN_DEPTH_32;
187 if (rd->subimtype & R_PREVIEW_JPG) {
189 }
190 break;
192 if (rd->subimtype & R_TIFF_16BIT) {
194 }
195 break;
196 case R_IMF_IMTYPE_JP2:
197 if (rd->subimtype & R_JPEG2K_16BIT) {
199 }
200 else if (rd->subimtype & R_JPEG2K_12BIT) {
202 }
203
204 if (rd->subimtype & R_JPEG2K_YCC) {
206 }
207 if (rd->subimtype & R_JPEG2K_CINE_PRESET) {
209 }
210 if (rd->subimtype & R_JPEG2K_CINE_48FPS) {
212 }
213 break;
215 case R_IMF_IMTYPE_DPX:
216 if (rd->subimtype & R_CINEON_LOG) {
218 }
219 break;
220 }
221}
222
223/* socket use flags were only temporary before */
225{
226 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
227 LISTBASE_FOREACH (bNodeSocket *, sock, &node->inputs) {
228 sock->flag &= ~SOCK_IS_LINKED;
229 }
230 LISTBASE_FOREACH (bNodeSocket *, sock, &node->outputs) {
231 sock->flag &= ~SOCK_IS_LINKED;
232 }
233 }
234 LISTBASE_FOREACH (bNodeSocket *, sock, &ntree->inputs_legacy) {
235 sock->flag &= ~SOCK_IS_LINKED;
236 }
237 LISTBASE_FOREACH (bNodeSocket *, sock, &ntree->outputs_legacy) {
238 sock->flag &= ~SOCK_IS_LINKED;
239 }
240
241 LISTBASE_FOREACH (bNodeLink *, link, &ntree->links) {
242 link->fromsock->flag |= SOCK_IS_LINKED;
243 link->tosock->flag |= SOCK_IS_LINKED;
244 }
245}
246
248{
249 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
250 if (node->type == CMP_NODE_OUTPUT_FILE) {
251 /* previous CMP_NODE_OUTPUT_FILE nodes get converted to multi-file outputs */
252 NodeImageFile *old_data = static_cast<NodeImageFile *>(node->storage);
253 NodeImageMultiFile *nimf = MEM_cnew<NodeImageMultiFile>("node image multi file");
254 bNodeSocket *old_image = static_cast<bNodeSocket *>(BLI_findlink(&node->inputs, 0));
255 bNodeSocket *old_z = static_cast<bNodeSocket *>(BLI_findlink(&node->inputs, 1));
256
257 char filename[FILE_MAXFILE];
258
259 /* ugly, need to remove the old inputs list to avoid bad pointer
260 * checks when adding new sockets.
261 * sock->storage is expected to contain path info in ntreeCompositOutputFileAddSocket.
262 */
263 BLI_listbase_clear(&node->inputs);
264
265 node->storage = nimf;
266
267 /* looks like storage data can be messed up somehow, stupid check here */
268 if (old_data) {
269 char basepath[FILE_MAXDIR];
270
271 /* split off filename from the old path, to be used as socket sub-path */
273 old_data->name, basepath, sizeof(basepath), filename, sizeof(filename));
274
275 STRNCPY(nimf->base_path, basepath);
276 nimf->format = old_data->im_format;
277 }
278 else {
279 STRNCPY(filename, old_image->name);
280 }
281
282 /* If Z buffer is saved, change the image type to multi-layer EXR.
283 * XXX: this is slightly messy, Z buffer was ignored before for anything but EXR and IRIS ...
284 * I'm just assuming here that IRIZ means IRIS with z buffer. */
285 if (old_data && ELEM(old_data->im_format.imtype, R_IMF_IMTYPE_IRIZ, R_IMF_IMTYPE_OPENEXR)) {
286 char sockpath[FILE_MAX];
287
289
290 SNPRINTF(sockpath, "%s_Image", filename);
291 bNodeSocket *sock = ntreeCompositOutputFileAddSocket(ntree, node, sockpath, &nimf->format);
292 /* XXX later do_versions copies path from socket name, need to set this explicitly */
293 STRNCPY(sock->name, sockpath);
294 if (old_image->link) {
295 old_image->link->tosock = sock;
296 sock->link = old_image->link;
297 }
298
299 SNPRINTF(sockpath, "%s_Z", filename);
300 sock = ntreeCompositOutputFileAddSocket(ntree, node, sockpath, &nimf->format);
301 /* XXX later do_versions copies path from socket name, need to set this explicitly */
302 STRNCPY(sock->name, sockpath);
303 if (old_z->link) {
304 old_z->link->tosock = sock;
305 sock->link = old_z->link;
306 }
307 }
308 else {
309 bNodeSocket *sock = ntreeCompositOutputFileAddSocket(ntree, node, filename, &nimf->format);
310 /* XXX later do_versions copies path from socket name, need to set this explicitly */
311 STRNCPY(sock->name, filename);
312 if (old_image->link) {
313 old_image->link->tosock = sock;
314 sock->link = old_image->link;
315 }
316 }
317
318 blender::bke::node_remove_socket(ntree, node, old_image);
319 blender::bke::node_remove_socket(ntree, node, old_z);
320 if (old_data) {
321 MEM_freeN(old_data);
322 }
323 }
324 else if (node->type == CMP_NODE_OUTPUT_MULTI_FILE__DEPRECATED) {
325 NodeImageMultiFile *nimf = static_cast<NodeImageMultiFile *>(node->storage);
326
327 /* CMP_NODE_OUTPUT_MULTI_FILE has been re-declared as CMP_NODE_OUTPUT_FILE */
328 node->type = CMP_NODE_OUTPUT_FILE;
329
330 /* initialize the node-wide image format from render data, if available */
331 if (sce) {
332 nimf->format = sce->r.im_format;
333 }
334
335 /* transfer render format toggle to node format toggle */
336 LISTBASE_FOREACH (bNodeSocket *, sock, &node->inputs) {
337 NodeImageMultiFileSocket *simf = static_cast<NodeImageMultiFileSocket *>(sock->storage);
338 simf->use_node_format = simf->use_render_format;
339 }
340
341 /* we do have preview now */
342 node->flag |= NODE_PREVIEW;
343 }
344 }
345}
346
347/* blue and red are swapped pre 2.62.1, be sane (red == red) now! */
349{
350 for (int a = 0; a < mesh->corner_data.totlayer; a++) {
351 CustomDataLayer *layer = &mesh->corner_data.layers[a];
352
353 if (layer->type == CD_PROP_BYTE_COLOR) {
354 MLoopCol *mloopcol = static_cast<MLoopCol *>(layer->data);
355 for (int i = 0; i < mesh->corners_num; i++, mloopcol++) {
356 std::swap(mloopcol->r, mloopcol->b);
357 }
358 }
359 }
360}
361
363{
364 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
365 if (node->type == CMP_NODE_OUTPUT_FILE) {
366 LISTBASE_FOREACH (bNodeSocket *, sock, &node->inputs) {
367 NodeImageMultiFileSocket *input = static_cast<NodeImageMultiFileSocket *>(sock->storage);
368 /* input file path is stored in dedicated struct now instead socket name */
369 STRNCPY(input->path, sock->name);
370 }
371 }
372 }
373}
374
376{
377 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
378 if (node->type == CMP_NODE_OUTPUT_FILE) {
379 LISTBASE_FOREACH (bNodeSocket *, sock, &node->inputs) {
380 NodeImageMultiFileSocket *input = static_cast<NodeImageMultiFileSocket *>(sock->storage);
381
382 /* Multi-layer names are stored as separate strings now,
383 * used the path string before, so copy it over. */
384 STRNCPY(input->layer, input->path);
385
386 /* paths/layer names also have to be unique now, initial check */
387 ntreeCompositOutputFileUniquePath(&node->inputs, sock, input->path, '_');
388 ntreeCompositOutputFileUniqueLayer(&node->inputs, sock, input->layer, '_');
389 }
390 }
391 }
392}
393
395{
396 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
397 if (node->type == CMP_NODE_IMAGE) {
398 LISTBASE_FOREACH (bNodeSocket *, sock, &node->outputs) {
399 NodeImageLayer *output = MEM_cnew<NodeImageLayer>("node image layer");
400
401 /* Take pass index both from current storage pointer (actually an int). */
402 output->pass_index = POINTER_AS_INT(sock->storage);
403
404 /* replace socket data pointer */
405 sock->storage = output;
406 }
407 }
408 }
409}
410
412{
413 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
414 if (node->type == NODE_FRAME) {
415 /* initialize frame node storage data */
416 if (node->storage == nullptr) {
417 NodeFrame *data = MEM_cnew<NodeFrame>("frame node storage");
418 node->storage = data;
419
420 /* copy current flags */
421 data->flag = node->custom1;
422
423 data->label_size = 20;
424 }
425 }
426
427 /* initialize custom node color */
428 node->color[0] = node->color[1] = node->color[2] = 0.608f; /* default theme color */
429 }
430}
431
433{
434 for (int i = 0; i < track->markersnr; i++) {
435 MovieTrackingMarker *marker = &track->markers[i];
436
437 if (is_zero_v2(marker->pattern_corners[0]) && is_zero_v2(marker->pattern_corners[1]) &&
438 is_zero_v2(marker->pattern_corners[2]) && is_zero_v2(marker->pattern_corners[3]))
439 {
440 marker->pattern_corners[0][0] = track->pat_min_legacy[0];
441 marker->pattern_corners[0][1] = track->pat_min_legacy[1];
442
443 marker->pattern_corners[1][0] = track->pat_max_legacy[0];
444 marker->pattern_corners[1][1] = track->pat_min_legacy[1];
445
446 marker->pattern_corners[2][0] = track->pat_max_legacy[0];
447 marker->pattern_corners[2][1] = track->pat_max_legacy[1];
448
449 marker->pattern_corners[3][0] = track->pat_min_legacy[0];
450 marker->pattern_corners[3][1] = track->pat_max_legacy[1];
451 }
452
453 if (is_zero_v2(marker->search_min) && is_zero_v2(marker->search_max)) {
454 copy_v2_v2(marker->search_min, track->search_min_legacy);
455 copy_v2_v2(marker->search_max, track->search_max_legacy);
456 }
457 }
458}
459
460static const char *node_get_static_idname(int type, int treetype)
461{
462 /* XXX hack, group types share a single static integer identifier,
463 * but are registered as separate types */
464 if (type == NODE_GROUP) {
465 switch (treetype) {
466 case NTREE_COMPOSIT:
467 return "CompositorNodeGroup";
468 case NTREE_SHADER:
469 return "ShaderNodeGroup";
470 case NTREE_TEXTURE:
471 return "TextureNodeGroup";
472 }
473 }
474 else {
475 switch (type) {
476 case NODE_FRAME:
477 return "NodeFrame";
478 case NODE_GROUP:
479 return "NodeGroup";
480 case NODE_GROUP_INPUT:
481 return "NodeGroupInput";
483 return "NodeGroupOutput";
484 case NODE_REROUTE:
485 return "NodeReroute";
486 case /*SH_NODE_OUTPUT*/ 1:
487 return "ShaderNodeOutput";
488 case /*SH_NODE_MATERIAL*/ 100:
489 return "ShaderNodeMaterial";
490 case SH_NODE_RGB:
491 return "ShaderNodeRGB";
492 case SH_NODE_VALUE:
493 return "ShaderNodeValue";
495 return "ShaderNodeMixRGB";
496 case SH_NODE_VALTORGB:
497 return "ShaderNodeValToRGB";
498 case SH_NODE_RGBTOBW:
499 return "ShaderNodeRGBToBW";
500 case /*SH_NODE_TEXTURE*/ 106:
501 return "ShaderNodeTexture";
502 case SH_NODE_NORMAL:
503 return "ShaderNodeNormal";
504 case SH_NODE_GAMMA:
505 return "ShaderNodeGamma";
507 return "ShaderNodeBrightContrast";
508 case /*SH_NODE_GEOMETRY*/ 108:
509 return "ShaderNodeGeometry";
510 case SH_NODE_MAPPING:
511 return "ShaderNodeMapping";
513 return "ShaderNodeVectorCurve";
515 return "ShaderNodeRGBCurve";
516 case SH_NODE_CAMERA:
517 return "ShaderNodeCameraData";
518 case SH_NODE_MATH:
519 return "ShaderNodeMath";
521 return "ShaderNodeVectorMath";
522 case SH_NODE_SQUEEZE:
523 return "ShaderNodeSqueeze";
524 case /*SH_NODE_MATERIAL_EXT*/ 118:
525 return "ShaderNodeExtendedMaterial";
526 case SH_NODE_INVERT:
527 return "ShaderNodeInvert";
529 return "ShaderNodeSeparateRGB";
531 return "ShaderNodeCombineRGB";
532 case SH_NODE_HUE_SAT:
533 return "ShaderNodeHueSaturation";
535 return "ShaderNodeOutputMaterial";
537 return "ShaderNodeOutputLamp";
539 return "ShaderNodeOutputWorld";
540 case SH_NODE_FRESNEL:
541 return "ShaderNodeFresnel";
543 return "ShaderNodeLayerWeight";
545 return "ShaderNodeMixShader";
547 return "ShaderNodeAddShader";
549 return "ShaderNodeAttribute";
551 return "ShaderNodeAmbientOcclusion";
553 return "ShaderNodeBackground";
554 case SH_NODE_HOLDOUT:
555 return "ShaderNodeHoldout";
556 case /*SH_NODE_BSDF_ANISOTROPIC*/ 131:
557 return "ShaderNodeBsdfAnisotropic";
559 return "ShaderNodeBsdfDiffuse";
560 case /*SH_NODE_BSDF_GLOSSY*/ 133:
561 return "ShaderNodeBsdfGlossy";
563 return "ShaderNodeBsdfGlass";
565 return "ShaderNodeBsdfRefraction";
567 return "ShaderNodeBsdfTranslucent";
569 return "ShaderNodeBsdfTransparent";
571 return "ShaderNodeBsdfRayPortal";
572 case /*SH_NODE_BSDF_VELVET*/ 139:
573 return "ShaderNodeBsdfVelvet";
574 case /*SH_NODE_VOLUME_TRANSPARENT*/ 161:
575 return "ShaderNodeVolumeTransparent";
576 case /*SH_NODE_VOLUME_ISOTROPIC*/ 162:
577 return "ShaderNodeVolumeIsotropic";
578 case SH_NODE_EMISSION:
579 return "ShaderNodeEmission";
581 return "ShaderNodeNewGeometry";
583 return "ShaderNodeLightPath";
585 return "ShaderNodeLightFalloff";
587 return "ShaderNodeObjectInfo";
589 return "ShaderNodeParticleInfo";
591 return "ShaderNodeHairInfo";
592 case SH_NODE_BUMP:
593 return "ShaderNodeBump";
595 return "ShaderNodeNormalMap";
596 case SH_NODE_TANGENT:
597 return "ShaderNodeTangent";
598 case SH_NODE_SCRIPT:
599 return "ShaderNodeScript";
601 return "ShaderNodeTexImage";
603 return "ShaderNodeTexEnvironment";
604 case SH_NODE_TEX_SKY:
605 return "ShaderNodeTexSky";
607 return "ShaderNodeTexGradient";
609 return "ShaderNodeTexNoise";
611 return "ShaderNodeTexMagic";
612 case SH_NODE_TEX_WAVE:
613 return "ShaderNodeTexWave";
615 return "ShaderNodeTexMusgrave";
617 return "ShaderNodeTexVoronoi";
619 return "ShaderNodeTexChecker";
621 return "ShaderNodeTexBrick";
623 return "ShaderNodeTexCoord";
624 case CMP_NODE_VIEWER:
625 return "CompositorNodeViewer";
626 case CMP_NODE_RGB:
627 return "CompositorNodeRGB";
628 case CMP_NODE_VALUE:
629 return "CompositorNodeValue";
630 case CMP_NODE_MIX_RGB:
631 return "CompositorNodeMixRGB";
633 return "CompositorNodeValToRGB";
634 case CMP_NODE_RGBTOBW:
635 return "CompositorNodeRGBToBW";
636 case CMP_NODE_NORMAL:
637 return "CompositorNodeNormal";
639 return "CompositorNodeCurveVec";
641 return "CompositorNodeCurveRGB";
643 return "CompositorNodeAlphaOver";
644 case CMP_NODE_BLUR:
645 return "CompositorNodeBlur";
646 case CMP_NODE_FILTER:
647 return "CompositorNodeFilter";
649 return "CompositorNodeMapValue";
651 return "CompositorNodeMapRange";
652 case CMP_NODE_TIME:
653 return "CompositorNodeTime";
654 case CMP_NODE_VECBLUR:
655 return "CompositorNodeVecBlur";
657 return "CompositorNodeSepRGBA";
659 return "CompositorNodeSepHSVA";
661 return "CompositorNodeSetAlpha";
662 case CMP_NODE_HUE_SAT:
663 return "CompositorNodeHueSat";
664 case CMP_NODE_IMAGE:
665 return "CompositorNodeImage";
667 return "CompositorNodeRLayers";
669 return "CompositorNodeComposite";
671 return "CompositorNodeOutputFile";
672 case CMP_NODE_TEXTURE:
673 return "CompositorNodeTexture";
675 return "CompositorNodeTranslate";
677 return "CompositorNodeZcombine";
679 return "CompositorNodeCombRGBA";
681 return "CompositorNodeDilateErode";
682 case CMP_NODE_INPAINT:
683 return "CompositorNodeInpaint";
685 return "CompositorNodeDespeckle";
686 case CMP_NODE_ROTATE:
687 return "CompositorNodeRotate";
688 case CMP_NODE_SCALE:
689 return "CompositorNodeScale";
691 return "CompositorNodeSepYCCA";
693 return "CompositorNodeCombYCCA";
695 return "CompositorNodeSepYUVA";
697 return "CompositorNodeCombYUVA";
699 return "CompositorNodeDiffMatte";
701 return "CompositorNodeColorSpill";
703 return "CompositorNodeChromaMatte";
705 return "CompositorNodeChannelMatte";
706 case CMP_NODE_FLIP:
707 return "CompositorNodeFlip";
709 return "CompositorNodeSplitViewer";
710 case CMP_NODE_MAP_UV:
711 return "CompositorNodeMapUV";
712 case CMP_NODE_ID_MASK:
713 return "CompositorNodeIDMask";
715 return "CompositorNodeDoubleEdgeMask";
716 case CMP_NODE_DEFOCUS:
717 return "CompositorNodeDefocus";
719 return "CompositorNodeDisplace";
721 return "CompositorNodeCombHSVA";
722 case CMP_NODE_MATH:
723 return "CompositorNodeMath";
725 return "CompositorNodeLumaMatte";
727 return "CompositorNodeBrightContrast";
728 case CMP_NODE_GAMMA:
729 return "CompositorNodeGamma";
730 case CMP_NODE_INVERT:
731 return "CompositorNodeInvert";
733 return "CompositorNodeNormalize";
734 case CMP_NODE_CROP:
735 return "CompositorNodeCrop";
736 case CMP_NODE_DBLUR:
737 return "CompositorNodeDBlur";
739 return "CompositorNodeBilateralblur";
741 return "CompositorNodePremulKey";
742 case CMP_NODE_GLARE:
743 return "CompositorNodeGlare";
744 case CMP_NODE_TONEMAP:
745 return "CompositorNodeTonemap";
747 return "CompositorNodeLensdist";
749 return "CompositorNodeLevels";
751 return "CompositorNodeColorMatte";
753 return "CompositorNodeDistanceMatte";
755 return "CompositorNodeColorBalance";
757 return "CompositorNodeHueCorrect";
759 return "CompositorNodeMovieClip";
761 return "CompositorNodeTransform";
763 return "CompositorNodeStabilize";
765 return "CompositorNodeMovieDistortion";
767 return "CompositorNodeBoxMask";
769 return "CompositorNodeEllipseMask";
771 return "CompositorNodeBokehImage";
773 return "CompositorNodeBokehBlur";
774 case CMP_NODE_SWITCH:
775 return "CompositorNodeSwitch";
777 return "CompositorNodeColorCorrection";
778 case CMP_NODE_MASK:
779 return "CompositorNodeMask";
781 return "CompositorNodeKeyingScreen";
782 case CMP_NODE_KEYING:
783 return "CompositorNodeKeying";
785 return "CompositorNodeTrackPos";
787 return "CompositorNodePixelate";
788 case TEX_NODE_OUTPUT:
789 return "TextureNodeOutput";
790 case TEX_NODE_CHECKER:
791 return "TextureNodeChecker";
792 case TEX_NODE_TEXTURE:
793 return "TextureNodeTexture";
794 case TEX_NODE_BRICKS:
795 return "TextureNodeBricks";
796 case TEX_NODE_MATH:
797 return "TextureNodeMath";
798 case TEX_NODE_MIX_RGB:
799 return "TextureNodeMixRGB";
800 case TEX_NODE_RGBTOBW:
801 return "TextureNodeRGBToBW";
803 return "TextureNodeValToRGB";
804 case TEX_NODE_IMAGE:
805 return "TextureNodeImage";
807 return "TextureNodeCurveRGB";
808 case TEX_NODE_INVERT:
809 return "TextureNodeInvert";
810 case TEX_NODE_HUE_SAT:
811 return "TextureNodeHueSaturation";
813 return "TextureNodeCurveTime";
814 case TEX_NODE_ROTATE:
815 return "TextureNodeRotate";
816 case TEX_NODE_VIEWER:
817 return "TextureNodeViewer";
819 return "TextureNodeTranslate";
820 case TEX_NODE_COORD:
821 return "TextureNodeCoordinates";
823 return "TextureNodeDistance";
825 return "TextureNodeCompose";
827 return "TextureNodeDecompose";
829 return "TextureNodeValToNor";
830 case TEX_NODE_SCALE:
831 return "TextureNodeScale";
832 case TEX_NODE_AT:
833 return "TextureNodeAt";
835 return "TextureNodeTexVoronoi";
837 return "TextureNodeTexBlend";
839 return "TextureNodeTexMagic";
841 return "TextureNodeTexMarble";
843 return "TextureNodeTexClouds";
844 case TEX_NODE_PROC + TEX_WOOD:
845 return "TextureNodeTexWood";
847 return "TextureNodeTexMusgrave";
849 return "TextureNodeTexNoise";
851 return "TextureNodeTexStucci";
853 return "TextureNodeTexDistNoise";
854 }
855 }
856 return "";
857}
858
860{
861 switch (sock->type) {
862 case SOCK_FLOAT: {
863 bNodeSocketValueFloat *dval = sock->default_value_typed<bNodeSocketValueFloat>();
865 }
866 case SOCK_INT: {
867 bNodeSocketValueInt *dval = sock->default_value_typed<bNodeSocketValueInt>();
869 }
870 case SOCK_BOOLEAN: {
872 }
873 case SOCK_VECTOR: {
874 bNodeSocketValueVector *dval = sock->default_value_typed<bNodeSocketValueVector>();
876 }
877 case SOCK_RGBA: {
879 }
880 case SOCK_STRING: {
881 bNodeSocketValueString *dval = sock->default_value_typed<bNodeSocketValueString>();
883 }
884 case SOCK_SHADER: {
886 }
887 }
888 return "";
889}
890
891static void do_versions_nodetree_customnodes(bNodeTree *ntree, int /*is_group*/)
892{
893 /* initialize node tree type idname */
894 {
895 ntree->typeinfo = nullptr;
896
897 /* tree type idname */
898 switch (ntree->type) {
899 case NTREE_COMPOSIT:
900 STRNCPY(ntree->idname, "CompositorNodeTree");
901 break;
902 case NTREE_SHADER:
903 STRNCPY(ntree->idname, "ShaderNodeTree");
904 break;
905 case NTREE_TEXTURE:
906 STRNCPY(ntree->idname, "TextureNodeTree");
907 break;
908 }
909
910 /* node type idname */
911 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
913 node->idname, node_get_static_idname(node->type, ntree->type), sizeof(node->idname));
914
915 /* existing old nodes have been initialized already */
916 node->flag |= NODE_INIT;
917
918 /* sockets idname */
919 LISTBASE_FOREACH (bNodeSocket *, sock, &node->inputs) {
920 STRNCPY(sock->idname, node_socket_get_static_idname(sock));
921 }
922 LISTBASE_FOREACH (bNodeSocket *, sock, &node->outputs) {
923 STRNCPY(sock->idname, node_socket_get_static_idname(sock));
924 }
925 }
926 /* tree sockets idname */
927 LISTBASE_FOREACH (bNodeSocket *, sock, &ntree->inputs_legacy) {
928 STRNCPY(sock->idname, node_socket_get_static_idname(sock));
929 }
930 LISTBASE_FOREACH (bNodeSocket *, sock, &ntree->outputs_legacy) {
931 STRNCPY(sock->idname, node_socket_get_static_idname(sock));
932 }
933 }
934
935 {
937 /* initialize socket in_out values */
938 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
939 LISTBASE_FOREACH (bNodeSocket *, sock, &node->inputs) {
940 sock->in_out = SOCK_IN;
941 }
942 LISTBASE_FOREACH (bNodeSocket *, sock, &node->outputs) {
943 sock->in_out = SOCK_OUT;
944 }
945 }
946 LISTBASE_FOREACH (bNodeSocket *, sock, &ntree->inputs_legacy) {
947 sock->in_out = SOCK_IN;
948 }
949 LISTBASE_FOREACH (bNodeSocket *, sock, &ntree->outputs_legacy) {
950 sock->in_out = SOCK_OUT;
951 }
952 }
953
954 /* initialize socket identifier strings */
955 {
956 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
957 LISTBASE_FOREACH (bNodeSocket *, sock, &node->inputs) {
958 STRNCPY(sock->identifier, sock->name);
959 BLI_uniquename(&node->inputs,
960 sock,
961 "socket",
962 '.',
963 offsetof(bNodeSocket, identifier),
964 sizeof(sock->identifier));
965 }
966 LISTBASE_FOREACH (bNodeSocket *, sock, &node->outputs) {
967 STRNCPY(sock->identifier, sock->name);
968 BLI_uniquename(&node->outputs,
969 sock,
970 "socket",
971 '.',
972 offsetof(bNodeSocket, identifier),
973 sizeof(sock->identifier));
974 }
975 }
976 LISTBASE_FOREACH (bNodeSocket *, sock, &ntree->inputs_legacy) {
977 STRNCPY(sock->identifier, sock->name);
978 BLI_uniquename(&ntree->inputs_legacy,
979 sock,
980 "socket",
981 '.',
982 offsetof(bNodeSocket, identifier),
983 sizeof(sock->identifier));
984 }
985 LISTBASE_FOREACH (bNodeSocket *, sock, &ntree->outputs_legacy) {
986 STRNCPY(sock->identifier, sock->name);
987 BLI_uniquename(&ntree->outputs_legacy,
988 sock,
989 "socket",
990 '.',
991 offsetof(bNodeSocket, identifier),
992 sizeof(sock->identifier));
993 }
994 }
995}
996
997static bool seq_colorbalance_update_cb(Sequence *seq, void * /*user_data*/)
998{
999 Strip *strip = seq->strip;
1000
1001 if (strip && strip->color_balance) {
1004
1005 cbmd->color_balance = *strip->color_balance;
1006
1007 /* multiplication with color balance used is handled differently,
1008 * so we need to move multiplication to modifier so files would be
1009 * compatible
1010 */
1011 cbmd->color_multiply = seq->mul;
1012 seq->mul = 1.0f;
1013
1014 MEM_freeN(strip->color_balance);
1015 strip->color_balance = nullptr;
1016 }
1017 return true;
1018}
1019
1020static bool seq_set_alpha_mode_cb(Sequence *seq, void * /*user_data*/)
1021{
1022 enum { SEQ_MAKE_PREMUL = (1 << 6) };
1023 if (seq->flag & SEQ_MAKE_PREMUL) {
1025 }
1026 else {
1028 }
1029 return true;
1030}
1031
1032static bool seq_set_wipe_angle_cb(Sequence *seq, void * /*user_data*/)
1033{
1034 if (seq->type == SEQ_TYPE_WIPE) {
1035 WipeVars *wv = static_cast<WipeVars *>(seq->effectdata);
1036 wv->angle = DEG2RADF(wv->angle);
1037 }
1038 return true;
1039}
1040
1041/* Create a socket stub without typeinfo. */
1042static bNodeSocket *version_make_socket_stub(const char *idname,
1044 eNodeSocketInOut in_out,
1045 const char *identifier,
1046 const char *name,
1047 const void *default_value,
1048 const IDProperty *prop)
1049{
1050 bNodeSocket *socket = MEM_cnew<bNodeSocket>(__func__);
1051 socket->runtime = MEM_new<blender::bke::bNodeSocketRuntime>(__func__);
1052 STRNCPY(socket->idname, idname);
1053 socket->type = int(type);
1054 socket->in_out = int(in_out);
1055
1056 socket->limit = (in_out == SOCK_IN ? 1 : 0xFFF);
1057
1058 STRNCPY(socket->identifier, identifier);
1059 STRNCPY(socket->name, name);
1060 socket->storage = nullptr;
1061 socket->flag |= SOCK_COLLAPSED;
1062
1063 /* NOTE: technically socket values can store ref-counted ID pointers, but at this stage the
1064 * refcount can be ignored. It gets recomputed after lib-linking for all ID pointers. Socket
1065 * values don't have allocated data, so a simple duplication works here. */
1066 socket->default_value = default_value ? MEM_dupallocN(default_value) : nullptr;
1067 socket->prop = prop ? IDP_CopyProperty(prop) : nullptr;
1068
1069 return socket;
1070}
1071
1072/* Same as node_add_static_node but does not rely on node typeinfo. */
1073static bNode *version_add_group_in_out_node(bNodeTree *ntree, const int type)
1074{
1075 ListBase *ntree_socket_list = nullptr;
1076 ListBase *node_socket_list = nullptr;
1077 eNodeSocketInOut socket_in_out = SOCK_IN;
1078
1079 bNode *node = MEM_cnew<bNode>("new node");
1080 switch (type) {
1081 case NODE_GROUP_INPUT:
1082 STRNCPY(node->idname, "NodeGroupInput");
1083 ntree_socket_list = &ntree->inputs_legacy;
1084 /* Group input has only outputs. */
1085 node_socket_list = &node->outputs;
1086 socket_in_out = SOCK_OUT;
1087 break;
1088 case NODE_GROUP_OUTPUT:
1089 STRNCPY(node->idname, "NodeGroupOutput");
1090 ntree_socket_list = &ntree->outputs_legacy;
1091 /* Group output has only inputs. */
1092 node_socket_list = &node->inputs;
1093 socket_in_out = SOCK_IN;
1094 break;
1095 default:
1097 return nullptr;
1098 }
1099
1100 node->runtime = MEM_new<blender::bke::bNodeRuntime>(__func__);
1101 BLI_addtail(&ntree->nodes, node);
1102 blender::bke::node_unique_id(ntree, node);
1103
1104 /* Manual initialization of the node,
1105 * node->typeinfo is only set after versioning. */
1106 node->type = type;
1107 {
1108 if (ntree->typeinfo && ntree->typeinfo->node_add_init) {
1109 ntree->typeinfo->node_add_init(ntree, node);
1110 }
1111
1112 /* Add sockets without relying on declarations or typeinfo.
1113 * These are stubs for links, full typeinfo is defined later. */
1114 LISTBASE_FOREACH (bNodeSocket *, tree_socket, ntree_socket_list) {
1115 bNodeSocket *node_socket = version_make_socket_stub(tree_socket->idname,
1116 eNodeSocketDatatype(tree_socket->type),
1117 socket_in_out,
1118 tree_socket->identifier,
1119 tree_socket->name,
1120 tree_socket->default_value,
1121 tree_socket->prop);
1122
1123 BLI_addtail(node_socket_list, node_socket);
1124 BKE_ntree_update_tag_socket_type(ntree, node_socket);
1125 BKE_ntree_update_tag_socket_new(ntree, node_socket);
1126 }
1127 }
1128 BKE_ntree_update_tag_node_new(ntree, node);
1129 return node;
1130}
1131
1132/* NOLINTNEXTLINE: readability-function-size */
1133void blo_do_versions_260(FileData *fd, Library * /*lib*/, Main *bmain)
1134{
1135 if (bmain->versionfile < 260) {
1136 {
1137 /* set default alpha value of Image outputs in image and render layer nodes to 0 */
1139 LISTBASE_FOREACH (Scene *, sce, &bmain->scenes) {
1140 /* there are files with invalid audio_channels value, the real cause
1141 * is unknown, but we fix it here anyway to avoid crashes */
1142 if (sce->r.ffcodecdata.audio_channels == 0) {
1143 sce->r.ffcodecdata.audio_channels = 2;
1144 }
1145
1146 if (sce->nodetree) {
1148 }
1149 }
1150
1151 LISTBASE_FOREACH (bNodeTree *, ntree, &bmain->nodetrees) {
1153 }
1154 }
1155
1156 {
1157 /* Support old particle dupli-object rotation settings. */
1158 LISTBASE_FOREACH (ParticleSettings *, part, &bmain->particles) {
1159 if (ELEM(part->ren_as, PART_DRAW_OB, PART_DRAW_GR)) {
1160 part->draw |= PART_DRAW_ROTATE_OB;
1161
1162 if (part->rotmode == 0) {
1163 part->rotmode = PART_ROT_VEL;
1164 }
1165 }
1166 }
1167 }
1168 }
1169
1170 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 260, 1)) {
1171 LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
1172 ob->collision_boundtype = ob->boundtype;
1173 }
1174
1175 {
1176 LISTBASE_FOREACH (Camera *, cam, &bmain->cameras) {
1177 if (cam->sensor_x < 0.01f) {
1178 cam->sensor_x = DEFAULT_SENSOR_WIDTH;
1179 }
1180
1181 if (cam->sensor_y < 0.01f) {
1182 cam->sensor_y = DEFAULT_SENSOR_HEIGHT;
1183 }
1184 }
1185 }
1186 }
1187
1188 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 260, 2)) {
1189 FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
1190 if (ntree->type == NTREE_SHADER) {
1191 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
1192 if (node->type == SH_NODE_MAPPING) {
1193 TexMapping *tex_mapping = static_cast<TexMapping *>(node->storage);
1194 tex_mapping->projx = PROJ_X;
1195 tex_mapping->projy = PROJ_Y;
1196 tex_mapping->projz = PROJ_Z;
1197 }
1198 }
1199 }
1200 }
1202 }
1203
1204 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 260, 4)) {
1205 {
1206 /* Convert node angles to radians! */
1208 LISTBASE_FOREACH (Scene *, sce, &bmain->scenes) {
1209 if (sce->nodetree) {
1211 }
1212 }
1213
1214 LISTBASE_FOREACH (Material *, mat, &bmain->materials) {
1215 if (mat->nodetree) {
1217 }
1218 }
1219
1220 LISTBASE_FOREACH (bNodeTree *, ntree, &bmain->nodetrees) {
1222 }
1223 }
1224
1225 {
1226 /* Tomato compatibility code. */
1228 LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) {
1229 LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
1230 LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
1231 if (sl->spacetype == SPACE_VIEW3D) {
1232 View3D *v3d = (View3D *)sl;
1233 if (v3d->bundle_size == 0.0f) {
1234 v3d->bundle_size = 0.2f;
1236 }
1237
1238 if (v3d->bundle_drawtype == 0) {
1240 }
1241 }
1242 else if (sl->spacetype == SPACE_CLIP) {
1243 SpaceClip *sclip = (SpaceClip *)sl;
1244 if (sclip->scopes.track_preview_height == 0) {
1245 sclip->scopes.track_preview_height = 120;
1246 }
1247 }
1248 }
1249 }
1250 }
1251
1252 LISTBASE_FOREACH (MovieClip *, clip, &bmain->movieclips) {
1253 if (clip->aspx < 1.0f) {
1254 clip->aspx = 1.0f;
1255 clip->aspy = 1.0f;
1256 }
1257
1258 clip->proxy.build_tc_flag = IMB_TC_RECORD_RUN;
1259
1260 if (clip->proxy.build_size_flag == 0) {
1261 clip->proxy.build_size_flag = IMB_PROXY_25;
1262 }
1263
1264 if (clip->proxy.quality == 0) {
1265 clip->proxy.quality = 90;
1266 }
1267
1268 if (clip->tracking.camera.pixel_aspect < 0.01f) {
1269 clip->tracking.camera.pixel_aspect = 1.0f;
1270 }
1271
1272 MovieTrackingTrack *track = static_cast<MovieTrackingTrack *>(
1273 clip->tracking.tracks_legacy.first);
1274 while (track) {
1275 if (track->minimum_correlation == 0.0f) {
1276 track->minimum_correlation = 0.75f;
1277 }
1278
1279 track = static_cast<MovieTrackingTrack *>(track->next);
1280 }
1281 }
1282 }
1283 }
1284
1285 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 260, 6)) {
1286 LISTBASE_FOREACH (Scene *, sce, &bmain->scenes) {
1288 }
1289
1290 LISTBASE_FOREACH (MovieClip *, clip, &bmain->movieclips) {
1291 MovieTrackingSettings *settings = &clip->tracking.settings;
1292
1293 if (settings->default_pattern_size == 0.0f) {
1295 settings->default_minimum_correlation = 0.75;
1296 settings->default_pattern_size = 11;
1297 settings->default_search_size = 51;
1298 }
1299 }
1300
1301 {
1302 LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
1303 /* convert delta addition into delta scale */
1304 int i;
1305 for (i = 0; i < 3; i++) {
1306 if ((ob->dsize[i] == 0.0f) || /* simple case, user never touched dsize */
1307 (ob->scale[i] == 0.0f)) /* can't scale the dsize to give a non zero result,
1308 * so fallback to 1.0f */
1309 {
1310 ob->dscale[i] = 1.0f;
1311 }
1312 else {
1313 ob->dscale[i] = (ob->scale[i] + ob->dsize[i]) / ob->scale[i];
1314 }
1315 }
1316 }
1317 }
1318 }
1319 /* sigh, this dscale vs dsize version patching was not done right, fix for fix,
1320 * this intentionally checks an exact subversion, also note this was never in a release,
1321 * at some point this could be removed. */
1322 else if (bmain->versionfile == 260 && bmain->subversionfile == 6) {
1323 LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
1324 if (is_zero_v3(ob->dscale)) {
1325 copy_vn_fl(ob->dscale, 3, 1.0f);
1326 }
1327 }
1328 }
1329
1330 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 260, 8)) {
1331 LISTBASE_FOREACH (Brush *, brush, &bmain->brushes) {
1332 if (brush->sculpt_brush_type == SCULPT_BRUSH_TYPE_ROTATE) {
1333 brush->alpha = 1.0f;
1334 }
1335 }
1336 }
1337
1338 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 261, 1)) {
1339 {
1340 /* update use flags for node sockets (was only temporary before) */
1342 LISTBASE_FOREACH (Scene *, sce, &bmain->scenes) {
1343 if (sce->nodetree) {
1345 }
1346 }
1347
1348 LISTBASE_FOREACH (Material *, mat, &bmain->materials) {
1349 if (mat->nodetree) {
1351 }
1352 }
1353
1354 LISTBASE_FOREACH (Tex *, tex, &bmain->textures) {
1355 if (tex->nodetree) {
1357 }
1358 }
1359
1360 LISTBASE_FOREACH (Light *, la, &bmain->lights) {
1361 if (la->nodetree) {
1363 }
1364 }
1365
1366 LISTBASE_FOREACH (World *, world, &bmain->worlds) {
1367 if (world->nodetree) {
1369 }
1370 }
1371
1372 LISTBASE_FOREACH (bNodeTree *, ntree, &bmain->nodetrees) {
1374 }
1375 }
1376 {
1377 LISTBASE_FOREACH (MovieClip *, clip, &bmain->movieclips) {
1378 MovieTracking *tracking = &clip->tracking;
1379 MovieTrackingObject *tracking_object = static_cast<MovieTrackingObject *>(
1380 tracking->objects.first);
1381
1382 clip->proxy.build_tc_flag |= IMB_TC_RECORD_RUN_NO_GAPS;
1383
1384 if (!tracking->settings.object_distance) {
1385 tracking->settings.object_distance = 1.0f;
1386 }
1387
1388 if (BLI_listbase_is_empty(&tracking->objects)) {
1389 BKE_tracking_object_add(tracking, "Camera");
1390 }
1391
1392 while (tracking_object) {
1393 if (!tracking_object->scale) {
1394 tracking_object->scale = 1.0f;
1395 }
1396
1397 tracking_object = static_cast<MovieTrackingObject *>(tracking_object->next);
1398 }
1399 }
1400
1401 LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
1402 LISTBASE_FOREACH (bConstraint *, con, &ob->constraints) {
1403 if (con->type == CONSTRAINT_TYPE_OBJECTSOLVER) {
1404 bObjectSolverConstraint *data = static_cast<bObjectSolverConstraint *>(con->data);
1405
1406 if (data->invmat[3][3] == 0.0f) {
1407 unit_m4(data->invmat);
1408 }
1409 }
1410 }
1411 }
1412 }
1413 }
1414
1415 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 261, 2)) {
1416 {
1417 /* convert deprecated sculpt_paint_unified_* fields to
1418 * UnifiedPaintSettings */
1419 LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
1420 ToolSettings *ts = scene->toolsettings;
1422 ups->size = ts->sculpt_paint_unified_size;
1423 ups->unprojected_radius = ts->sculpt_paint_unified_unprojected_radius;
1424 ups->alpha = ts->sculpt_paint_unified_alpha;
1425 ups->flag = ts->sculpt_paint_settings;
1426 }
1427 }
1428 }
1429
1430 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 261, 3)) {
1431 {
1432 /* convert extended ascii to utf-8 for text editor */
1434 LISTBASE_FOREACH (Text *, text, &bmain->texts) {
1435 if (!(text->flags & TXT_ISEXT)) {
1436 LISTBASE_FOREACH (TextLine *, tl, &text->lines) {
1437 int added = txt_extended_ascii_as_utf8(&tl->line);
1438 tl->len += added;
1439
1440 /* reset cursor position if line was changed */
1441 if (added && tl == text->curl) {
1442 text->curc = 0;
1443 }
1444 }
1445 }
1446 }
1447 }
1448 {
1449 /* set new dynamic paint values */
1450 LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
1451 LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
1452 if (md->type == eModifierType_DynamicPaint) {
1454 if (pmd->canvas) {
1455 DynamicPaintSurface *surface = static_cast<DynamicPaintSurface *>(
1456 pmd->canvas->surfaces.first);
1457 for (; surface; surface = static_cast<DynamicPaintSurface *>(surface->next)) {
1458 surface->color_dry_threshold = 1.0f;
1459 surface->influence_scale = 1.0f;
1460 surface->radius_scale = 1.0f;
1461 surface->flags |= MOD_DPAINT_USE_DRYING;
1462 }
1463 }
1464 }
1465 }
1466 }
1467 }
1468 }
1469
1470 if (bmain->versionfile < 262) {
1471 LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
1472 LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
1473 if (md->type == eModifierType_Cloth) {
1475 if (clmd->sim_parms) {
1476 clmd->sim_parms->vel_damping = 1.0f;
1477 }
1478 }
1479 }
1480 }
1481 }
1482
1483 if (bmain->versionfile < 263) {
1484 /* set fluidsim rate. the version patch for this in 2.62 was wrong, so
1485 * try to correct it, if rate is 0.0 that's likely not intentional */
1486 LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
1487 LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
1488 if (md->type == eModifierType_Fluidsim) {
1490 if (fmd->fss->animRate == 0.0f) {
1491 fmd->fss->animRate = 1.0f;
1492 }
1493 }
1494 }
1495 }
1496 }
1497
1498 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 262, 1)) {
1499 /* update use flags for node sockets (was only temporary before) */
1500 LISTBASE_FOREACH (Scene *, sce, &bmain->scenes) {
1501 if (sce->nodetree) {
1503 }
1504 }
1505
1506 /* XXX can't associate with scene for group nodes, image format will stay uninitialized */
1507 LISTBASE_FOREACH (bNodeTree *, ntree, &bmain->nodetrees) {
1509 }
1510 }
1511
1512 /* only swap for pre-release bmesh merge which had MLoopCol red/blue swap */
1513 if (bmain->versionfile == 262 && bmain->subversionfile == 1) {
1514 {
1515 LISTBASE_FOREACH (Mesh *, me, &bmain->meshes) {
1517 }
1518 }
1519 }
1520
1521 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 262, 2)) {
1522 /* Set new idname of keyingsets from their now "label-only" name. */
1523 LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
1524 LISTBASE_FOREACH (KeyingSet *, ks, &scene->keyingsets) {
1525 if (!ks->idname[0]) {
1526 STRNCPY(ks->idname, ks->name);
1527 }
1528 }
1529 }
1530 }
1531
1532 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 262, 3)) {
1533 LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
1534 LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
1535 if (md->type == eModifierType_Lattice) {
1537 lmd->strength = 1.0f;
1538 }
1539 }
1540 }
1541 }
1542
1543 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 262, 4)) {
1544 /* Read Viscosity presets from older files */
1545 LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
1546 LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
1547 if (md->type == eModifierType_Fluidsim) {
1549 if (fmd->fss->viscosityMode == 3) {
1550 fmd->fss->viscosityValue = 5.0;
1551 fmd->fss->viscosityExponent = 5;
1552 }
1553 else if (fmd->fss->viscosityMode == 4) {
1554 fmd->fss->viscosityValue = 2.0;
1555 fmd->fss->viscosityExponent = 3;
1556 }
1557 }
1558 }
1559 }
1560 }
1561
1562 if (bmain->versionfile < 263) {
1563 /* Default for old files is to save particle rotations to pointcache */
1564 LISTBASE_FOREACH (ParticleSettings *, part, &bmain->particles) {
1565 part->flag |= PART_ROTATIONS;
1566 }
1567 }
1568
1569 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 263, 1)) {
1570 /* file output node paths are now stored in the file info struct instead socket name */
1571 LISTBASE_FOREACH (Scene *, sce, &bmain->scenes) {
1572 if (sce->nodetree) {
1574 }
1575 }
1576 LISTBASE_FOREACH (bNodeTree *, ntree, &bmain->nodetrees) {
1578 }
1579 }
1580
1581 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 263, 3)) {
1582 /* For weight paint, each brush now gets its own weight;
1583 * unified paint settings also have weight. Update unified
1584 * paint settings and brushes with a default weight value. */
1585 LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
1586 ToolSettings *ts = scene->toolsettings;
1587 if (ts) {
1590 }
1591 }
1592
1593 LISTBASE_FOREACH (Brush *, brush, &bmain->brushes) {
1594 brush->weight = 0.5;
1595 }
1596 }
1597
1598 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 263, 2)) {
1599 LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) {
1600 LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
1601 LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
1602 if (sl->spacetype == SPACE_CLIP) {
1603 SpaceClip *sclip = (SpaceClip *)sl;
1604 bool hide = false;
1605
1606 LISTBASE_FOREACH (ARegion *, region, &area->regionbase) {
1607 if (region->regiontype == RGN_TYPE_PREVIEW) {
1608 if (region->alignment != RGN_ALIGN_NONE) {
1609 region->flag |= RGN_FLAG_HIDDEN;
1610 region->v2d.flag &= ~V2D_IS_INIT;
1611 region->alignment = RGN_ALIGN_NONE;
1612
1613 hide = true;
1614 }
1615 }
1616 }
1617
1618 if (hide) {
1619 sclip->view = SC_VIEW_CLIP;
1620 }
1621 }
1622 }
1623 }
1624 }
1625 }
1626
1627 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 263, 4)) {
1628 LISTBASE_FOREACH (Camera *, cam, &bmain->cameras) {
1629 if (cam->flag & CAM_PANORAMA) {
1630 cam->type = CAM_PANO;
1631 cam->flag &= ~CAM_PANORAMA;
1632 }
1633 }
1634
1635 LISTBASE_FOREACH (Curve *, cu, &bmain->curves) {
1636 if (cu->bevfac2 == 0.0f) {
1637 cu->bevfac1 = 0.0f;
1638 cu->bevfac2 = 1.0f;
1639 }
1640 }
1641 }
1642
1643 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 263, 5)) {
1644 {
1645 /* file output node paths are now stored in the file info struct instead socket name */
1646 LISTBASE_FOREACH (Scene *, sce, &bmain->scenes) {
1647 if (sce->nodetree) {
1650 }
1651 }
1652 LISTBASE_FOREACH (bNodeTree *, ntree, &bmain->nodetrees) {
1655 }
1656 }
1657 }
1658
1659 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 263, 6)) {
1660 /* update use flags for node sockets (was only temporary before) */
1661 LISTBASE_FOREACH (Scene *, sce, &bmain->scenes) {
1662 if (sce->nodetree) {
1663 do_versions_nodetree_frame_2_64_6(sce->nodetree);
1664 }
1665 }
1666
1667 LISTBASE_FOREACH (Material *, mat, &bmain->materials) {
1668 if (mat->nodetree) {
1669 do_versions_nodetree_frame_2_64_6(mat->nodetree);
1670 }
1671 }
1672
1673 LISTBASE_FOREACH (Tex *, tex, &bmain->textures) {
1674 if (tex->nodetree) {
1675 do_versions_nodetree_frame_2_64_6(tex->nodetree);
1676 }
1677 }
1678
1679 LISTBASE_FOREACH (Light *, la, &bmain->lights) {
1680 if (la->nodetree) {
1682 }
1683 }
1684
1685 LISTBASE_FOREACH (World *, world, &bmain->worlds) {
1686 if (world->nodetree) {
1688 }
1689 }
1690
1691 LISTBASE_FOREACH (bNodeTree *, ntree, &bmain->nodetrees) {
1693 }
1694 }
1695
1696 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 263, 7)) {
1697 LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
1698 LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
1699 if (md->type == eModifierType_Fluid) {
1701 if ((fmd->type & MOD_FLUID_TYPE_DOMAIN) && fmd->domain) {
1702 int maxres = max_iii(fmd->domain->res[0], fmd->domain->res[1], fmd->domain->res[2]);
1703 fmd->domain->scale = fmd->domain->dx * maxres;
1704 fmd->domain->dx = 1.0f / fmd->domain->scale;
1705 }
1706 }
1707 }
1708 }
1709 }
1710
1711 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 263, 9)) {
1712 FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
1713 if (ntree->type == NTREE_SHADER) {
1714 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
1716 NodeTexImage *tex = static_cast<NodeTexImage *>(node->storage);
1717
1718 tex->iuser.frames = 1;
1719 tex->iuser.sfra = 1;
1720 }
1721 }
1722 }
1723 }
1725 }
1726
1727 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 263, 10)) {
1728 {
1729 /* composite redesign */
1730 FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
1731 if (ntree->type == NTREE_COMPOSIT) {
1732 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
1733 if (node->type == CMP_NODE_DEFOCUS) {
1734 NodeDefocus *data = static_cast<NodeDefocus *>(node->storage);
1735 if (data->maxblur == 0.0f) {
1736 data->maxblur = 16.0f;
1737 }
1738 }
1739 }
1740 }
1741 }
1743 }
1744
1745 {
1747 LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) {
1748 LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
1749 LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
1750 if (sl->spacetype == SPACE_CLIP) {
1751 SpaceClip *sclip = (SpaceClip *)sl;
1752
1753 if (sclip->around == 0) {
1755 }
1756 }
1757 }
1758 }
1759 }
1760 }
1761
1762 {
1763 LISTBASE_FOREACH (MovieClip *, clip, &bmain->movieclips) {
1764 clip->start_frame = 1;
1765 }
1766 }
1767 }
1768
1769 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 263, 11)) {
1770 LISTBASE_FOREACH (MovieClip *, clip, &bmain->movieclips) {
1771 MovieTrackingTrack *track = static_cast<MovieTrackingTrack *>(
1772 clip->tracking.tracks_legacy.first);
1773 while (track) {
1775
1776 track = static_cast<MovieTrackingTrack *>(track->next);
1777 }
1778 }
1779 }
1780
1781 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 263, 13)) {
1782 FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
1783 if (ntree->type == NTREE_COMPOSIT) {
1784 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
1785 if (node->type == CMP_NODE_DILATEERODE) {
1786 if (node->storage == nullptr) {
1787 NodeDilateErode *data = MEM_cnew<NodeDilateErode>(__func__);
1788 data->falloff = PROP_SMOOTH;
1789 node->storage = data;
1790 }
1791 }
1792 }
1793 }
1794 }
1796 }
1797
1798 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 263, 14)) {
1799 FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
1800 if (ntree->type == NTREE_COMPOSIT) {
1801 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
1802 if (node->type == CMP_NODE_KEYING) {
1803 NodeKeyingData *data = static_cast<NodeKeyingData *>(node->storage);
1804
1805 if (data->despill_balance == 0.0f) {
1806 data->despill_balance = 0.5f;
1807 }
1808 }
1809 }
1810 }
1811 }
1813
1814 /* Keep compatibility for dupli-object particle size. */
1815 LISTBASE_FOREACH (ParticleSettings *, part, &bmain->particles) {
1816 if (ELEM(part->ren_as, PART_DRAW_OB, PART_DRAW_GR)) {
1817 if ((part->draw & PART_DRAW_ROTATE_OB) == 0) {
1818 part->draw |= PART_DRAW_NO_SCALE_OB;
1819 }
1820 }
1821 }
1822 }
1823
1824 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 263, 17)) {
1825 FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
1826 if (ntree->type == NTREE_COMPOSIT) {
1827 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
1828 if (node->type == CMP_NODE_MASK) {
1829 if (node->storage == nullptr) {
1830 NodeMask *data = MEM_cnew<NodeMask>(__func__);
1831 /* move settings into own struct */
1832 data->size_x = int(node->custom3);
1833 data->size_y = int(node->custom4);
1834 node->custom3 = 0.5f; /* default shutter */
1835 node->storage = data;
1836 }
1837 }
1838 }
1839 }
1840 }
1842 }
1843
1844 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 263, 18)) {
1845 LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
1846 if (scene->ed) {
1847 SEQ_for_each_callback(&scene->ed->seqbase, seq_colorbalance_update_cb, nullptr);
1848 }
1849 }
1850 }
1851
1852 /* color management pipeline changes compatibility code */
1853 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 263, 19)) {
1854 bool colormanagement_disabled = false;
1855
1856 /* make scenes which are not using color management have got None as display device,
1857 * so they wouldn't perform linear-to-sRGB conversion on display
1858 */
1859 LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
1860 if ((scene->r.color_mgt_flag & R_COLOR_MANAGEMENT) == 0) {
1861 ColorManagedDisplaySettings *display_settings = &scene->display_settings;
1862
1863 if (display_settings->display_device[0] == 0) {
1865 }
1866
1867 colormanagement_disabled = true;
1868 }
1869 }
1870
1871 LISTBASE_FOREACH (Image *, ima, &bmain->images) {
1872 if (ima->source == IMA_SRC_VIEWER) {
1873 ima->flag |= IMA_VIEW_AS_RENDER;
1874 }
1875 else if (colormanagement_disabled) {
1876 /* if color-management not used, set image's color space to raw, so no sRGB->linear
1877 * conversion would happen on display and render there's no clear way to check whether
1878 * color management is enabled or not in render engine so set all images to raw if there's
1879 * at least one scene with color management disabled this would still behave incorrect in
1880 * cases when color management was used for only some of scenes, but such a setup is
1881 * crazy anyway and think it's fair enough to break compatibility in that cases.
1882 */
1883
1884 STRNCPY(ima->colorspace_settings.name, "Raw");
1885 }
1886 }
1887 }
1888
1889 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 263, 20)) {
1890 LISTBASE_FOREACH (Key *, key, &bmain->shapekeys) {
1892 }
1893 }
1894
1895 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 263, 21)) {
1896 {
1897 LISTBASE_FOREACH (Mesh *, me, &bmain->meshes) {
1898 CustomData_update_typemap(&me->vert_data);
1899 CustomData_free_layers(&me->vert_data, CD_MSTICKY, me->verts_num);
1900 }
1901 }
1902 }
1903
1904 /* correction for files saved in blender version when BKE_pose_copy_data
1905 * didn't copy animation visualization, which lead to deadlocks on motion
1906 * path calculation for proxied armatures, see #32742.
1907 */
1908 if (bmain->versionfile < 264) {
1909 LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
1910 if (ob->pose) {
1911 if (ob->pose->avs.path_step == 0) {
1912 animviz_settings_init(&ob->pose->avs);
1913 }
1914 }
1915 }
1916 }
1917
1918 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 264, 1)) {
1919 FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
1920 if (ntree->type == NTREE_SHADER) {
1921 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
1922 if (node->type == SH_NODE_TEX_COORD) {
1923 node->flag |= NODE_OPTIONS;
1924 }
1925 }
1926 }
1927 }
1929 }
1930
1931 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 264, 2)) {
1932 LISTBASE_FOREACH (MovieClip *, clip, &bmain->movieclips) {
1933 MovieTracking *tracking = &clip->tracking;
1934 LISTBASE_FOREACH (MovieTrackingObject *, tracking_object, &tracking->objects) {
1935 if (tracking_object->keyframe1 == 0 && tracking_object->keyframe2 == 0) {
1936 tracking_object->keyframe1 = tracking->settings.keyframe1_legacy;
1937 tracking_object->keyframe2 = tracking->settings.keyframe2_legacy;
1938 }
1939 }
1940 }
1941 }
1942
1943 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 264, 3)) {
1944 /* smoke branch */
1945 {
1947 LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
1948 LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
1949 if (md->type == eModifierType_Fluid) {
1951 if ((fmd->type & MOD_FLUID_TYPE_DOMAIN) && fmd->domain) {
1952 /* keep branch saves if possible */
1953 if (!fmd->domain->flame_max_temp) {
1954 fmd->domain->burning_rate = 0.75f;
1955 fmd->domain->flame_smoke = 1.0f;
1956 fmd->domain->flame_vorticity = 0.5f;
1957 fmd->domain->flame_ignition = 1.25f;
1958 fmd->domain->flame_max_temp = 1.75f;
1959 fmd->domain->adapt_threshold = 0.02f;
1960 fmd->domain->adapt_margin = 4;
1961 fmd->domain->flame_smoke_color[0] = 0.7f;
1962 fmd->domain->flame_smoke_color[1] = 0.7f;
1963 fmd->domain->flame_smoke_color[2] = 0.7f;
1964 }
1965 }
1966 else if ((fmd->type & MOD_FLUID_TYPE_FLOW) && fmd->flow) {
1967 if (!fmd->flow->texture_size) {
1968 fmd->flow->fuel_amount = 1.0;
1969 fmd->flow->surface_distance = 1.5;
1970 fmd->flow->color[0] = 0.7f;
1971 fmd->flow->color[1] = 0.7f;
1972 fmd->flow->color[2] = 0.7f;
1973 fmd->flow->texture_size = 1.0f;
1974 }
1975 }
1976 }
1977 }
1978 }
1979 }
1980
1981 /* render border for viewport */
1982 {
1983 LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) {
1984 LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
1985 LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
1986 if (sl->spacetype == SPACE_VIEW3D) {
1987 View3D *v3d = (View3D *)sl;
1988 if (v3d->render_border.xmin == 0.0f && v3d->render_border.ymin == 0.0f &&
1989 v3d->render_border.xmax == 0.0f && v3d->render_border.ymax == 0.0f)
1990 {
1991 v3d->render_border.xmax = 1.0f;
1992 v3d->render_border.ymax = 1.0f;
1993 }
1994 }
1995 }
1996 }
1997 }
1998 }
1999 }
2000
2001 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 264, 5)) {
2002 /* set a unwrapping margin and ABF by default */
2003 LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
2004 if (scene->toolsettings->uvcalc_margin == 0.0f) {
2005 scene->toolsettings->uvcalc_margin = 0.001f;
2006 scene->toolsettings->unwrapper = UVCALC_UNWRAP_METHOD_ANGLE;
2007 }
2008 }
2009 }
2010
2011 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 264, 7)) {
2012 /* convert tiles size from resolution and number of tiles */
2013 {
2015 LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
2016 if (scene->r.tilex == 0 || scene->r.tiley == 1) {
2017 scene->r.tilex = scene->r.tiley = 64;
2018 }
2019 }
2020 }
2021
2022 /* collision masks */
2023 {
2024 LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
2025 if (ob->col_group == 0) {
2026 ob->col_group = 0x01;
2027 ob->col_mask = 0xff;
2028 }
2029 }
2030 }
2031 }
2032
2033 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 264, 7)) {
2034 LISTBASE_FOREACH (MovieClip *, clip, &bmain->movieclips) {
2035 LISTBASE_FOREACH (MovieTrackingTrack *, track, &clip->tracking.tracks_legacy) {
2037 }
2038
2039 LISTBASE_FOREACH (MovieTrackingObject *, tracking_object, &clip->tracking.objects) {
2040 LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
2042 }
2043 }
2044 }
2045 }
2046
2047 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 265, 3)) {
2048 LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) {
2049 LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2050 LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2051 switch (sl->spacetype) {
2052 case SPACE_VIEW3D: {
2053 View3D *v3d = (View3D *)sl;
2054 v3d->flag2 |= V3D_SHOW_ANNOTATION;
2055 break;
2056 }
2057 case SPACE_SEQ: {
2058 SpaceSeq *sseq = (SpaceSeq *)sl;
2060 break;
2061 }
2062 case SPACE_IMAGE: {
2063 SpaceImage *sima = (SpaceImage *)sl;
2064 sima->flag |= SI_SHOW_GPENCIL;
2065 break;
2066 }
2067 case SPACE_NODE: {
2068 SpaceNode *snode = (SpaceNode *)sl;
2069 snode->flag |= SNODE_SHOW_GPENCIL;
2070 break;
2071 }
2072 case SPACE_CLIP: {
2073 SpaceClip *sclip = (SpaceClip *)sl;
2074 sclip->flag |= SC_SHOW_ANNOTATION;
2075 break;
2076 }
2077 }
2078 }
2079 }
2080 }
2081 }
2082
2083 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 265, 5)) {
2084 LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
2085 if (scene->ed) {
2086 SEQ_for_each_callback(&scene->ed->seqbase, seq_set_alpha_mode_cb, nullptr);
2087 }
2088
2089 if (scene->r.bake_samples == 0) {
2090 scene->r.bake_samples = 256;
2091 }
2092 }
2093
2094 LISTBASE_FOREACH (Image *, image, &bmain->images) {
2095 if (image->flag & IMA_DO_PREMUL) {
2096 image->alpha_mode = IMA_ALPHA_STRAIGHT;
2097 }
2098 else {
2100 }
2101 }
2102
2103 LISTBASE_FOREACH (Tex *, tex, &bmain->textures) {
2104 if (tex->type == TEX_IMAGE && (tex->imaflag & TEX_USEALPHA) == 0) {
2105 Image *image = static_cast<Image *>(
2106 blo_do_versions_newlibadr(fd, &tex->id, ID_IS_LINKED(tex), tex->ima));
2107
2108 if (image && (image->flag & IMA_DO_PREMUL) == 0) {
2109 enum { IMA_IGNORE_ALPHA = (1 << 12) };
2110 image->flag |= IMA_IGNORE_ALPHA;
2111 }
2112 }
2113 }
2114
2115 FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
2116 if (ntree->type == NTREE_COMPOSIT) {
2117 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
2118 if (node->type == CMP_NODE_IMAGE) {
2119 Image *image = static_cast<Image *>(
2120 blo_do_versions_newlibadr(fd, &ntree->id, ID_IS_LINKED(ntree), node->id));
2121
2122 if (image) {
2123 if ((image->flag & IMA_DO_PREMUL) == 0 && image->alpha_mode == IMA_ALPHA_STRAIGHT) {
2124 node->custom1 |= CMP_NODE_IMAGE_USE_STRAIGHT_OUTPUT;
2125 }
2126 }
2127 }
2128 }
2129 }
2130 }
2132 }
2133 else if (!MAIN_VERSION_FILE_ATLEAST(bmain, 266, 1)) {
2134 /* texture use alpha was removed for 2.66 but added back again for 2.66a,
2135 * for compatibility all textures assumed it to be enabled */
2136 LISTBASE_FOREACH (Tex *, tex, &bmain->textures) {
2137 if (tex->type == TEX_IMAGE) {
2138 tex->imaflag |= TEX_USEALPHA;
2139 }
2140 }
2141 }
2142
2143 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 265, 7)) {
2144 LISTBASE_FOREACH (Curve *, cu, &bmain->curves) {
2145 if (cu->flag & (CU_FRONT | CU_BACK)) {
2146 if (cu->extrude != 0.0f || cu->bevel_radius != 0.0f) {
2147 LISTBASE_FOREACH (Nurb *, nu, &cu->nurb) {
2148 int a;
2149
2150 if (nu->bezt) {
2151 BezTriple *bezt = nu->bezt;
2152 a = nu->pntsu;
2153
2154 while (a--) {
2155 bezt->radius = 1.0f;
2156 bezt++;
2157 }
2158 }
2159 else if (nu->bp) {
2160 BPoint *bp = nu->bp;
2161 a = nu->pntsu * nu->pntsv;
2162
2163 while (a--) {
2164 bp->radius = 1.0f;
2165 bp++;
2166 }
2167 }
2168 }
2169 }
2170 }
2171 }
2172 }
2173
2174 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 265, 9)) {
2175 LISTBASE_FOREACH (Mesh *, me, &bmain->meshes) {
2177 }
2178 }
2179
2180 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 265, 10)) {
2181 LISTBASE_FOREACH (Brush *, br, &bmain->brushes) {
2182 if (br->ob_mode & OB_MODE_TEXTURE_PAINT) {
2183 br->mtex.brush_map_mode = MTEX_MAP_MODE_TILED;
2184 }
2185 }
2186 }
2187
2188 /* add storage for compositor translate nodes when not existing */
2189 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 265, 11)) {
2190 FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
2191 if (ntree->type == NTREE_COMPOSIT) {
2192 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
2193 if (node->type == CMP_NODE_TRANSLATE && node->storage == nullptr) {
2194 node->storage = MEM_cnew<NodeTranslateData>("node translate data");
2195 }
2196 }
2197 }
2198 }
2200 }
2201
2202 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 266, 2)) {
2203 FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
2204 do_versions_nodetree_customnodes(ntree, ((ID *)ntree == id));
2205 }
2207 }
2208
2209 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 266, 2)) {
2210 LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) {
2211 LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2212 LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2213 if (sl->spacetype == SPACE_NODE) {
2214 SpaceNode *snode = (SpaceNode *)sl;
2215
2216 /* reset pointers to force tree path update from context */
2217 snode->nodetree = nullptr;
2218 snode->edittree = nullptr;
2219 snode->id = nullptr;
2220 snode->from = nullptr;
2221
2222 /* convert deprecated treetype setting to tree_idname */
2223 switch (snode->treetype) {
2224 case NTREE_COMPOSIT:
2225 STRNCPY(snode->tree_idname, "CompositorNodeTree");
2226 break;
2227 case NTREE_SHADER:
2228 STRNCPY(snode->tree_idname, "ShaderNodeTree");
2229 break;
2230 case NTREE_TEXTURE:
2231 STRNCPY(snode->tree_idname, "TextureNodeTree");
2232 break;
2233 }
2234 }
2235 }
2236 }
2237 }
2238 }
2239
2240 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 266, 3)) {
2241 {
2242 /* Fix for a very old issue:
2243 * Node names were nominally made unique in r24478 (2.50.8), but the do_versions check
2244 * to update existing node names only applied to `bmain->nodetree` (i.e. group nodes).
2245 * Uniqueness is now required for proper preview mapping,
2246 * so do this now to ensure old files don't break.
2247 */
2248 FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
2249 if (id == &ntree->id) {
2250 continue; /* already fixed for node groups */
2251 }
2252
2253 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
2254 blender::bke::node_unique_name(ntree, node);
2255 }
2256 }
2258 }
2259
2260 /* Convert the previously used ntree->inputs/ntree->outputs lists to interface nodes.
2261 * Pre 2.56.2 node trees automatically have all unlinked sockets exposed already,
2262 * see do_versions_after_linking_250.
2263 *
2264 * This assumes valid typeinfo pointers, as set in lib_link_ntree.
2265 *
2266 * NOTE: theoretically only needed in node groups (main->nodetree),
2267 * but due to a temporary bug such links could have been added in all trees,
2268 * so have to clean up all of them ...
2269 *
2270 * NOTE: this always runs, without it links with nullptr fromnode and tonode remain
2271 * which causes problems.
2272 */
2273 FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
2274 bNode *input_node = nullptr, *output_node = nullptr;
2275 int num_inputs = 0, num_outputs = 0;
2276 bNodeLink *link, *next_link;
2277 /* Only create new interface nodes for actual older files.
2278 * New file versions already have input/output nodes with duplicate links,
2279 * in that case just remove the invalid links.
2280 */
2281 const bool create_io_nodes = MAIN_VERSION_FILE_OLDER(bmain, 266, 2);
2282
2283 float input_locx = 1000000.0f, input_locy = 0.0f;
2284 float output_locx = -1000000.0f, output_locy = 0.0f;
2285 /* Rough guess, not nice but we don't have access to UI constants here. */
2286 const float offsetx = 42 + 3 * 20 + 20;
2287 // const float offsety = 0.0f;
2288
2289 if (create_io_nodes) {
2290 if (ntree->inputs_legacy.first) {
2292 }
2293
2294 if (ntree->outputs_legacy.first) {
2296 }
2297 }
2298
2299 /* Redirect links from/to the node tree interface to input/output node.
2300 * If the fromnode/tonode pointers are nullptr, this means a link from/to
2301 * the ntree interface sockets, which need to be redirected to new interface nodes.
2302 */
2303 for (link = static_cast<bNodeLink *>(ntree->links.first); link != nullptr; link = next_link)
2304 {
2305 bool free_link = false;
2306 next_link = link->next;
2307
2308 if (link->fromnode == nullptr) {
2309 if (input_node) {
2310 link->fromnode = input_node;
2311 link->fromsock = node_group_input_find_socket(input_node, link->fromsock->identifier);
2312 BLI_assert(link->fromsock != nullptr);
2313 num_inputs++;
2314
2315 if (link->tonode) {
2316 if (input_locx > link->tonode->locx - offsetx) {
2317 input_locx = link->tonode->locx - offsetx;
2318 }
2319 input_locy += link->tonode->locy;
2320 }
2321 }
2322 else {
2323 free_link = true;
2324 }
2325 }
2326
2327 if (link->tonode == nullptr) {
2328 if (output_node) {
2329 link->tonode = output_node;
2330 link->tosock = node_group_output_find_socket(output_node, link->tosock->identifier);
2331 BLI_assert(link->tosock != nullptr);
2332 num_outputs++;
2333
2334 if (link->fromnode) {
2335 if (output_locx < link->fromnode->locx + offsetx) {
2336 output_locx = link->fromnode->locx + offsetx;
2337 }
2338 output_locy += link->fromnode->locy;
2339 }
2340 }
2341 else {
2342 free_link = true;
2343 }
2344 }
2345
2346 if (free_link) {
2347 blender::bke::node_remove_link(ntree, link);
2348 }
2349 }
2350
2351 if (num_inputs > 0) {
2352 input_locy /= num_inputs;
2353 input_node->locx = input_locx;
2354 input_node->locy = input_locy;
2355 }
2356 if (num_outputs > 0) {
2357 output_locy /= num_outputs;
2358 output_node->locx = output_locx;
2359 output_node->locy = output_locy;
2360 }
2361 }
2363 }
2364
2365 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 280, 60)) {
2366 /* From this point we no longer write incomplete links for forward
2367 * compatibility with 2.66, we have to clean them up for all previous
2368 * versions. */
2369 FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
2370 bNodeLink *link, *next_link;
2371
2372 for (link = static_cast<bNodeLink *>(ntree->links.first); link != nullptr; link = next_link)
2373 {
2374 next_link = link->next;
2375 if (link->fromnode == nullptr || link->tonode == nullptr) {
2376 blender::bke::node_remove_link(ntree, link);
2377 }
2378 }
2379 }
2381 }
2382
2383 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 266, 4)) {
2384 LISTBASE_FOREACH (Brush *, brush, &bmain->brushes) {
2385 BKE_texture_mtex_default(&brush->mask_mtex);
2386
2387 if (brush->ob_mode & OB_MODE_TEXTURE_PAINT) {
2388 brush->spacing /= 2;
2389 }
2390 }
2391 }
2392
2393 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 266, 6)) {
2394#define BRUSH_TEXTURE_OVERLAY (1 << 21)
2395
2396 LISTBASE_FOREACH (Brush *, brush, &bmain->brushes) {
2397 brush->overlay_flags = 0;
2398 if (brush->flag & BRUSH_TEXTURE_OVERLAY) {
2399 brush->overlay_flags |= (BRUSH_OVERLAY_PRIMARY | BRUSH_OVERLAY_CURSOR);
2400 }
2401 }
2402#undef BRUSH_TEXTURE_OVERLAY
2403 }
2404
2405 if (bmain->versionfile < 267) {
2406 // if (!DNA_struct_member_exists(fd->filesdna, "Brush", "int", "stencil_pos")) {
2407 LISTBASE_FOREACH (Brush *, brush, &bmain->brushes) {
2408 if (brush->stencil_dimension[0] == 0) {
2409 brush->stencil_dimension[0] = 256;
2410 brush->stencil_dimension[1] = 256;
2411 brush->stencil_pos[0] = 256;
2412 brush->stencil_pos[1] = 256;
2413 }
2414 if (brush->mask_stencil_dimension[0] == 0) {
2415 brush->mask_stencil_dimension[0] = 256;
2416 brush->mask_stencil_dimension[1] = 256;
2417 brush->mask_stencil_pos[0] = 256;
2418 brush->mask_stencil_pos[1] = 256;
2419 }
2420 }
2421
2432 }
2433
2434 /* default values in Freestyle settings */
2435 if (bmain->versionfile < 267) {
2436 LISTBASE_FOREACH (Scene *, sce, &bmain->scenes) {
2437 if (sce->r.line_thickness_mode == 0) {
2438 sce->r.line_thickness_mode = R_LINE_THICKNESS_ABSOLUTE;
2439 sce->r.unit_line_thickness = 1.0f;
2440 }
2441 LISTBASE_FOREACH (SceneRenderLayer *, srl, &sce->r.layers) {
2442 if (srl->freestyleConfig.mode == 0) {
2443 srl->freestyleConfig.mode = FREESTYLE_CONTROL_EDITOR_MODE;
2444 }
2445 if (ELEM(srl->freestyleConfig.raycasting_algorithm,
2448 {
2449 srl->freestyleConfig.raycasting_algorithm = 0; /* deprecated */
2450 srl->freestyleConfig.flags |= FREESTYLE_CULLING;
2451 }
2452 }
2453
2454 /* not freestyle */
2455 {
2456 MeshStatVis *statvis = &sce->toolsettings->statvis;
2457 if (statvis->thickness_samples == 0) {
2458 statvis->overhang_axis = OB_NEGZ;
2459 statvis->overhang_min = 0;
2460 statvis->overhang_max = DEG2RADF(45.0f);
2461
2462 statvis->thickness_max = 0.1f;
2463 statvis->thickness_samples = 1;
2464
2465 statvis->distort_min = DEG2RADF(5.0f);
2466 statvis->distort_max = DEG2RADF(45.0f);
2467
2468 statvis->sharp_min = DEG2RADF(90.0f);
2469 statvis->sharp_max = DEG2RADF(180.0f);
2470 }
2471 }
2472 }
2473 LISTBASE_FOREACH (FreestyleLineStyle *, linestyle, &bmain->linestyles) {
2474#if 1
2475 /* disable the Misc panel for now */
2476 if (linestyle->panel == LS_PANEL_MISC) {
2477 linestyle->panel = LS_PANEL_STROKES;
2478 }
2479#endif
2480 if (linestyle->thickness_position == 0) {
2481 linestyle->thickness_position = LS_THICKNESS_CENTER;
2482 linestyle->thickness_ratio = 0.5f;
2483 }
2484 if (linestyle->chaining == 0) {
2485 linestyle->chaining = LS_CHAINING_PLAIN;
2486 }
2487 if (linestyle->rounds == 0) {
2488 linestyle->rounds = 3;
2489 }
2490 }
2491 }
2492
2493 if (bmain->versionfile < 267) {
2494 /* Initialize the active_viewer_key for compositing */
2495 bNodeInstanceKey active_viewer_key = {0};
2496 /* simply pick the first node space and use that for the active viewer key */
2497 LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) {
2498 LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2499 LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2500 if (sl->spacetype == SPACE_NODE) {
2501 SpaceNode *snode = (SpaceNode *)sl;
2502 bNodeTreePath *path = static_cast<bNodeTreePath *>(snode->treepath.last);
2503 if (!path) {
2504 continue;
2505 }
2506
2507 active_viewer_key = path->parent_key;
2508 break;
2509 }
2510 }
2511 if (active_viewer_key.value != 0) {
2512 break;
2513 }
2514 }
2515 if (active_viewer_key.value != 0) {
2516 break;
2517 }
2518 }
2519
2520 LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
2521 /* NOTE: `scene->nodetree` is a local ID block, has been direct_link'ed. */
2522 if (scene->nodetree) {
2523 scene->nodetree->active_viewer_key = active_viewer_key;
2524 }
2525 }
2526 }
2527
2528 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 267, 1)) {
2529 LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
2530 LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
2531 if (md->type == eModifierType_Fluid) {
2533 if ((fmd->type & MOD_FLUID_TYPE_DOMAIN) && fmd->domain) {
2534 if (fmd->domain->flags & FLUID_DOMAIN_USE_HIGH_SMOOTH) {
2536 }
2537 else {
2539 }
2540 }
2541 }
2542 }
2543 }
2544 }
2545
2546 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 268, 1)) {
2547 LISTBASE_FOREACH (Brush *, brush, &bmain->brushes) {
2548 brush->spacing = std::max(1, brush->spacing);
2549 }
2550 }
2551
2552 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 268, 2)) {
2553#define BRUSH_FIXED (1 << 6)
2554 LISTBASE_FOREACH (Brush *, brush, &bmain->brushes) {
2555 brush->flag &= ~BRUSH_FIXED;
2556
2557 if (brush->cursor_overlay_alpha < 2) {
2558 brush->cursor_overlay_alpha = 33;
2559 }
2560 if (brush->texture_overlay_alpha < 2) {
2561 brush->texture_overlay_alpha = 33;
2562 }
2563 if (brush->mask_overlay_alpha < 2) {
2564 brush->mask_overlay_alpha = 33;
2565 }
2566 }
2567#undef BRUSH_FIXED
2568 }
2569
2570 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 268, 4)) {
2571 LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
2572 LISTBASE_FOREACH (bConstraint *, con, &ob->constraints) {
2573 if (con->type == CONSTRAINT_TYPE_SHRINKWRAP) {
2574 bShrinkwrapConstraint *data = static_cast<bShrinkwrapConstraint *>(con->data);
2575 if (data->projAxis & MOD_SHRINKWRAP_PROJECT_OVER_X_AXIS) {
2576 data->projAxis = OB_POSX;
2577 }
2578 else if (data->projAxis & MOD_SHRINKWRAP_PROJECT_OVER_Y_AXIS) {
2579 data->projAxis = OB_POSY;
2580 }
2581 else {
2582 data->projAxis = OB_POSZ;
2583 }
2584 data->projAxisSpace = CONSTRAINT_SPACE_LOCAL;
2585 }
2586 }
2587 }
2588
2589 LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
2590 LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
2591 if (md->type == eModifierType_Fluid) {
2593 if ((fmd->type & MOD_FLUID_TYPE_FLOW) && fmd->flow) {
2594 if (!fmd->flow->particle_size) {
2595 fmd->flow->particle_size = 1.0f;
2596 }
2597 }
2598 }
2599 }
2600 }
2601
2602 /*
2603 * FIX some files have a zoom level of 0, and was checked during the drawing of the node space
2604 *
2605 * We moved this check to the do versions to be sure the value makes any sense.
2606 */
2607 LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) {
2608 LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2609 LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2610 if (sl->spacetype == SPACE_NODE) {
2611 SpaceNode *snode = (SpaceNode *)sl;
2612 if (snode->zoom < 0.02f) {
2613 snode->zoom = 1.0;
2614 }
2615 }
2616 }
2617 }
2618 }
2619 }
2620
2621 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 268, 5)) {
2622 /* add missing (+) expander in node editor */
2623 LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) {
2624 LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2625 if (area->spacetype == SPACE_NODE) {
2627
2628 if (region) {
2629 continue;
2630 }
2631
2632 /* add subdiv level; after header */
2634
2635 /* is error! */
2636 if (region == nullptr) {
2637 continue;
2638 }
2639
2640 ARegion *arnew = MEM_cnew<ARegion>("node tools");
2641
2642 BLI_insertlinkafter(&area->regionbase, region, arnew);
2643 arnew->regiontype = RGN_TYPE_TOOLS;
2644 arnew->alignment = RGN_ALIGN_LEFT;
2645
2646 arnew->flag = RGN_FLAG_HIDDEN;
2647 }
2648 }
2649 }
2650 }
2651
2652 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 269, 1)) {
2653 /* Removal of Cycles SSS Compatible falloff */
2654 FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
2655 if (ntree->type == NTREE_SHADER) {
2656 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
2657 if (node->type == SH_NODE_SUBSURFACE_SCATTERING) {
2658 if (node->custom1 == SHD_SUBSURFACE_COMPATIBLE) {
2659 node->custom1 = SHD_SUBSURFACE_CUBIC;
2660 }
2661 }
2662 }
2663 }
2664 }
2666 }
2667
2668 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 269, 2)) {
2669 /* Initialize CDL settings for Color Balance nodes */
2670 FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
2671 if (ntree->type == NTREE_COMPOSIT) {
2672 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
2673 if (node->type == CMP_NODE_COLORBALANCE) {
2674 NodeColorBalance *n = static_cast<NodeColorBalance *>(node->storage);
2675 if (node->custom1 == 0) {
2676 /* LGG mode stays the same, just init CDL settings */
2678 }
2679 else if (node->custom1 == 1) {
2680 /* CDL previously used same variables as LGG, copy them over
2681 * and then sync LGG for comparable results in both modes.
2682 */
2683 copy_v3_v3(n->offset, n->lift);
2684 copy_v3_v3(n->power, n->gamma);
2685 copy_v3_v3(n->slope, n->gain);
2687 }
2688 }
2689 }
2690 }
2691 }
2693 }
2694
2695 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 269, 3)) {
2696 /* Update files using invalid (outdated) outlinevis Outliner values. */
2697 LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) {
2698 LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2699 LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2700 if (sl->spacetype == SPACE_OUTLINER) {
2701 SpaceOutliner *space_outliner = (SpaceOutliner *)sl;
2702
2703 if (!ELEM(
2705 {
2706 space_outliner->outlinevis = SO_SCENES;
2707 }
2708 }
2709 }
2710 }
2711 }
2712
2713 if (!DNA_struct_member_exists(fd->filesdna, "MovieTrackingTrack", "float", "weight")) {
2714 LISTBASE_FOREACH (MovieClip *, clip, &bmain->movieclips) {
2715 const MovieTracking *tracking = &clip->tracking;
2716 LISTBASE_FOREACH (MovieTrackingObject *, tracking_object, &tracking->objects) {
2717 const ListBase *tracksbase = (tracking_object->flag & TRACKING_OBJECT_CAMERA) ?
2718 &tracking->tracks_legacy :
2719 &tracking_object->tracks;
2720 LISTBASE_FOREACH (MovieTrackingTrack *, track, tracksbase) {
2721 track->weight = 1.0f;
2722 }
2723 }
2724 }
2725 }
2726
2727 if (!DNA_struct_member_exists(fd->filesdna, "TriangulateModifierData", "int", "quad_method")) {
2728 LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
2729 LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
2730 if (md->type == eModifierType_Triangulate) {
2732 if (tmd->flag & MOD_TRIANGULATE_BEAUTY) {
2735 }
2736 else {
2739 }
2740 }
2741 }
2742 }
2743 }
2744
2745 LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
2746 /* this can now be turned off */
2747 ToolSettings *ts = scene->toolsettings;
2748 if (ts->sculpt) {
2750 }
2751
2752 /* 'Increment' mode disabled for nodes, use true grid snapping instead */
2753 if (scene->toolsettings->snap_node_mode == 0) { /* SCE_SNAP_TO_INCREMENT */
2754 scene->toolsettings->snap_node_mode = 8; /* SCE_SNAP_TO_GRID */
2755 }
2756
2757#ifdef WITH_FFMPEG
2758 /* Update for removed "sound-only" option in FFMPEG export settings. */
2759 if (scene->r.ffcodecdata.type >= FFMPEG_INVALID) {
2760 scene->r.ffcodecdata.type = FFMPEG_AVI;
2761 }
2762#endif
2763 }
2764 }
2765
2766 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 269, 4)) {
2767 /* Internal degrees to radians conversions... */
2768 {
2769 LISTBASE_FOREACH (Light *, la, &bmain->lights) {
2770 la->spotsize = DEG2RADF(la->spotsize);
2771 }
2772
2773 LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
2774 LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
2775 if (md->type == eModifierType_EdgeSplit) {
2777 emd->split_angle = DEG2RADF(emd->split_angle);
2778 }
2779 else if (md->type == eModifierType_Bevel) {
2781 bmd->bevel_angle = DEG2RADF(bmd->bevel_angle);
2782 }
2783 }
2784 }
2785
2786 LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
2787 if (scene->ed) {
2788 SEQ_for_each_callback(&scene->ed->seqbase, seq_set_wipe_angle_cb, nullptr);
2789 }
2790 }
2791
2792 FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
2793 if (ntree->type == NTREE_COMPOSIT) {
2794 LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
2795 if (node->type == CMP_NODE_BOKEHIMAGE) {
2796 NodeBokehImage *n = static_cast<NodeBokehImage *>(node->storage);
2797 n->angle = DEG2RADF(n->angle);
2798 }
2799 if (node->type == CMP_NODE_MASK_BOX) {
2800 NodeBoxMask *n = static_cast<NodeBoxMask *>(node->storage);
2801 n->rotation = DEG2RADF(n->rotation);
2802 }
2803 if (node->type == CMP_NODE_MASK_ELLIPSE) {
2804 NodeEllipseMask *n = static_cast<NodeEllipseMask *>(node->storage);
2805 n->rotation = DEG2RADF(n->rotation);
2806 }
2807 }
2808 }
2809 }
2811 }
2812
2813 if (!DNA_struct_member_exists(
2814 fd->filesdna, "MovieTrackingPlaneTrack", "float", "image_opacity"))
2815 {
2816 LISTBASE_FOREACH (MovieClip *, clip, &bmain->movieclips) {
2818 MovieTrackingPlaneTrack *, plane_track, &clip->tracking.plane_tracks_legacy)
2819 {
2820 plane_track->image_opacity = 1.0f;
2821 }
2822 }
2823 }
2824 }
2825
2826 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 269, 7)) {
2827 LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
2828 Sculpt *sd = scene->toolsettings->sculpt;
2829
2830 if (sd) {
2831 enum {
2832 SCULPT_SYMM_X = (1 << 0),
2833 SCULPT_SYMM_Y = (1 << 1),
2834 SCULPT_SYMM_Z = (1 << 2),
2835 SCULPT_SYMMETRY_FEATHER = (1 << 6),
2836 };
2837 int symmetry_flags = sd->flags & 7;
2838
2839 if (symmetry_flags & SCULPT_SYMM_X) {
2841 }
2842 if (symmetry_flags & SCULPT_SYMM_Y) {
2844 }
2845 if (symmetry_flags & SCULPT_SYMM_Z) {
2847 }
2848 if (symmetry_flags & SCULPT_SYMMETRY_FEATHER) {
2850 }
2851 }
2852 }
2853 }
2854
2855 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 269, 8)) {
2856 LISTBASE_FOREACH (Curve *, cu, &bmain->curves) {
2857 if (cu->str) {
2858 cu->len_char32 = BLI_strlen_utf8(cu->str);
2859 }
2860 }
2861 }
2862
2863 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 269, 9)) {
2864 LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
2865 LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
2866 if (md->type == eModifierType_Build) {
2868 if (bmd->randomize) {
2870 }
2871 }
2872 }
2873 }
2874 }
2875
2876 if (!MAIN_VERSION_FILE_ATLEAST(bmain, 269, 11)) {
2877 LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) {
2878 LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2879 LISTBASE_FOREACH (SpaceLink *, space_link, &area->spacedata) {
2880 if (space_link->spacetype == SPACE_IMAGE) {
2881 ListBase *lb;
2882
2883 if (space_link == area->spacedata.first) {
2884 lb = &area->regionbase;
2885 }
2886 else {
2887 lb = &space_link->regionbase;
2888 }
2889
2890 LISTBASE_FOREACH (ARegion *, region, lb) {
2891 if (region->regiontype == RGN_TYPE_PREVIEW) {
2892 region->regiontype = RGN_TYPE_TOOLS;
2893 region->alignment = RGN_ALIGN_LEFT;
2894 }
2895 else if (region->regiontype == RGN_TYPE_UI) {
2896 region->alignment = RGN_ALIGN_RIGHT;
2897 }
2898 }
2899 }
2900 }
2901 }
2902 }
2903 }
2904}
2905
void animviz_settings_init(struct bAnimVizSettings *avs)
CustomData interface, see also DNA_customdata_types.h.
void CustomData_free_layers(CustomData *data, eCustomDataType type, int totelem)
void CustomData_update_typemap(CustomData *data)
IDProperty * IDP_CopyProperty(const IDProperty *prop) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
Definition idprop.cc:861
void BKE_image_alpha_mode_from_extension(Image *image)
#define MAIN_VERSION_FILE_ATLEAST(main, ver, subver)
Definition BKE_main.hh:572
#define MAIN_VERSION_FILE_OLDER(main, ver, subver)
Definition BKE_main.hh:576
void BKE_mesh_do_versions_cd_flag_init(Mesh *mesh)
#define SH_NODE_TEX_NOISE
Definition BKE_node.hh:936
#define SH_NODE_MIX_SHADER
Definition BKE_node.hh:917
#define CMP_NODE_PREMULKEY
Definition BKE_node.hh:1068
#define CMP_NODE_VALTORGB
Definition BKE_node.hh:1016
#define CMP_NODE_MASK
Definition BKE_node.hh:1081
#define CMP_NODE_SCALE
Definition BKE_node.hh:1041
#define SH_NODE_HOLDOUT
Definition BKE_node.hh:942
#define SH_NODE_MIX_RGB_LEGACY
Definition BKE_node.hh:893
#define TEX_NODE_COORD
Definition BKE_node.hh:1151
#define SH_NODE_TEX_GRADIENT
Definition BKE_node.hh:932
#define SH_NODE_COMBRGB_LEGACY
Definition BKE_node.hh:910
#define TEX_NODE_DISTANCE
Definition BKE_node.hh:1152
#define SH_NODE_SQUEEZE
Definition BKE_node.hh:906
#define CMP_NODE_COMPOSITE
Definition BKE_node.hh:1033
#define CMP_NODE_MIX_RGB
Definition BKE_node.hh:1015
#define CMP_NODE_VECBLUR
Definition BKE_node.hh:1026
#define CMP_NODE_MAP_RANGE
Definition BKE_node.hh:1104
#define NODE_REROUTE
Definition BKE_node.hh:804
#define CMP_NODE_SEPHSVA_LEGACY
Definition BKE_node.hh:1028
#define CMP_NODE_TIME
Definition BKE_node.hh:1025
#define SH_NODE_HUE_SAT
Definition BKE_node.hh:911
#define SH_NODE_INVERT
Definition BKE_node.hh:908
#define CMP_NODE_COLOR_SPILL
Definition BKE_node.hh:1047
#define SH_NODE_TEX_MAGIC
Definition BKE_node.hh:934
#define SH_NODE_OUTPUT_WORLD
Definition BKE_node.hh:914
#define SH_NODE_NORMAL
Definition BKE_node.hh:898
#define SH_NODE_BRIGHTCONTRAST
Definition BKE_node.hh:948
#define CMP_NODE_DESPECKLE
Definition BKE_node.hh:1086
#define CMP_NODE_VIEWER
Definition BKE_node.hh:1012
#define CMP_NODE_LUMA_MATTE
Definition BKE_node.hh:1060
#define SH_NODE_TEX_WAVE
Definition BKE_node.hh:935
#define CMP_NODE_KEYINGSCREEN
Definition BKE_node.hh:1082
#define CMP_NODE_MASK_ELLIPSE
Definition BKE_node.hh:1098
#define CMP_NODE_DISPLACE
Definition BKE_node.hh:1057
#define SH_NODE_TEX_IMAGE
Definition BKE_node.hh:930
#define CMP_NODE_COMBYCCA_LEGACY
Definition BKE_node.hh:1043
#define CMP_NODE_RGBTOBW
Definition BKE_node.hh:1017
#define SH_NODE_EMISSION
Definition BKE_node.hh:927
#define CMP_NODE_SEPRGBA_LEGACY
Definition BKE_node.hh:1027
#define CMP_NODE_BILATERALBLUR
Definition BKE_node.hh:1067
#define CMP_NODE_MAP_VALUE
Definition BKE_node.hh:1024
#define CMP_NODE_TRANSLATE
Definition BKE_node.hh:1036
#define TEX_NODE_ROTATE
Definition BKE_node.hh:1148
#define CMP_NODE_MOVIEDISTORTION
Definition BKE_node.hh:1077
#define CMP_NODE_TONEMAP
Definition BKE_node.hh:1092
#define SH_NODE_ADD_SHADER
Definition BKE_node.hh:939
#define SH_NODE_LAYER_WEIGHT
Definition BKE_node.hh:943
#define SH_NODE_SUBSURFACE_SCATTERING
Definition BKE_node.hh:960
#define CMP_NODE_INPAINT
Definition BKE_node.hh:1085
#define CMP_NODE_COLORBALANCE
Definition BKE_node.hh:1072
#define TEX_NODE_DECOMPOSE_LEGACY
Definition BKE_node.hh:1154
#define CMP_NODE_HUE_SAT
Definition BKE_node.hh:1030
#define SH_NODE_FRESNEL
Definition BKE_node.hh:916
#define CMP_NODE_BOKEHIMAGE
Definition BKE_node.hh:1099
#define SH_NODE_TEX_BRICK
Definition BKE_node.hh:952
#define SH_NODE_SEPRGB_LEGACY
Definition BKE_node.hh:909
#define CMP_NODE_COMBYUVA_LEGACY
Definition BKE_node.hh:1045
#define SH_NODE_TEX_COORD
Definition BKE_node.hh:938
#define CMP_NODE_ROTATE
Definition BKE_node.hh:1040
#define SH_NODE_BUMP
Definition BKE_node.hh:953
#define TEX_NODE_BRICKS
Definition BKE_node.hh:1138
#define CMP_NODE_FILTER
Definition BKE_node.hh:1023
#define CMP_NODE_DIFF_MATTE
Definition BKE_node.hh:1046
#define CMP_NODE_GAMMA
Definition BKE_node.hh:1062
#define SH_NODE_VECTOR_MATH
Definition BKE_node.hh:905
#define SH_NODE_TEX_ENVIRONMENT
Definition BKE_node.hh:940
#define SH_NODE_NORMAL_MAP
Definition BKE_node.hh:958
#define SH_NODE_VALUE
Definition BKE_node.hh:892
#define SH_NODE_CURVE_VEC
Definition BKE_node.hh:901
#define CMP_NODE_ALPHAOVER
Definition BKE_node.hh:1021
#define CMP_NODE_TEXTURE
Definition BKE_node.hh:1035
#define TEX_NODE_SCALE
Definition BKE_node.hh:1156
#define TEX_NODE_TRANSLATE
Definition BKE_node.hh:1150
#define CMP_NODE_HUECORRECT
Definition BKE_node.hh:1073
#define TEX_NODE_AT
Definition BKE_node.hh:1157
#define CMP_NODE_SEPYUVA_LEGACY
Definition BKE_node.hh:1044
#define TEX_NODE_VALTONOR
Definition BKE_node.hh:1155
#define SH_NODE_MATH
Definition BKE_node.hh:904
#define CMP_NODE_COMBHSVA_LEGACY
Definition BKE_node.hh:1058
#define CMP_NODE_CROP
Definition BKE_node.hh:1065
#define TEX_NODE_TEXTURE
Definition BKE_node.hh:1137
#define SH_NODE_TANGENT
Definition BKE_node.hh:957
#define CMP_NODE_CHROMA_MATTE
Definition BKE_node.hh:1048
#define CMP_NODE_GLARE
Definition BKE_node.hh:1091
#define SH_NODE_BSDF_TRANSPARENT
Definition BKE_node.hh:925
#define CMP_NODE_MOVIECLIP
Definition BKE_node.hh:1074
#define TEX_NODE_INVERT
Definition BKE_node.hh:1145
#define CMP_NODE_TRANSFORM
Definition BKE_node.hh:1076
#define CMP_NODE_DILATEERODE
Definition BKE_node.hh:1039
#define SH_NODE_BSDF_DIFFUSE
Definition BKE_node.hh:921
#define NODE_GROUP_OUTPUT
Definition BKE_node.hh:806
#define SH_NODE_GAMMA
Definition BKE_node.hh:946
#define SH_NODE_HAIR_INFO
Definition BKE_node.hh:959
#define SH_NODE_AMBIENT_OCCLUSION
Definition BKE_node.hh:955
#define CMP_NODE_ID_MASK
Definition BKE_node.hh:1055
#define TEX_NODE_CHECKER
Definition BKE_node.hh:1136
#define CMP_NODE_BOKEHBLUR
Definition BKE_node.hh:1100
#define TEX_NODE_COMPOSE_LEGACY
Definition BKE_node.hh:1153
#define CMP_NODE_LENSDIST
Definition BKE_node.hh:1093
#define TEX_NODE_RGBTOBW
Definition BKE_node.hh:1141
#define CMP_NODE_NORMALIZE
Definition BKE_node.hh:1064
#define CMP_NODE_VALUE
Definition BKE_node.hh:1014
#define CMP_NODE_ZCOMBINE
Definition BKE_node.hh:1037
#define CMP_NODE_MATH
Definition BKE_node.hh:1059
#define CMP_NODE_MAP_UV
Definition BKE_node.hh:1054
#define SH_NODE_TEX_SKY
Definition BKE_node.hh:931
#define CMP_NODE_TRACKPOS
Definition BKE_node.hh:1084
#define SH_NODE_OUTPUT_MATERIAL
Definition BKE_node.hh:913
#define TEX_NODE_IMAGE
Definition BKE_node.hh:1143
#define CMP_NODE_OUTPUT_FILE
Definition BKE_node.hh:1034
#define CMP_NODE_COLORCORRECTION
Definition BKE_node.hh:1096
#define SH_NODE_BSDF_TRANSLUCENT
Definition BKE_node.hh:924
#define FOREACH_NODETREE_END
Definition BKE_node.hh:870
#define CMP_NODE_SETALPHA
Definition BKE_node.hh:1029
#define SH_NODE_BACKGROUND
Definition BKE_node.hh:919
#define SH_NODE_BSDF_RAY_PORTAL
Definition BKE_node.hh:997
#define CMP_NODE_CURVE_RGB
Definition BKE_node.hh:1020
#define CMP_NODE_DOUBLEEDGEMASK
Definition BKE_node.hh:1078
#define SH_NODE_TEX_CHECKER
Definition BKE_node.hh:947
#define SH_NODE_TEX_VORONOI
Definition BKE_node.hh:933
#define SH_NODE_CAMERA
Definition BKE_node.hh:903
#define CMP_NODE_STABILIZE2D
Definition BKE_node.hh:1075
#define SH_NODE_OBJECT_INFO
Definition BKE_node.hh:950
#define SH_NODE_TEX_MUSGRAVE_DEPRECATED
Definition BKE_node.hh:937
#define CMP_NODE_PIXELATE
Definition BKE_node.hh:1102
#define SH_NODE_RGB
Definition BKE_node.hh:891
#define SH_NODE_MAPPING
Definition BKE_node.hh:900
#define SH_NODE_VALTORGB
Definition BKE_node.hh:894
#define CMP_NODE_SWITCH
Definition BKE_node.hh:1101
#define SH_NODE_CURVE_RGB
Definition BKE_node.hh:902
#define CMP_NODE_COMBRGBA_LEGACY
Definition BKE_node.hh:1038
#define NODE_GROUP
Definition BKE_node.hh:800
#define CMP_NODE_RGB
Definition BKE_node.hh:1013
#define CMP_NODE_MASK_BOX
Definition BKE_node.hh:1097
#define CMP_NODE_SPLITVIEWER__DEPRECATED
Definition BKE_node.hh:1052
#define TEX_NODE_OUTPUT
Definition BKE_node.hh:1135
#define CMP_NODE_DEFOCUS
Definition BKE_node.hh:1056
#define FOREACH_NODETREE_BEGIN(bmain, _nodetree, _id)
Definition BKE_node.hh:860
#define TEX_NODE_CURVE_TIME
Definition BKE_node.hh:1147
#define CMP_NODE_KEYING
Definition BKE_node.hh:1083
#define TEX_NODE_VIEWER
Definition BKE_node.hh:1149
#define SH_NODE_LIGHT_FALLOFF
Definition BKE_node.hh:949
#define SH_NODE_BSDF_GLASS
Definition BKE_node.hh:923
#define NODE_FRAME
Definition BKE_node.hh:803
#define CMP_NODE_R_LAYERS
Definition BKE_node.hh:1032
#define SH_NODE_NEW_GEOMETRY
Definition BKE_node.hh:928
#define CMP_NODE_CURVE_VEC
Definition BKE_node.hh:1019
#define CMP_NODE_SEPYCCA_LEGACY
Definition BKE_node.hh:1042
#define CMP_NODE_INVERT
Definition BKE_node.hh:1063
#define SH_NODE_PARTICLE_INFO
Definition BKE_node.hh:951
#define TEX_NODE_MATH
Definition BKE_node.hh:1139
#define CMP_NODE_COLOR_MATTE
Definition BKE_node.hh:1071
#define NODE_GROUP_INPUT
Definition BKE_node.hh:805
#define CMP_NODE_DIST_MATTE
Definition BKE_node.hh:1069
#define CMP_NODE_OUTPUT_MULTI_FILE__DEPRECATED
Definition BKE_node.hh:1079
#define SH_NODE_BSDF_REFRACTION
Definition BKE_node.hh:956
#define CMP_NODE_IMAGE
Definition BKE_node.hh:1031
#define TEX_NODE_PROC
Definition BKE_node.hh:1162
#define CMP_NODE_NORMAL
Definition BKE_node.hh:1018
#define CMP_NODE_DBLUR
Definition BKE_node.hh:1066
#define CMP_NODE_VIEW_LEVELS
Definition BKE_node.hh:1070
#define SH_NODE_OUTPUT_LIGHT
Definition BKE_node.hh:915
#define TEX_NODE_HUE_SAT
Definition BKE_node.hh:1146
#define CMP_NODE_BLUR
Definition BKE_node.hh:1022
#define TEX_NODE_MIX_RGB
Definition BKE_node.hh:1140
#define SH_NODE_RGBTOBW
Definition BKE_node.hh:895
#define TEX_NODE_VALTORGB
Definition BKE_node.hh:1142
#define SH_NODE_SCRIPT
Definition BKE_node.hh:954
#define CMP_NODE_BRIGHTCONTRAST
Definition BKE_node.hh:1061
#define CMP_NODE_FLIP
Definition BKE_node.hh:1050
#define TEX_NODE_CURVE_RGB
Definition BKE_node.hh:1144
#define CMP_NODE_CHANNEL_MATTE
Definition BKE_node.hh:1049
#define SH_NODE_ATTRIBUTE
Definition BKE_node.hh:918
#define SH_NODE_LIGHT_PATH
Definition BKE_node.hh:929
void BKE_ntree_update_tag_node_new(bNodeTree *ntree, bNode *node)
void BKE_ntree_update_tag_socket_type(bNodeTree *ntree, bNodeSocket *socket)
void BKE_ntree_update_tag_socket_new(bNodeTree *ntree, bNodeSocket *socket)
void BKE_scene_disable_color_management(Scene *scene)
Definition scene.cc:2826
ARegion * BKE_area_find_region_type(const ScrArea *area, int region_type)
Definition screen.cc:815
int txt_extended_ascii_as_utf8(char **str)
Definition text.cc:293
void BKE_texture_mtex_default(struct MTex *mtex)
Definition texture.cc:394
struct MovieTrackingObject * BKE_tracking_object_add(struct MovieTracking *tracking, const char *name)
Definition tracking.cc:1897
#define BLI_assert_unreachable()
Definition BLI_assert.h:97
#define BLI_assert(a)
Definition BLI_assert.h:50
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
void BLI_insertlinkafter(struct ListBase *listbase, void *vprevlink, void *vnewlink) ATTR_NONNULL(1)
Definition listbase.cc:331
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:110
MINLINE int max_iii(int a, int b, int c)
void unit_m4(float m[4][4])
Definition rct.c:1127
#define DEG2RADF(_deg)
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE bool is_zero_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v3_v3(float r[3], const float a[3])
void copy_vn_fl(float *array_tar, int size, float val)
MINLINE bool is_zero_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT
#define FILE_MAXFILE
#define FILE_MAX
void BLI_path_split_dir_file(const char *filepath, char *dir, size_t dir_maxncpy, char *file, size_t file_maxncpy) ATTR_NONNULL(1
#define FILE_MAXDIR
#define STRNCPY(dst, src)
Definition BLI_string.h:593
#define SNPRINTF(dst, format,...)
Definition BLI_string.h:597
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
size_t BLI_strlen_utf8(const char *strc) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT
void BLI_uniquename(const struct ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t name_maxncpy) ATTR_NONNULL(1
#define POINTER_AS_INT(i)
#define ELEM(...)
external readfile function prototypes.
#define ID_IS_LINKED(_id)
Definition DNA_ID.h:654
@ SCULPT_BRUSH_TYPE_ROTATE
@ BRUSH_OVERLAY_CURSOR
@ BRUSH_OVERLAY_PRIMARY
@ CAM_PANO
#define DEFAULT_SENSOR_HEIGHT
@ CAM_PANORAMA
#define DEFAULT_SENSOR_WIDTH
@ CONSTRAINT_TYPE_OBJECTSOLVER
@ CONSTRAINT_TYPE_SHRINKWRAP
@ CONSTRAINT_SPACE_LOCAL
@ CU_FRONT
@ CU_BACK
@ CD_PROP_BYTE_COLOR
@ MOD_DPAINT_USE_DRYING
@ SM_HRES_NEAREST
@ SM_HRES_LINEAR
@ FREESTYLE_ALGO_CULLED_ADAPTIVE_CUMULATIVE
@ FREESTYLE_ALGO_CULLED_ADAPTIVE_TRADITIONAL
@ FREESTYLE_CULLING
@ FREESTYLE_CONTROL_EDITOR_MODE
blenloader genfile private function prototypes
@ IMA_ALPHA_STRAIGHT
@ IMA_VIEW_AS_RENDER
@ IMA_SRC_VIEWER
@ LS_THICKNESS_CENTER
@ LS_PANEL_STROKES
@ LS_PANEL_MISC
@ LS_CHAINING_PLAIN
@ MOD_BUILD_FLAG_RANDOMIZE
@ MOD_FLUID_TYPE_DOMAIN
@ MOD_FLUID_TYPE_FLOW
@ MOD_TRIANGULATE_NGON_BEAUTY
@ MOD_TRIANGULATE_NGON_EARCLIP
@ eModifierType_Fluidsim
@ eModifierType_Lattice
@ eModifierType_Cloth
@ eModifierType_Fluid
@ eModifierType_EdgeSplit
@ eModifierType_Bevel
@ eModifierType_DynamicPaint
@ eModifierType_Build
@ eModifierType_Triangulate
@ MOD_SHRINKWRAP_PROJECT_OVER_X_AXIS
@ MOD_SHRINKWRAP_PROJECT_OVER_Y_AXIS
@ MOD_TRIANGULATE_QUAD_FIXED
@ MOD_TRIANGULATE_QUAD_BEAUTY
@ NODE_OPTIONS
@ NODE_INIT
@ NODE_PREVIEW
@ CMP_NODE_IMAGE_USE_STRAIGHT_OUTPUT
eNodeSocketInOut
@ SOCK_OUT
@ SOCK_IN
@ SOCK_IS_LINKED
@ SOCK_COLLAPSED
@ NTREE_TEXTURE
@ NTREE_SHADER
@ NTREE_COMPOSIT
eNodeSocketDatatype
@ SOCK_INT
@ SOCK_VECTOR
@ SOCK_BOOLEAN
@ SOCK_SHADER
@ SOCK_FLOAT
@ SOCK_STRING
@ SOCK_RGBA
@ OB_MODE_TEXTURE_PAINT
Object is a sort of wrapper for general info.
@ OB_POSX
@ OB_NEGZ
@ OB_POSY
@ OB_POSZ
@ OB_PLAINAXES
@ PART_ROT_VEL
@ PART_DRAW_NO_SCALE_OB
@ PART_DRAW_ROTATE_OB
@ PART_DRAW_GR
@ PART_DRAW_OB
@ PART_ROTATIONS
@ PAINT_SYMM_Y
@ PAINT_SYMMETRY_FEATHER
@ PAINT_SYMM_X
@ PAINT_SYMM_Z
@ UVCALC_UNWRAP_METHOD_ANGLE
@ R_LINE_THICKNESS_ABSOLUTE
@ SCULPT_DYNTOPO_SUBDIVIDE
@ R_IMF_FLAG_PREVIEW_JPG
@ UNIFIED_PAINT_WEIGHT
@ R_IMF_IMTYPE_TIFF
@ R_IMF_IMTYPE_IRIZ
@ R_IMF_IMTYPE_DPX
@ R_IMF_IMTYPE_JP2
@ R_IMF_IMTYPE_OPENEXR
@ R_IMF_IMTYPE_MULTILAYER
@ R_IMF_IMTYPE_CINEON
@ PROP_SMOOTH
@ R_IMF_CHAN_DEPTH_8
@ R_IMF_CHAN_DEPTH_16
@ R_IMF_CHAN_DEPTH_12
@ R_IMF_CHAN_DEPTH_32
@ R_COLOR_MANAGEMENT
@ R_IMF_CINEON_FLAG_LOG
@ R_IMF_JP2_FLAG_CINE_48
@ R_IMF_JP2_FLAG_CINE_PRESET
@ R_IMF_JP2_FLAG_YCC
@ RGN_ALIGN_LEFT
@ RGN_ALIGN_RIGHT
@ RGN_ALIGN_NONE
@ RGN_FLAG_HIDDEN
@ RGN_TYPE_UI
@ RGN_TYPE_PREVIEW
@ RGN_TYPE_HEADER
@ RGN_TYPE_TOOLS
@ SEQ_TYPE_WIPE
@ SEQ_ALPHA_STRAIGHT
@ seqModifierType_ColorBalance
@ SI_SHOW_GPENCIL
@ SNODE_SHOW_GPENCIL
@ SPACE_CLIP
@ SPACE_OUTLINER
@ SPACE_NODE
@ SPACE_SEQ
@ SPACE_IMAGE
@ SPACE_VIEW3D
@ SC_VIEW_CLIP
@ SEQ_PREVIEW_SHOW_GPENCIL
@ SC_SHOW_ANNOTATION
@ SO_SEQUENCE
@ SO_DATA_API
@ SO_LIBRARIES
@ SO_SCENES
@ TXT_ISEXT
@ MTEX_MAP_MODE_TILED
@ TEX_BLEND
@ TEX_MARBLE
@ TEX_NOISE
@ TEX_IMAGE
@ TEX_WOOD
@ TEX_CLOUDS
@ TEX_DISTNOISE
@ TEX_VORONOI
@ TEX_STUCCI
@ TEX_MAGIC
@ TEX_MUSGRAVE
@ TEX_USEALPHA
@ TRACK_MOTION_MODEL_TRANSLATION
@ TRACKING_OBJECT_CAMERA
@ V2D_IS_INIT
@ V3D_SHOW_ANNOTATION
@ V3D_SHOW_RECONSTRUCTION
@ V3D_AROUND_CENTER_MEDIAN
@ IMB_PROXY_25
@ IMB_TC_RECORD_RUN_NO_GAPS
@ IMB_TC_RECORD_RUN
Read Guarded memory(de)allocation.
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Gabor Generate Gabor noise Gradient Generate interpolated color and intensity values based on the input vector Magic Generate a psychedelic color texture Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a or normal between world
@ PROP_NONE
Definition RNA_types.hh:136
#define output
input_tx image(0, GPU_RGBA16F, Qualifier::WRITE, ImageType::FLOAT_2D, "preview_img") .compute_source("compositor_compute_preview.glsl") .do_static_compilation(true)
#define offsetof(t, d)
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
void SEQ_for_each_callback(ListBase *seqbase, SeqForEachFunc callback, void *user_data)
Definition iterator.cc:43
void MEM_freeN(void *vmemh)
Definition mallocn.cc:105
void *(* MEM_dupallocN)(const void *vmemh)
Definition mallocn.cc:39
static ulong * next
void node_remove_socket(bNodeTree *ntree, bNode *node, bNodeSocket *sock)
Definition node.cc:2405
void node_remove_link(bNodeTree *ntree, bNodeLink *link)
Definition node.cc:2958
const char * node_static_socket_type(int type, int subtype)
Definition node.cc:2126
void node_unique_id(bNodeTree *ntree, bNode *node)
Definition node.cc:2599
void node_unique_name(bNodeTree *ntree, bNode *node)
Definition node.cc:2593
bNodeSocket * node_group_input_find_socket(bNode *node, const char *identifier)
bNodeSocket * node_group_output_find_socket(bNode *node, const char *identifier)
void ntreeCompositColorBalanceSyncFromLGG(bNodeTree *, bNode *node)
void ntreeCompositColorBalanceSyncFromCDL(bNodeTree *, bNode *node)
void ntreeCompositOutputFileUniqueLayer(ListBase *list, bNodeSocket *sock, const char defname[], char delim)
bNodeSocket * ntreeCompositOutputFileAddSocket(bNodeTree *ntree, bNode *node, const char *name, const ImageFormatData *im_format)
void ntreeCompositOutputFileUniquePath(ListBase *list, bNodeSocket *sock, const char defname[], char delim)
void * blo_do_versions_newlibadr(FileData *fd, ID *self_id, const bool is_linked_only, const void *adr)
Definition readfile.cc:1489
void blo_do_versions_key_uidgen(Key *key)
Definition readfile.cc:2211
SequenceModifierData * SEQ_modifier_new(Sequence *seq, const char *name, int type)
void SEQ_alpha_mode_from_file_extension(Sequence *seq)
struct ClothSimSettings * sim_parms
StripColorBalance color_balance
CustomDataLayer * layers
struct DynamicPaintCanvasSettings * canvas
struct DynamicPaintSurface * next
SDNA * filesdna
Definition readfile.hh:87
struct FluidDomainSettings * domain
struct FluidFlowSettings * flow
struct FluidsimSettings * fss
Definition DNA_ID.h:413
void * last
void * first
unsigned char b
unsigned char r
ListBase brushes
Definition BKE_main.hh:235
ListBase scenes
Definition BKE_main.hh:210
short subversionfile
Definition BKE_main.hh:137
ListBase textures
Definition BKE_main.hh:217
ListBase texts
Definition BKE_main.hh:227
ListBase meshes
Definition BKE_main.hh:213
ListBase movieclips
Definition BKE_main.hh:242
ListBase lights
Definition BKE_main.hh:220
ListBase nodetrees
Definition BKE_main.hh:234
ListBase particles
Definition BKE_main.hh:236
ListBase materials
Definition BKE_main.hh:216
ListBase linestyles
Definition BKE_main.hh:244
ListBase shapekeys
Definition BKE_main.hh:223
ListBase cameras
Definition BKE_main.hh:221
ListBase curves
Definition BKE_main.hh:214
ListBase worlds
Definition BKE_main.hh:224
ListBase screens
Definition BKE_main.hh:225
short versionfile
Definition BKE_main.hh:137
ListBase images
Definition BKE_main.hh:218
ListBase objects
Definition BKE_main.hh:212
int corners_num
CustomData corner_data
struct MovieTrackingObject * next
MovieTrackingMarker * markers
struct MovieTrackingTrack * next
MovieTrackingSettings settings
struct ImageFormatData im_format
ImageFormatData format
int symmetry_flags
struct ImageFormatData im_format
struct RenderData r
struct MovieClipScopes scopes
char tree_idname[64]
struct ID * from
ListBase treepath
struct bNodeTree * edittree
struct ID * id
struct bNodeTree * nodetree
struct UnifiedPaintSettings unified_paint_settings
float bundle_size
rctf render_border
char bundle_drawtype
unsigned int value
IDProperty * prop
bNodeSocketRuntimeHandle * runtime
struct bNodeLink * link
void * default_value
char identifier[64]
char idname[64]
bNodeInstanceKey parent_key
char idname[64]
bNodeTreeTypeHandle * typeinfo
ListBase nodes
ListBase links
float locy
ListBase inputs
float locx
bNodeRuntimeHandle * runtime
char idname[64]
ListBase outputs
int16_t type
float xmax
float xmin
float ymax
float ymin
static const char * node_socket_get_static_idname(bNodeSocket *sock)
#define BRUSH_FIXED
void blo_do_versions_260(FileData *fd, Library *, Main *bmain)
static void do_versions_nodetree_multi_file_output_path_2_63_1(bNodeTree *ntree)
static bool seq_set_alpha_mode_cb(Sequence *seq, void *)
static void do_versions_nodetree_file_output_layers_2_64_5(bNodeTree *ntree)
static void do_versions_nodetree_convert_angle(bNodeTree *ntree)
static bNode * version_add_group_in_out_node(bNodeTree *ntree, const int type)
static void do_versions_affine_tracker_track(MovieTrackingTrack *track)
static bool seq_set_wipe_angle_cb(Sequence *seq, void *)
#define CLANG_FORMAT_NOP_WORKAROUND
void do_versions_after_linking_260(Main *)
static void do_versions_image_settings_2_60(Scene *sce)
static void do_versions_nodetree_socket_use_flags_2_62(bNodeTree *ntree)
static const char * node_get_static_idname(int type, int treetype)
static bool seq_colorbalance_update_cb(Sequence *seq, void *)
static void do_versions_mesh_mloopcol_swap_2_62_1(Mesh *mesh)
static void do_versions_nodetree_image_layer_2_64_5(bNodeTree *ntree)
static void do_versions_nodetree_image_default_alpha_output(bNodeTree *ntree)
static void do_versions_nodetree_frame_2_64_6(bNodeTree *ntree)
static void do_versions_nodetree_customnodes(bNodeTree *ntree, int)
static bNodeSocket * version_make_socket_stub(const char *idname, eNodeSocketDatatype type, eNodeSocketInOut in_out, const char *identifier, const char *name, const void *default_value, const IDProperty *prop)
static void do_versions_nodetree_multi_file_output_format_2_62_1(Scene *sce, bNodeTree *ntree)
#define BRUSH_TEXTURE_OVERLAY