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
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";
834 case TEX_NODE_PROC + TEX_VORONOI:
835 return "TextureNodeTexVoronoi";
836 case TEX_NODE_PROC + TEX_BLEND:
837 return "TextureNodeTexBlend";
838 case TEX_NODE_PROC + TEX_MAGIC:
839 return "TextureNodeTexMagic";
840 case TEX_NODE_PROC + TEX_MARBLE:
841 return "TextureNodeTexMarble";
842 case TEX_NODE_PROC + TEX_CLOUDS:
843 return "TextureNodeTexClouds";
844 case TEX_NODE_PROC + TEX_WOOD:
845 return "TextureNodeTexWood";
846 case TEX_NODE_PROC + TEX_MUSGRAVE:
847 return "TextureNodeTexMusgrave";
848 case TEX_NODE_PROC + TEX_NOISE:
849 return "TextureNodeTexNoise";
850 case TEX_NODE_PROC + TEX_STUCCI:
851 return "TextureNodeTexStucci";
852 case TEX_NODE_PROC + TEX_DISTNOISE:
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) {
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) {
1687 do_versions_nodetree_frame_2_64_6(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 *>(
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) {
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 }
2474#if 1
2475 /* disable the Misc panel for now */
2476 if (linestyle->panel == LS_PANEL_MISC) {
2478 }
2479#endif
2480 if (linestyle->thickness_position == 0) {
2482 linestyle->thickness_ratio = 0.5f;
2483 }
2484 if (linestyle->chaining == 0) {
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 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 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
#define DEFAULT_SENSOR_HEIGHT
@ CAM_PANORAMA
#define DEFAULT_SENSOR_WIDTH
@ CAM_PANO
@ 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_CONTROL_EDITOR_MODE
@ FREESTYLE_ALGO_CULLED_ADAPTIVE_CUMULATIVE
@ FREESTYLE_ALGO_CULLED_ADAPTIVE_TRADITIONAL
@ FREESTYLE_CULLING
blenloader genfile private function prototypes
@ IMA_SRC_VIEWER
@ IMA_VIEW_AS_RENDER
@ IMA_ALPHA_STRAIGHT
@ LS_CHAINING_PLAIN
@ LS_THICKNESS_CENTER
@ LS_PANEL_STROKES
@ LS_PANEL_MISC
@ MOD_TRIANGULATE_QUAD_FIXED
@ MOD_TRIANGULATE_QUAD_BEAUTY
@ MOD_FLUID_TYPE_DOMAIN
@ MOD_FLUID_TYPE_FLOW
@ eModifierType_Fluidsim
@ eModifierType_Lattice
@ eModifierType_Cloth
@ eModifierType_Fluid
@ eModifierType_EdgeSplit
@ eModifierType_Bevel
@ eModifierType_DynamicPaint
@ eModifierType_Build
@ eModifierType_Triangulate
@ MOD_BUILD_FLAG_RANDOMIZE
@ MOD_SHRINKWRAP_PROJECT_OVER_X_AXIS
@ MOD_SHRINKWRAP_PROJECT_OVER_Y_AXIS
@ MOD_TRIANGULATE_NGON_BEAUTY
@ MOD_TRIANGULATE_NGON_EARCLIP
@ NTREE_TEXTURE
@ NTREE_SHADER
@ NTREE_COMPOSIT
@ NODE_OPTIONS
@ NODE_INIT
@ NODE_PREVIEW
eNodeSocketInOut
@ SOCK_OUT
@ SOCK_IN
@ CMP_NODE_IMAGE_USE_STRAIGHT_OUTPUT
@ SOCK_IS_LINKED
@ SOCK_COLLAPSED
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_ROTATIONS
@ PART_DRAW_GR
@ PART_DRAW_OB
@ PART_DRAW_NO_SCALE_OB
@ PART_DRAW_ROTATE_OB
@ PART_ROT_VEL
@ PAINT_SYMM_Y
@ PAINT_SYMMETRY_FEATHER
@ PAINT_SYMM_X
@ PAINT_SYMM_Z
@ SCULPT_DYNTOPO_SUBDIVIDE
@ UNIFIED_PAINT_WEIGHT
@ R_IMF_JP2_FLAG_CINE_48
@ R_IMF_JP2_FLAG_CINE_PRESET
@ R_IMF_JP2_FLAG_YCC
@ R_LINE_THICKNESS_ABSOLUTE
@ R_COLOR_MANAGEMENT
@ R_IMF_CHAN_DEPTH_8
@ R_IMF_CHAN_DEPTH_16
@ R_IMF_CHAN_DEPTH_12
@ R_IMF_CHAN_DEPTH_32
@ 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_FLAG_PREVIEW_JPG
@ UVCALC_UNWRAP_METHOD_ANGLE
@ R_IMF_CINEON_FLAG_LOG
@ RGN_ALIGN_LEFT
@ RGN_ALIGN_RIGHT
@ RGN_ALIGN_NONE
@ RGN_TYPE_UI
@ RGN_TYPE_PREVIEW
@ RGN_TYPE_HEADER
@ RGN_TYPE_TOOLS
@ RGN_FLAG_HIDDEN
@ SEQ_TYPE_WIPE
@ seqModifierType_ColorBalance
@ SEQ_ALPHA_STRAIGHT
@ 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
@ TEX_BLEND
@ TEX_MARBLE
@ TEX_NOISE
@ TEX_IMAGE
@ TEX_WOOD
@ TEX_CLOUDS
@ TEX_DISTNOISE
@ TEX_VORONOI
@ TEX_STUCCI
@ TEX_MAGIC
@ TEX_MUSGRAVE
@ MTEX_MAP_MODE_TILED
@ TEX_USEALPHA
@ TRACK_MOTION_MODEL_TRANSLATION
@ TRACKING_OBJECT_CAMERA
@ V3D_AROUND_CENTER_MEDIAN
@ V3D_SHOW_ANNOTATION
@ V3D_SHOW_RECONSTRUCTION
@ IMB_PROXY_25
@ IMB_TC_RECORD_RUN_NO_GAPS
@ IMB_TC_RECORD_RUN
Read Guarded memory(de)allocation.
@ PROP_NONE
Definition RNA_types.hh:136
#define output
OperationNode * node
FreestyleLineStyle linestyle
#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
struct DynamicPaintCanvasSettings * canvas
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
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
short imaflag
struct ImageUser iuser
struct bNodeTree * nodetree
struct Image * ima
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
float locx
float xmax
float xmin
float ymax
float ymin
static const char * node_socket_get_static_idname(bNodeSocket *sock)
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