2012-05-04 15:42:49 +00:00
|
|
|
/*
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
|
|
|
* of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
*
|
|
|
|
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
|
|
|
* All rights reserved.
|
|
|
|
*/
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
/** \file blender/blenloader/intern/versioning_legacy.c
|
2012-05-04 15:42:49 +00:00
|
|
|
* \ingroup blenloader
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
#include <limits.h>
|
|
|
|
|
|
|
|
#ifndef WIN32
|
|
|
|
# include <unistd.h> // for read close
|
|
|
|
#else
|
2014-11-29 19:12:33 +01:00
|
|
|
# include <zlib.h> /* odd include order-issue */
|
2012-05-04 15:42:49 +00:00
|
|
|
# include <io.h> // for open close read
|
|
|
|
# include "winsock2.h"
|
|
|
|
# include "BLI_winstuff.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* allow readfile to use deprecated functionality */
|
|
|
|
#define DNA_DEPRECATED_ALLOW
|
|
|
|
|
|
|
|
#include "DNA_armature_types.h"
|
|
|
|
#include "DNA_camera_types.h"
|
2018-08-29 15:32:50 +02:00
|
|
|
#include "DNA_collection_types.h"
|
2012-05-04 15:42:49 +00:00
|
|
|
#include "DNA_constraint_types.h"
|
|
|
|
#include "DNA_effect_types.h"
|
|
|
|
#include "DNA_key_types.h"
|
|
|
|
#include "DNA_lattice_types.h"
|
|
|
|
#include "DNA_lamp_types.h"
|
|
|
|
#include "DNA_material_types.h"
|
|
|
|
#include "DNA_mesh_types.h"
|
|
|
|
#include "DNA_meshdata_types.h"
|
|
|
|
#include "DNA_nla_types.h"
|
|
|
|
#include "DNA_node_types.h"
|
2018-02-07 11:14:08 +11:00
|
|
|
#include "DNA_object_fluidsim_types.h"
|
2012-05-04 15:42:49 +00:00
|
|
|
#include "DNA_object_types.h"
|
|
|
|
#include "DNA_view3d_types.h"
|
|
|
|
#include "DNA_screen_types.h"
|
|
|
|
#include "DNA_sdna_types.h"
|
|
|
|
#include "DNA_sequence_types.h"
|
|
|
|
#include "DNA_sound_types.h"
|
|
|
|
#include "DNA_space_types.h"
|
|
|
|
#include "DNA_vfont_types.h"
|
|
|
|
#include "DNA_world_types.h"
|
|
|
|
|
|
|
|
#include "MEM_guardedalloc.h"
|
|
|
|
|
|
|
|
#include "BLI_utildefines.h"
|
|
|
|
#include "BLI_blenlib.h"
|
|
|
|
#include "BLI_math.h"
|
|
|
|
|
2015-05-12 13:13:36 +05:00
|
|
|
#include "BKE_action.h"
|
2012-05-04 15:42:49 +00:00
|
|
|
#include "BKE_armature.h"
|
|
|
|
#include "BKE_colortools.h"
|
|
|
|
#include "BKE_constraint.h"
|
|
|
|
#include "BKE_deform.h"
|
|
|
|
#include "BKE_fcurve.h"
|
|
|
|
#include "BKE_image.h"
|
|
|
|
#include "BKE_lattice.h"
|
|
|
|
#include "BKE_main.h" // for Main
|
|
|
|
#include "BKE_mesh.h" // for ME_ defines (patching)
|
|
|
|
#include "BKE_modifier.h"
|
|
|
|
#include "BKE_particle.h"
|
|
|
|
#include "BKE_pointcache.h"
|
|
|
|
#include "BKE_scene.h"
|
|
|
|
#include "BKE_sequencer.h"
|
|
|
|
|
|
|
|
#include "NOD_socket.h"
|
|
|
|
|
|
|
|
#include "BLO_readfile.h"
|
|
|
|
|
|
|
|
#include "readfile.h"
|
|
|
|
|
|
|
|
#include "PIL_time.h"
|
|
|
|
|
|
|
|
#include <errno.h>
|
|
|
|
|
|
|
|
static void vcol_to_fcol(Mesh *me)
|
|
|
|
{
|
|
|
|
MFace *mface;
|
2018-11-30 14:51:16 +11:00
|
|
|
uint *mcol, *mcoln, *mcolmain;
|
2012-05-04 15:42:49 +00:00
|
|
|
int a;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
if (me->totface == 0 || me->mcol == NULL)
|
|
|
|
return;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
2018-01-14 22:14:20 +01:00
|
|
|
mcoln = mcolmain = MEM_malloc_arrayN(me->totface, 4 * sizeof(int), "mcoln");
|
2018-11-30 14:51:16 +11:00
|
|
|
mcol = (uint *)me->mcol;
|
2012-05-07 06:32:14 +00:00
|
|
|
mface = me->mface;
|
|
|
|
for (a = me->totface; a > 0; a--, mface++) {
|
|
|
|
mcoln[0] = mcol[mface->v1];
|
|
|
|
mcoln[1] = mcol[mface->v2];
|
|
|
|
mcoln[2] = mcol[mface->v3];
|
|
|
|
mcoln[3] = mcol[mface->v4];
|
|
|
|
mcoln += 4;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
MEM_freeN(me->mcol);
|
2012-05-07 06:32:14 +00:00
|
|
|
me->mcol = (MCol *)mcolmain;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void do_version_bone_head_tail_237(Bone *bone)
|
|
|
|
{
|
|
|
|
Bone *child;
|
|
|
|
float vec[3];
|
|
|
|
|
|
|
|
/* head */
|
|
|
|
copy_v3_v3(bone->arm_head, bone->arm_mat[3]);
|
|
|
|
|
|
|
|
/* tail is in current local coord system */
|
|
|
|
copy_v3_v3(vec, bone->arm_mat[1]);
|
|
|
|
mul_v3_fl(vec, bone->length);
|
|
|
|
add_v3_v3v3(bone->arm_tail, bone->arm_head, vec);
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (child = bone->childbase.first; child; child = child->next)
|
2012-05-04 15:42:49 +00:00
|
|
|
do_version_bone_head_tail_237(child);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void bone_version_238(ListBase *lb)
|
|
|
|
{
|
|
|
|
Bone *bone;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
for (bone = lb->first; bone; bone = bone->next) {
|
|
|
|
if (bone->rad_tail == 0.0f && bone->rad_head == 0.0f) {
|
2018-11-30 14:51:16 +11:00
|
|
|
bone->rad_head = 0.25f * bone->length;
|
|
|
|
bone->rad_tail = 0.1f * bone->length;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-11-30 14:51:16 +11:00
|
|
|
bone->dist -= bone->rad_head;
|
|
|
|
if (bone->dist <= 0.0f)
|
2012-05-07 06:32:14 +00:00
|
|
|
bone->dist = 0.0f;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
bone_version_238(&bone->childbase);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void bone_version_239(ListBase *lb)
|
|
|
|
{
|
|
|
|
Bone *bone;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
for (bone = lb->first; bone; bone = bone->next) {
|
|
|
|
if (bone->layer == 0)
|
|
|
|
bone->layer = 1;
|
2012-05-04 15:42:49 +00:00
|
|
|
bone_version_239(&bone->childbase);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void ntree_version_241(bNodeTree *ntree)
|
|
|
|
{
|
|
|
|
bNode *node;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
if (ntree->type == NTREE_COMPOSIT) {
|
|
|
|
for (node = ntree->nodes.first; node; node = node->next) {
|
|
|
|
if (node->type == CMP_NODE_BLUR) {
|
|
|
|
if (node->storage == NULL) {
|
|
|
|
NodeBlurData *nbd = MEM_callocN(sizeof(NodeBlurData), "node blur patch");
|
|
|
|
nbd->sizex = node->custom1;
|
|
|
|
nbd->sizey = node->custom2;
|
|
|
|
nbd->filtertype = R_FILTER_QUAD;
|
|
|
|
node->storage = nbd;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
else if (node->type == CMP_NODE_VECBLUR) {
|
|
|
|
if (node->storage == NULL) {
|
|
|
|
NodeBlurData *nbd = MEM_callocN(sizeof(NodeBlurData), "node blur patch");
|
|
|
|
nbd->samples = node->custom1;
|
|
|
|
nbd->maxspeed = node->custom2;
|
|
|
|
nbd->fac = 1.0f;
|
|
|
|
node->storage = nbd;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void ntree_version_242(bNodeTree *ntree)
|
|
|
|
{
|
|
|
|
bNode *node;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
if (ntree->type == NTREE_COMPOSIT) {
|
|
|
|
for (node = ntree->nodes.first; node; node = node->next) {
|
|
|
|
if (node->type == CMP_NODE_HUE_SAT) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (node->storage) {
|
2012-05-07 06:32:14 +00:00
|
|
|
NodeHueSat *nhs = node->storage;
|
|
|
|
if (nhs->val == 0.0f)
|
|
|
|
nhs->val = 1.0f;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void ntree_version_245(FileData *fd, Library *lib, bNodeTree *ntree)
|
|
|
|
{
|
|
|
|
bNode *node;
|
|
|
|
NodeTwoFloats *ntf;
|
|
|
|
ID *nodeid;
|
|
|
|
Image *image;
|
|
|
|
ImageUser *iuser;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
if (ntree->type == NTREE_COMPOSIT) {
|
|
|
|
for (node = ntree->nodes.first; node; node = node->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (node->type == CMP_NODE_ALPHAOVER) {
|
|
|
|
if (!node->storage) {
|
2012-05-07 06:32:14 +00:00
|
|
|
ntf = MEM_callocN(sizeof(NodeTwoFloats), "NodeTwoFloats");
|
|
|
|
node->storage = ntf;
|
2012-05-04 15:42:49 +00:00
|
|
|
if (node->custom1)
|
2012-05-07 06:32:14 +00:00
|
|
|
ntf->x = 1.0f;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* fix for temporary flag changes during 245 cycle */
|
2012-05-07 06:32:14 +00:00
|
|
|
nodeid = blo_do_versions_newlibadr(fd, lib, node->id);
|
2012-05-04 15:42:49 +00:00
|
|
|
if (node->storage && nodeid && GS(nodeid->name) == ID_IM) {
|
2018-11-30 14:51:16 +11:00
|
|
|
image = (Image *)nodeid;
|
2012-05-07 06:32:14 +00:00
|
|
|
iuser = node->storage;
|
2012-05-04 15:42:49 +00:00
|
|
|
if (iuser->flag & IMA_OLD_PREMUL) {
|
|
|
|
iuser->flag &= ~IMA_OLD_PREMUL;
|
|
|
|
}
|
|
|
|
if (iuser->flag & IMA_DO_PREMUL) {
|
|
|
|
image->flag &= ~IMA_OLD_PREMUL;
|
2012-12-31 13:52:13 +00:00
|
|
|
image->alpha_mode = IMA_ALPHA_STRAIGHT;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void idproperties_fix_groups_lengths_recurse(IDProperty *prop)
|
|
|
|
{
|
|
|
|
IDProperty *loop;
|
|
|
|
int i;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
for (loop = prop->data.group.first, i = 0; loop; loop = loop->next, i++) {
|
|
|
|
if (loop->type == IDP_GROUP)
|
|
|
|
idproperties_fix_groups_lengths_recurse(loop);
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
if (prop->len != i) {
|
|
|
|
printf("Found and fixed bad id property group length.\n");
|
|
|
|
prop->len = i;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void idproperties_fix_group_lengths(ListBase idlist)
|
|
|
|
{
|
|
|
|
ID *id;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
for (id = idlist.first; id; id = id->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (id->properties) {
|
|
|
|
idproperties_fix_groups_lengths_recurse(id->properties);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void customdata_version_242(Mesh *me)
|
|
|
|
{
|
|
|
|
CustomDataLayer *layer;
|
|
|
|
MTFace *mtf;
|
|
|
|
MCol *mcol;
|
|
|
|
TFace *tf;
|
|
|
|
int a, mtfacen, mcoln;
|
|
|
|
|
|
|
|
if (!me->vdata.totlayer) {
|
|
|
|
CustomData_add_layer(&me->vdata, CD_MVERT, CD_ASSIGN, me->mvert, me->totvert);
|
|
|
|
|
|
|
|
if (me->dvert)
|
|
|
|
CustomData_add_layer(&me->vdata, CD_MDEFORMVERT, CD_ASSIGN, me->dvert, me->totvert);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!me->edata.totlayer)
|
|
|
|
CustomData_add_layer(&me->edata, CD_MEDGE, CD_ASSIGN, me->medge, me->totedge);
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
if (!me->fdata.totlayer) {
|
|
|
|
CustomData_add_layer(&me->fdata, CD_MFACE, CD_ASSIGN, me->mface, me->totface);
|
|
|
|
|
|
|
|
if (me->tface) {
|
|
|
|
if (me->mcol)
|
|
|
|
MEM_freeN(me->mcol);
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
me->mcol = CustomData_add_layer(&me->fdata, CD_MCOL, CD_CALLOC, NULL, me->totface);
|
|
|
|
me->mtface = CustomData_add_layer(&me->fdata, CD_MTFACE, CD_CALLOC, NULL, me->totface);
|
2012-05-04 15:42:49 +00:00
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
mtf = me->mtface;
|
|
|
|
mcol = me->mcol;
|
|
|
|
tf = me->tface;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (a = 0; a < me->totface; a++, mtf++, tf++, mcol += 4) {
|
2012-05-04 15:42:49 +00:00
|
|
|
memcpy(mcol, tf->col, sizeof(tf->col));
|
|
|
|
memcpy(mtf->uv, tf->uv, sizeof(tf->uv));
|
|
|
|
}
|
|
|
|
|
|
|
|
MEM_freeN(me->tface);
|
2012-05-07 06:32:14 +00:00
|
|
|
me->tface = NULL;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
else if (me->mcol) {
|
2012-05-07 06:32:14 +00:00
|
|
|
me->mcol = CustomData_add_layer(&me->fdata, CD_MCOL, CD_ASSIGN, me->mcol, me->totface);
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (me->tface) {
|
|
|
|
MEM_freeN(me->tface);
|
2012-05-07 06:32:14 +00:00
|
|
|
me->tface = NULL;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (a = 0, mtfacen = 0, mcoln = 0; a < me->fdata.totlayer; a++) {
|
|
|
|
layer = &me->fdata.layers[a];
|
2012-05-04 15:42:49 +00:00
|
|
|
|
|
|
|
if (layer->type == CD_MTFACE) {
|
|
|
|
if (layer->name[0] == 0) {
|
|
|
|
if (mtfacen == 0) strcpy(layer->name, "UVMap");
|
|
|
|
else BLI_snprintf(layer->name, sizeof(layer->name), "UVMap.%.3d", mtfacen);
|
|
|
|
}
|
|
|
|
mtfacen++;
|
|
|
|
}
|
|
|
|
else if (layer->type == CD_MCOL) {
|
|
|
|
if (layer->name[0] == 0) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (mcoln == 0)
|
|
|
|
strcpy(layer->name, "Col");
|
|
|
|
else
|
|
|
|
BLI_snprintf(layer->name, sizeof(layer->name), "Col.%.3d", mcoln);
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
mcoln++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-03-17 19:55:10 +00:00
|
|
|
BKE_mesh_update_customdata_pointers(me, true);
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*only copy render texface layer from active*/
|
|
|
|
static void customdata_version_243(Mesh *me)
|
|
|
|
{
|
|
|
|
CustomDataLayer *layer;
|
|
|
|
int a;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (a = 0; a < me->fdata.totlayer; a++) {
|
|
|
|
layer = &me->fdata.layers[a];
|
2012-05-04 15:42:49 +00:00
|
|
|
layer->active_rnd = layer->active;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* struct NodeImageAnim moved to ImageUser, and we make it default available */
|
|
|
|
static void do_version_ntree_242_2(bNodeTree *ntree)
|
|
|
|
{
|
|
|
|
bNode *node;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
if (ntree->type == NTREE_COMPOSIT) {
|
|
|
|
for (node = ntree->nodes.first; node; node = node->next) {
|
2014-07-20 01:30:29 +10:00
|
|
|
if (ELEM(node->type, CMP_NODE_IMAGE, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) {
|
2012-05-04 15:42:49 +00:00
|
|
|
/* only image had storage */
|
|
|
|
if (node->storage) {
|
2012-05-07 06:32:14 +00:00
|
|
|
NodeImageAnim *nia = node->storage;
|
|
|
|
ImageUser *iuser = MEM_callocN(sizeof(ImageUser), "ima user node");
|
|
|
|
|
|
|
|
iuser->frames = nia->frames;
|
|
|
|
iuser->sfra = nia->sfra;
|
2018-11-30 14:51:16 +11:00
|
|
|
iuser->offset = nia->nr - 1;
|
2012-05-07 06:32:14 +00:00
|
|
|
iuser->cycl = nia->cyclic;
|
|
|
|
iuser->ok = 1;
|
|
|
|
|
|
|
|
node->storage = iuser;
|
2012-05-04 15:42:49 +00:00
|
|
|
MEM_freeN(nia);
|
|
|
|
}
|
|
|
|
else {
|
2012-05-07 06:32:14 +00:00
|
|
|
ImageUser *iuser = node->storage = MEM_callocN(sizeof(ImageUser), "node image user");
|
|
|
|
iuser->sfra = 1;
|
|
|
|
iuser->ok = 1;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void do_version_free_effect_245(Effect *eff)
|
|
|
|
{
|
|
|
|
PartEff *paf;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
if (eff->type == EFF_PARTICLE) {
|
|
|
|
paf = (PartEff *)eff;
|
|
|
|
if (paf->keys)
|
|
|
|
MEM_freeN(paf->keys);
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
MEM_freeN(eff);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void do_version_free_effects_245(ListBase *lb)
|
|
|
|
{
|
|
|
|
Effect *eff;
|
|
|
|
|
2013-08-26 23:37:08 +00:00
|
|
|
while ((eff = BLI_pophead(lb))) {
|
2012-05-04 15:42:49 +00:00
|
|
|
do_version_free_effect_245(eff);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-01-07 11:40:44 +11:00
|
|
|
static void do_version_constraints_245(ListBase *lb)
|
|
|
|
{
|
|
|
|
bConstraint *con;
|
|
|
|
bConstraintTarget *ct;
|
|
|
|
|
|
|
|
for (con = lb->first; con; con = con->next) {
|
|
|
|
if (con->type == CONSTRAINT_TYPE_PYTHON) {
|
|
|
|
bPythonConstraint *data = (bPythonConstraint *)con->data;
|
|
|
|
if (data->tar) {
|
|
|
|
/* version patching needs to be done */
|
|
|
|
ct = MEM_callocN(sizeof(bConstraintTarget), "PyConTarget");
|
|
|
|
|
|
|
|
ct->tar = data->tar;
|
|
|
|
BLI_strncpy(ct->subtarget, data->subtarget, sizeof(ct->subtarget));
|
|
|
|
ct->space = con->tarspace;
|
|
|
|
|
|
|
|
BLI_addtail(&data->targets, ct);
|
|
|
|
data->tarnum++;
|
|
|
|
|
|
|
|
/* clear old targets to avoid problems */
|
|
|
|
data->tar = NULL;
|
|
|
|
data->subtarget[0] = '\0';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (con->type == CONSTRAINT_TYPE_LOCLIKE) {
|
|
|
|
bLocateLikeConstraint *data = (bLocateLikeConstraint *)con->data;
|
|
|
|
|
|
|
|
/* new headtail functionality makes Bone-Tip function obsolete */
|
|
|
|
if (data->flag & LOCLIKE_TIP)
|
|
|
|
con->headtail = 1.0f;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
PartEff *blo_do_version_give_parteff_245(Object *ob)
|
|
|
|
{
|
|
|
|
PartEff *paf;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
paf = ob->effect.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (paf) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (paf->type == EFF_PARTICLE)
|
|
|
|
return paf;
|
|
|
|
paf = paf->next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* NOTE: this version patch is intended for versions < 2.52.2, but was initially introduced in 2.27 already */
|
|
|
|
void blo_do_version_old_trackto_to_constraints(Object *ob)
|
|
|
|
{
|
|
|
|
/* create new trackto constraint from the relationship */
|
|
|
|
if (ob->track) {
|
2014-04-11 11:47:07 +10:00
|
|
|
bConstraint *con = BKE_constraint_add_for_object(ob, "AutoTrack", CONSTRAINT_TYPE_TRACKTO);
|
2012-05-04 15:42:49 +00:00
|
|
|
bTrackToConstraint *data = con->data;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* copy tracking settings from the object */
|
|
|
|
data->tar = ob->track;
|
|
|
|
data->reserved1 = ob->trackflag;
|
|
|
|
data->reserved2 = ob->upflag;
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* clear old track setting */
|
|
|
|
ob->track = NULL;
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
void blo_do_versions_pre250(FileData *fd, Library *lib, Main *bmain)
|
2012-05-04 15:42:49 +00:00
|
|
|
{
|
|
|
|
/* WATCH IT!!!: pointers from libdata have not been converted */
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile == 100) {
|
2012-05-04 15:42:49 +00:00
|
|
|
/* tex->extend and tex->imageflag have changed: */
|
2018-06-05 15:10:33 +02:00
|
|
|
Tex *tex = bmain->tex.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (tex) {
|
Split id->flag in two, persistent flags and runtime tags.
This is purely internal sanitizing/cleanup, no change in behavior is expected at all.
This change was also needed because we were getting short on ID flags, and
future enhancement of 'user_one' ID behavior requires two new ones.
id->flag remains for persistent data (fakeuser only, so far!), this also allows us
100% backward & forward compatibility.
New id->tag is used for most flags. Though written in .blend files, its content
is cleared at read time.
Note that .blend file version was bumped, so that we can clear runtimeflags from
old .blends, important in case we add new persistent flags in future.
Also, behavior of tags (either status ones, or whether they need to be cleared before/after use)
has been added as comments to their declaration.
Reviewers: sergey, campbellbarton
Differential Revision: https://developer.blender.org/D1683
2015-12-27 11:53:50 +01:00
|
|
|
if (tex->id.tag & LIB_TAG_NEED_LINK) {
|
2012-05-04 15:42:49 +00:00
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
if (tex->extend == 0) {
|
|
|
|
if (tex->xrepeat || tex->yrepeat) {
|
|
|
|
tex->extend = TEX_REPEAT;
|
|
|
|
}
|
2012-05-04 15:42:49 +00:00
|
|
|
else {
|
2012-05-07 06:32:14 +00:00
|
|
|
tex->extend = TEX_EXTEND;
|
|
|
|
tex->xrepeat = tex->yrepeat = 1;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
tex = tex->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 101) {
|
2012-05-04 15:42:49 +00:00
|
|
|
/* frame mapping */
|
2018-06-05 15:10:33 +02:00
|
|
|
Scene *sce = bmain->scene.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (sce) {
|
2012-05-07 06:32:14 +00:00
|
|
|
sce->r.framapto = 100;
|
|
|
|
sce->r.images = 100;
|
|
|
|
sce->r.framelen = 1.0;
|
|
|
|
sce = sce->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 103) {
|
2012-05-04 15:42:49 +00:00
|
|
|
/* new variable in object: colbits */
|
2018-06-05 15:10:33 +02:00
|
|
|
Object *ob = bmain->object.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
int a;
|
|
|
|
while (ob) {
|
2012-05-07 06:32:14 +00:00
|
|
|
ob->colbits = 0;
|
2012-05-04 15:42:49 +00:00
|
|
|
if (ob->totcol) {
|
2012-05-07 06:32:14 +00:00
|
|
|
for (a = 0; a < ob->totcol; a++) {
|
|
|
|
if (ob->mat[a])
|
2018-11-30 14:51:16 +11:00
|
|
|
ob->colbits |= (1 << a);
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
ob = ob->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 104) {
|
2012-05-04 15:42:49 +00:00
|
|
|
/* timeoffs moved */
|
2018-06-05 15:10:33 +02:00
|
|
|
Object *ob = bmain->object.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (ob) {
|
|
|
|
if (ob->transflag & 1) {
|
|
|
|
ob->transflag -= 1;
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
ob = ob->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 106) {
|
2012-05-04 15:42:49 +00:00
|
|
|
/* mcol changed */
|
2018-06-05 15:10:33 +02:00
|
|
|
Mesh *me = bmain->mesh.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (me) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (me->mcol)
|
|
|
|
vcol_to_fcol(me);
|
|
|
|
me = me->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 107) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Object *ob;
|
2018-06-05 15:10:33 +02:00
|
|
|
ob = bmain->object.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (ob) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (ob->dt == 0)
|
|
|
|
ob->dt = OB_SOLID;
|
|
|
|
ob = ob->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 109) {
|
2012-05-04 15:42:49 +00:00
|
|
|
/* new variable: gridlines */
|
2018-06-05 15:10:33 +02:00
|
|
|
bScreen *sc = bmain->screen.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (sc) {
|
2012-05-07 06:32:14 +00:00
|
|
|
ScrArea *sa = sc->areabase.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (sa) {
|
2012-05-07 06:32:14 +00:00
|
|
|
SpaceLink *sl = sa->spacedata.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (sl) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (sl->spacetype == SPACE_VIEW3D) {
|
2018-11-30 14:51:16 +11:00
|
|
|
View3D *v3d = (View3D *)sl;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
if (v3d->gridlines == 0)
|
|
|
|
v3d->gridlines = 20;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
sl = sl->next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
sa = sa->next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
sc = sc->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 134) {
|
|
|
|
Tex *tex = bmain->tex.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (tex) {
|
|
|
|
if ((tex->rfac == 0.0f) &&
|
2018-11-30 14:51:16 +11:00
|
|
|
(tex->gfac == 0.0f) &&
|
|
|
|
(tex->bfac == 0.0f))
|
2012-05-07 06:32:14 +00:00
|
|
|
{
|
2012-05-04 15:42:49 +00:00
|
|
|
tex->rfac = 1.0f;
|
|
|
|
tex->gfac = 1.0f;
|
|
|
|
tex->bfac = 1.0f;
|
|
|
|
tex->filtersize = 1.0f;
|
|
|
|
}
|
|
|
|
tex = tex->id.next;
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 140) {
|
2012-05-04 15:42:49 +00:00
|
|
|
/* r-g-b-fac in texture */
|
2018-06-05 15:10:33 +02:00
|
|
|
Tex *tex = bmain->tex.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (tex) {
|
|
|
|
if ((tex->rfac == 0.0f) &&
|
2018-11-30 14:51:16 +11:00
|
|
|
(tex->gfac == 0.0f) &&
|
|
|
|
(tex->bfac == 0.0f))
|
2012-05-07 06:32:14 +00:00
|
|
|
{
|
2012-05-04 15:42:49 +00:00
|
|
|
tex->rfac = 1.0f;
|
|
|
|
tex->gfac = 1.0f;
|
|
|
|
tex->bfac = 1.0f;
|
|
|
|
tex->filtersize = 1.0f;
|
|
|
|
}
|
|
|
|
tex = tex->id.next;
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 153) {
|
|
|
|
Scene *sce = bmain->scene.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (sce) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (sce->r.blurfac == 0.0f)
|
|
|
|
sce->r.blurfac = 1.0f;
|
|
|
|
sce = sce->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 163) {
|
|
|
|
Scene *sce = bmain->scene.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (sce) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (sce->r.frs_sec == 0)
|
|
|
|
sce->r.frs_sec = 25;
|
|
|
|
sce = sce->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 164) {
|
|
|
|
Mesh *me = bmain->mesh.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (me) {
|
2012-05-07 06:32:14 +00:00
|
|
|
me->smoothresh = 30;
|
|
|
|
me = me->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 165) {
|
|
|
|
Mesh *me = bmain->mesh.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
TFace *tface;
|
|
|
|
int nr;
|
|
|
|
char *cp;
|
|
|
|
|
|
|
|
while (me) {
|
|
|
|
if (me->tface) {
|
2012-05-07 06:32:14 +00:00
|
|
|
nr = me->totface;
|
|
|
|
tface = me->tface;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (nr--) {
|
2015-04-08 12:23:38 +10:00
|
|
|
int j;
|
|
|
|
for (j = 0; j < 4; j++) {
|
|
|
|
int k;
|
|
|
|
cp = ((char *)&tface->col[j]) + 1;
|
|
|
|
for (k = 0; k < 3; k++) {
|
|
|
|
cp[k] = (cp[k] > 126) ? 255 : cp[k] * 2;
|
|
|
|
}
|
|
|
|
}
|
2012-05-04 15:42:49 +00:00
|
|
|
|
|
|
|
tface++;
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
me = me->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 169) {
|
|
|
|
Mesh *me = bmain->mesh.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (me) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (me->subdiv == 0)
|
|
|
|
me->subdiv = 1;
|
|
|
|
me = me->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 169) {
|
|
|
|
bScreen *sc = bmain->screen.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (sc) {
|
2012-05-07 06:32:14 +00:00
|
|
|
ScrArea *sa = sc->areabase.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (sa) {
|
2012-05-07 06:32:14 +00:00
|
|
|
SpaceLink *sl = sa->spacedata.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (sl) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (sl->spacetype == SPACE_IPO) {
|
2018-11-30 14:51:16 +11:00
|
|
|
SpaceIpo *sipo = (SpaceIpo *)sl;
|
2012-05-07 06:32:14 +00:00
|
|
|
sipo->v2d.max[0] = 15000.0;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
sl = sl->next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
sa = sa->next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
sc = sc->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 170) {
|
|
|
|
Object *ob = bmain->object.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
PartEff *paf;
|
|
|
|
while (ob) {
|
|
|
|
paf = blo_do_version_give_parteff_245(ob);
|
|
|
|
if (paf) {
|
|
|
|
if (paf->staticstep == 0) {
|
2012-05-07 06:32:14 +00:00
|
|
|
paf->staticstep = 5;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
ob = ob->id.next;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 171) {
|
|
|
|
bScreen *sc = bmain->screen.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (sc) {
|
2012-05-07 06:32:14 +00:00
|
|
|
ScrArea *sa = sc->areabase.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (sa) {
|
2012-05-07 06:32:14 +00:00
|
|
|
SpaceLink *sl = sa->spacedata.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (sl) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (sl->spacetype == SPACE_TEXT) {
|
2018-11-30 14:51:16 +11:00
|
|
|
SpaceText *st = (SpaceText *)sl;
|
2012-05-07 06:32:14 +00:00
|
|
|
st->lheight = 12;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
sl = sl->next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
sa = sa->next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
sc = sc->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 173) {
|
2012-05-04 15:42:49 +00:00
|
|
|
int a, b;
|
2018-06-05 15:10:33 +02:00
|
|
|
Mesh *me = bmain->mesh.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (me) {
|
|
|
|
if (me->tface) {
|
2012-05-07 06:32:14 +00:00
|
|
|
TFace *tface = me->tface;
|
|
|
|
for (a = 0; a < me->totface; a++, tface++) {
|
|
|
|
for (b = 0; b < 4; b++) {
|
|
|
|
tface->uv[b][0] /= 32767.0f;
|
|
|
|
tface->uv[b][1] /= 32767.0f;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
me = me->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 204) {
|
2012-05-04 15:42:49 +00:00
|
|
|
bSound *sound;
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
sound = bmain->sound.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (sound) {
|
|
|
|
if (sound->volume < 0.01f) {
|
|
|
|
sound->volume = 1.0f;
|
|
|
|
}
|
|
|
|
sound = sound->id.next;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 212) {
|
2012-08-26 11:35:43 +00:00
|
|
|
bSound *sound;
|
2012-05-04 15:42:49 +00:00
|
|
|
Mesh *me;
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
sound = bmain->sound.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (sound) {
|
|
|
|
sound->max_gain = 1.0;
|
|
|
|
sound->min_gain = 0.0;
|
|
|
|
sound->distance = 1.0;
|
|
|
|
|
|
|
|
if (sound->attenuation > 0.0f)
|
|
|
|
sound->flags |= SOUND_FLAGS_3D;
|
|
|
|
else
|
|
|
|
sound->flags &= ~SOUND_FLAGS_3D;
|
|
|
|
|
|
|
|
sound = sound->id.next;
|
|
|
|
}
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
/* me->subdiv changed to reflect the actual reparametization
|
|
|
|
* better, and smeshes were removed - if it was a smesh make
|
|
|
|
* it a subsurf, and reset the subdiv level because subsurf
|
|
|
|
* takes a lot more work to calculate.
|
|
|
|
*/
|
2018-06-05 15:10:33 +02:00
|
|
|
for (me = bmain->mesh.first; me; me = me->id.next) {
|
2018-12-17 13:21:49 +11:00
|
|
|
enum {
|
|
|
|
ME_SMESH = (1 << 6),
|
|
|
|
ME_SUBSURF = (1 << 7),
|
|
|
|
};
|
2012-05-07 06:32:14 +00:00
|
|
|
if (me->flag & ME_SMESH) {
|
|
|
|
me->flag &= ~ME_SMESH;
|
|
|
|
me->flag |= ME_SUBSURF;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
me->subdiv = 1;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
else {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (me->subdiv < 2)
|
|
|
|
me->subdiv = 1;
|
2012-05-04 15:42:49 +00:00
|
|
|
else
|
|
|
|
me->subdiv--;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 220) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Mesh *me;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
/* Began using alpha component of vertex colors, but
|
|
|
|
* old file vertex colors are undefined, reset them
|
|
|
|
* to be fully opaque. -zr
|
|
|
|
*/
|
2018-06-05 15:10:33 +02:00
|
|
|
for (me = bmain->mesh.first; me; me = me->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (me->mcol) {
|
|
|
|
int i;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (i = 0; i < me->totface * 4; i++) {
|
|
|
|
MCol *mcol = &me->mcol[i];
|
|
|
|
mcol->a = 255;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
if (me->tface) {
|
|
|
|
int i, j;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (i = 0; i < me->totface; i++) {
|
2018-11-30 14:51:16 +11:00
|
|
|
TFace *tf = &((TFace *)me->tface)[i];
|
2012-05-04 15:42:49 +00:00
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (j = 0; j < 4; j++) {
|
2018-11-30 14:51:16 +11:00
|
|
|
char *col = (char *)&tf->col[j];
|
2012-05-04 15:42:49 +00:00
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
col[0] = 255;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 223) {
|
2012-05-04 15:42:49 +00:00
|
|
|
VFont *vf;
|
2018-06-05 15:10:33 +02:00
|
|
|
for (vf = bmain->vfont.first; vf; vf = vf->id.next) {
|
2015-06-17 07:06:59 +10:00
|
|
|
if (STREQ(vf->name + strlen(vf->name) - 6, ".Bfont")) {
|
2012-05-04 15:42:49 +00:00
|
|
|
strcpy(vf->name, FO_BUILTIN_NAME);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 224) {
|
2012-08-26 11:35:43 +00:00
|
|
|
bSound *sound;
|
2012-05-04 15:42:49 +00:00
|
|
|
Scene *sce;
|
|
|
|
Mesh *me;
|
|
|
|
bScreen *sc;
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sound = bmain->sound.first; sound; sound = sound->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (sound->packedfile) {
|
|
|
|
if (sound->newpackedfile == NULL) {
|
|
|
|
sound->newpackedfile = sound->packedfile;
|
|
|
|
}
|
|
|
|
sound->packedfile = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/* Make sure that old subsurf meshes don't have zero subdivision level for rendering */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (me = bmain->mesh.first; me; me = me->id.next) {
|
2018-12-17 13:21:49 +11:00
|
|
|
enum { ME_SUBSURF = (1 << 7) };
|
|
|
|
if ((me->flag & ME_SUBSURF) && (me->subdivr == 0)) {
|
2012-05-07 06:32:14 +00:00
|
|
|
me->subdivr = me->subdiv;
|
2018-12-17 13:21:49 +11:00
|
|
|
}
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sce = bmain->scene.first; sce; sce = sce->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
sce->r.stereomode = 1; // no stereo
|
|
|
|
}
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
/* some oldfile patch, moved from set_func_space */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sc = bmain->screen.first; sc; sc = sc->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
ScrArea *sa;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (sa = sc->areabase.first; sa; sa = sa->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
SpaceLink *sl;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (sl = sa->spacedata.first; sl; sl = sl->next) {
|
|
|
|
if (sl->spacetype == SPACE_IPO) {
|
2018-11-30 14:51:16 +11:00
|
|
|
SpaceSeq *sseq = (SpaceSeq *)sl;
|
2012-05-07 06:32:14 +00:00
|
|
|
sseq->v2d.keeptot = 0;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 227) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Scene *sce;
|
|
|
|
bScreen *sc;
|
|
|
|
Object *ob;
|
|
|
|
|
|
|
|
/* As of now, this insures that the transition from the old Track system
|
|
|
|
* to the new full constraint Track is painless for everyone. - theeth
|
|
|
|
*/
|
2018-06-05 15:10:33 +02:00
|
|
|
ob = bmain->object.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
|
|
|
while (ob) {
|
|
|
|
ListBase *list;
|
|
|
|
list = &ob->constraints;
|
|
|
|
|
|
|
|
/* check for already existing TrackTo constraint
|
2012-05-07 06:32:14 +00:00
|
|
|
* set their track and up flag correctly
|
|
|
|
*/
|
2012-05-04 15:42:49 +00:00
|
|
|
|
|
|
|
if (list) {
|
|
|
|
bConstraint *curcon;
|
2012-05-07 06:32:14 +00:00
|
|
|
for (curcon = list->first; curcon; curcon = curcon->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (curcon->type == CONSTRAINT_TYPE_TRACKTO) {
|
|
|
|
bTrackToConstraint *data = curcon->data;
|
|
|
|
data->reserved1 = ob->trackflag;
|
|
|
|
data->reserved2 = ob->upflag;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ob->type == OB_ARMATURE) {
|
|
|
|
if (ob->pose) {
|
|
|
|
bConstraint *curcon;
|
|
|
|
bPoseChannel *pchan;
|
2012-05-07 06:32:14 +00:00
|
|
|
for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
|
|
|
|
for (curcon = pchan->constraints.first; curcon; curcon = curcon->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (curcon->type == CONSTRAINT_TYPE_TRACKTO) {
|
|
|
|
bTrackToConstraint *data = curcon->data;
|
|
|
|
data->reserved1 = ob->trackflag;
|
|
|
|
data->reserved2 = ob->upflag;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Change Ob->Track in real TrackTo constraint */
|
|
|
|
blo_do_version_old_trackto_to_constraints(ob);
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
ob = ob->id.next;
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sce = bmain->scene.first; sce; sce = sce->id.next) {
|
2015-12-27 16:33:54 +01:00
|
|
|
sce->audio.mixrate = 48000;
|
2012-05-04 15:42:49 +00:00
|
|
|
sce->audio.flag |= AUDIO_SCRUB;
|
2012-05-07 06:32:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* patch for old wrong max view2d settings, allows zooming out more */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sc = bmain->screen.first; sc; sc = sc->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
ScrArea *sa;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (sa = sc->areabase.first; sa; sa = sa->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
SpaceLink *sl;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (sl = sa->spacedata.first; sl; sl = sl->next) {
|
|
|
|
if (sl->spacetype == SPACE_ACTION) {
|
2018-11-30 14:51:16 +11:00
|
|
|
SpaceAction *sac = (SpaceAction *)sl;
|
2012-05-07 06:32:14 +00:00
|
|
|
sac->v2d.max[0] = 32000;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
else if (sl->spacetype == SPACE_NLA) {
|
2018-11-30 14:51:16 +11:00
|
|
|
SpaceNla *sla = (SpaceNla *)sl;
|
2012-05-07 06:32:14 +00:00
|
|
|
sla->v2d.max[0] = 32000;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 228) {
|
2012-05-04 15:42:49 +00:00
|
|
|
bScreen *sc;
|
|
|
|
Object *ob;
|
|
|
|
|
|
|
|
/* As of now, this insures that the transition from the old Track system
|
2012-05-07 06:32:14 +00:00
|
|
|
* to the new full constraint Track is painless for everyone.
|
|
|
|
*/
|
2018-06-05 15:10:33 +02:00
|
|
|
ob = bmain->object.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
|
|
|
while (ob) {
|
|
|
|
ListBase *list;
|
|
|
|
list = &ob->constraints;
|
|
|
|
|
|
|
|
/* check for already existing TrackTo constraint
|
|
|
|
* set their track and up flag correctly */
|
|
|
|
|
|
|
|
if (list) {
|
|
|
|
bConstraint *curcon;
|
2012-05-07 06:32:14 +00:00
|
|
|
for (curcon = list->first; curcon; curcon = curcon->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (curcon->type == CONSTRAINT_TYPE_TRACKTO) {
|
|
|
|
bTrackToConstraint *data = curcon->data;
|
|
|
|
data->reserved1 = ob->trackflag;
|
|
|
|
data->reserved2 = ob->upflag;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ob->type == OB_ARMATURE) {
|
|
|
|
if (ob->pose) {
|
|
|
|
bConstraint *curcon;
|
|
|
|
bPoseChannel *pchan;
|
2012-05-07 06:32:14 +00:00
|
|
|
for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
|
|
|
|
for (curcon = pchan->constraints.first; curcon; curcon = curcon->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (curcon->type == CONSTRAINT_TYPE_TRACKTO) {
|
|
|
|
bTrackToConstraint *data = curcon->data;
|
|
|
|
data->reserved1 = ob->trackflag;
|
|
|
|
data->reserved2 = ob->upflag;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ob = ob->id.next;
|
|
|
|
}
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
/* convert old mainb values for new button panels */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sc = bmain->screen.first; sc; sc = sc->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
ScrArea *sa;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (sa = sc->areabase.first; sa; sa = sa->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
SpaceLink *sl;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (sl = sa->spacedata.first; sl; sl = sl->next) {
|
|
|
|
if (sl->spacetype == SPACE_BUTS) {
|
2018-11-30 14:51:16 +11:00
|
|
|
SpaceButs *sbuts = (SpaceButs *)sl;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
sbuts->v2d.maxzoom = 1.2f;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
if (sbuts->mainb == BUTS_LAMP) {
|
|
|
|
sbuts->mainb = CONTEXT_SHADING;
|
|
|
|
//sbuts->tab[CONTEXT_SHADING] = TAB_SHADING_LAMP;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
else if (sbuts->mainb == BUTS_MAT) {
|
|
|
|
sbuts->mainb = CONTEXT_SHADING;
|
|
|
|
//sbuts->tab[CONTEXT_SHADING] = TAB_SHADING_MAT;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
else if (sbuts->mainb == BUTS_TEX) {
|
|
|
|
sbuts->mainb = CONTEXT_SHADING;
|
|
|
|
//sbuts->tab[CONTEXT_SHADING] = TAB_SHADING_TEX;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
else if (sbuts->mainb == BUTS_ANIM) {
|
|
|
|
sbuts->mainb = CONTEXT_OBJECT;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
else if (sbuts->mainb == BUTS_WORLD) {
|
|
|
|
sbuts->mainb = CONTEXT_SCENE;
|
|
|
|
//sbuts->tab[CONTEXT_SCENE] = TAB_SCENE_WORLD;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
else if (sbuts->mainb == BUTS_RENDER) {
|
|
|
|
sbuts->mainb = CONTEXT_SCENE;
|
|
|
|
//sbuts->tab[CONTEXT_SCENE] = TAB_SCENE_RENDER;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
else if (sbuts->mainb == BUTS_FPAINT) {
|
|
|
|
sbuts->mainb = CONTEXT_EDITING;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
else if (sbuts->mainb == BUTS_RADIO) {
|
|
|
|
sbuts->mainb = CONTEXT_SHADING;
|
|
|
|
//sbuts->tab[CONTEXT_SHADING] = TAB_SHADING_RAD;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
else if (sbuts->mainb == BUTS_CONSTRAINT) {
|
|
|
|
sbuts->mainb = CONTEXT_OBJECT;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
else if (sbuts->mainb == BUTS_SCRIPT) {
|
|
|
|
sbuts->mainb = CONTEXT_OBJECT;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
else if (sbuts->mainb == BUTS_EDIT) {
|
|
|
|
sbuts->mainb = CONTEXT_EDITING;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2013-03-09 03:46:30 +00:00
|
|
|
else {
|
|
|
|
sbuts->mainb = CONTEXT_SCENE;
|
|
|
|
}
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* ton: made this 230 instead of 229,
|
|
|
|
* to be sure (tuho files) and this is a reliable check anyway
|
|
|
|
* nevertheless, we might need to think over a fitness (initialize)
|
2012-05-07 06:32:14 +00:00
|
|
|
* check apart from the do_versions()
|
|
|
|
*/
|
2012-05-04 15:42:49 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 230) {
|
2012-05-04 15:42:49 +00:00
|
|
|
bScreen *sc;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
/* new variable blockscale, for panels in any area */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sc = bmain->screen.first; sc; sc = sc->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
ScrArea *sa;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (sa = sc->areabase.first; sa; sa = sa->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
SpaceLink *sl;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (sl = sa->spacedata.first; sl; sl = sl->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
/* added: 5x better zoom in for action */
|
2012-05-07 06:32:14 +00:00
|
|
|
if (sl->spacetype == SPACE_ACTION) {
|
|
|
|
SpaceAction *sac = (SpaceAction *)sl;
|
|
|
|
sac->v2d.maxzoom = 50;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 231) {
|
|
|
|
bScreen *sc = bmain->screen.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
|
|
|
/* new bit flags for showing/hiding grid floor and axes */
|
|
|
|
|
|
|
|
while (sc) {
|
2012-05-07 06:32:14 +00:00
|
|
|
ScrArea *sa = sc->areabase.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (sa) {
|
2012-05-07 06:32:14 +00:00
|
|
|
SpaceLink *sl = sa->spacedata.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (sl) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (sl->spacetype == SPACE_VIEW3D) {
|
2018-11-30 14:51:16 +11:00
|
|
|
View3D *v3d = (View3D *)sl;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
if (v3d->gridflag == 0) {
|
2012-05-04 15:42:49 +00:00
|
|
|
v3d->gridflag |= V3D_SHOW_X;
|
|
|
|
v3d->gridflag |= V3D_SHOW_Y;
|
|
|
|
v3d->gridflag |= V3D_SHOW_FLOOR;
|
|
|
|
v3d->gridflag &= ~V3D_SHOW_Z;
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
sl = sl->next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
sa = sa->next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
sc = sc->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 232) {
|
|
|
|
Tex *tex = bmain->tex.first;
|
|
|
|
World *wrld = bmain->world.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
bScreen *sc;
|
|
|
|
|
|
|
|
while (tex) {
|
2018-11-30 14:51:16 +11:00
|
|
|
if ((tex->flag & (TEX_CHECKER_ODD + TEX_CHECKER_EVEN)) == 0) {
|
2012-05-04 15:42:49 +00:00
|
|
|
tex->flag |= TEX_CHECKER_ODD;
|
|
|
|
}
|
|
|
|
/* copied from kernel texture.c */
|
2012-05-07 06:32:14 +00:00
|
|
|
if (tex->ns_outscale == 0.0f) {
|
2012-05-04 15:42:49 +00:00
|
|
|
/* musgrave */
|
|
|
|
tex->mg_H = 1.0f;
|
|
|
|
tex->mg_lacunarity = 2.0f;
|
|
|
|
tex->mg_octaves = 2.0f;
|
|
|
|
tex->mg_offset = 1.0f;
|
|
|
|
tex->mg_gain = 1.0f;
|
|
|
|
tex->ns_outscale = 1.0f;
|
|
|
|
/* distnoise */
|
|
|
|
tex->dist_amount = 1.0f;
|
|
|
|
/* voronoi */
|
|
|
|
tex->vn_w1 = 1.0f;
|
|
|
|
tex->vn_mexp = 2.5f;
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
tex = tex->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
while (wrld) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (wrld->aodist == 0.0f) {
|
|
|
|
wrld->aodist = 10.0f;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
if (wrld->aoenergy == 0.0f)
|
|
|
|
wrld->aoenergy = 1.0f;
|
|
|
|
wrld = wrld->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
/* new variable blockscale, for panels in any area, do again because new
|
|
|
|
* areas didnt initialize it to 0.7 yet
|
|
|
|
*/
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sc = bmain->screen.first; sc; sc = sc->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
ScrArea *sa;
|
2012-05-07 06:32:14 +00:00
|
|
|
for (sa = sc->areabase.first; sa; sa = sa->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
SpaceLink *sl;
|
2012-05-07 06:32:14 +00:00
|
|
|
for (sl = sa->spacedata.first; sl; sl = sl->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
/* added: 5x better zoom in for nla */
|
2012-05-07 06:32:14 +00:00
|
|
|
if (sl->spacetype == SPACE_NLA) {
|
2018-11-30 14:51:16 +11:00
|
|
|
SpaceNla *snla = (SpaceNla *)sl;
|
2012-05-07 06:32:14 +00:00
|
|
|
snla->v2d.maxzoom = 50;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 233) {
|
2012-05-04 15:42:49 +00:00
|
|
|
bScreen *sc;
|
2018-06-05 15:10:33 +02:00
|
|
|
Material *ma = bmain->mat.first;
|
|
|
|
/* Object *ob = bmain->object.first; */
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
while (ma) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (ma->pr_lamp == 0)
|
|
|
|
ma->pr_lamp = 3;
|
|
|
|
ma = ma->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sc = bmain->screen.first; sc; sc = sc->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
ScrArea *sa;
|
2012-05-07 06:32:14 +00:00
|
|
|
for (sa = sc->areabase.first; sa; sa = sa->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
SpaceLink *sl;
|
2012-05-07 06:32:14 +00:00
|
|
|
for (sl = sa->spacedata.first; sl; sl = sl->next) {
|
|
|
|
if (sl->spacetype == SPACE_VIEW3D) {
|
2018-11-30 14:51:16 +11:00
|
|
|
View3D *v3d = (View3D *)sl;
|
2012-05-04 15:42:49 +00:00
|
|
|
v3d->flag |= V3D_SELECT_OUTLINE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 234) {
|
2012-05-04 15:42:49 +00:00
|
|
|
bScreen *sc;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sc = bmain->screen.first; sc; sc = sc->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
ScrArea *sa;
|
2012-05-07 06:32:14 +00:00
|
|
|
for (sa = sc->areabase.first; sa; sa = sa->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
SpaceLink *sl;
|
2012-05-07 06:32:14 +00:00
|
|
|
for (sl = sa->spacedata.first; sl; sl = sl->next) {
|
2018-12-17 13:21:49 +11:00
|
|
|
if (sl->spacetype == SPACE_TEXT) {
|
2012-05-07 06:32:14 +00:00
|
|
|
SpaceText *st = (SpaceText *)sl;
|
|
|
|
if (st->tabnumber == 0)
|
|
|
|
st->tabnumber = 2;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 235) {
|
|
|
|
Tex *tex = bmain->tex.first;
|
|
|
|
Scene *sce = bmain->scene.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
Sequence *seq;
|
|
|
|
Editing *ed;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
while (tex) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (tex->nabla == 0.0f)
|
|
|
|
tex->nabla = 0.025f;
|
|
|
|
tex = tex->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
while (sce) {
|
2012-05-07 06:32:14 +00:00
|
|
|
ed = sce->ed;
|
2012-05-04 15:42:49 +00:00
|
|
|
if (ed) {
|
2018-11-30 14:51:16 +11:00
|
|
|
SEQ_BEGIN(sce->ed, seq)
|
2012-05-04 15:42:49 +00:00
|
|
|
{
|
2012-06-07 15:49:02 +00:00
|
|
|
if (seq->type == SEQ_TYPE_IMAGE || seq->type == SEQ_TYPE_MOVIE)
|
2012-12-31 13:52:13 +00:00
|
|
|
seq->alpha_mode = SEQ_ALPHA_STRAIGHT;
|
2018-11-30 15:35:15 +11:00
|
|
|
} SEQ_END;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
sce = sce->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 236) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Object *ob;
|
2018-06-05 15:10:33 +02:00
|
|
|
Camera *cam = bmain->camera.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
|
|
|
while (cam) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (cam->ortho_scale == 0.0f) {
|
|
|
|
cam->ortho_scale = 256.0f / cam->lens;
|
|
|
|
if (cam->type == CAM_ORTHO)
|
|
|
|
printf("NOTE: ortho render has changed, tweak new Camera 'scale' value.\n");
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
cam = cam->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
/* force oops draw if depgraph was set*/
|
|
|
|
/* set time line var */
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* softbody init new vars */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ob = bmain->object.first; ob; ob = ob->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (ob->soft) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (ob->soft->defgoal == 0.0f)
|
|
|
|
ob->soft->defgoal = 0.7f;
|
|
|
|
if (ob->soft->physics_speed == 0.0f)
|
|
|
|
ob->soft->physics_speed = 1.0f;
|
|
|
|
|
|
|
|
if (ob->soft->interval == 0) {
|
|
|
|
ob->soft->interval = 2;
|
|
|
|
ob->soft->sfra = 1;
|
|
|
|
ob->soft->efra = 100;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
if (ob->soft && ob->soft->vertgroup == 0) {
|
2012-05-04 15:42:49 +00:00
|
|
|
bDeformGroup *locGroup = defgroup_find_name(ob, "SOFTGOAL");
|
|
|
|
if (locGroup) {
|
|
|
|
/* retrieve index for that group */
|
|
|
|
ob->soft->vertgroup = 1 + BLI_findindex(&ob->defbase, locGroup);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 237) {
|
2012-05-04 15:42:49 +00:00
|
|
|
bArmature *arm;
|
|
|
|
bConstraint *con;
|
|
|
|
Object *ob;
|
|
|
|
Bone *bone;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
/* armature recode checks */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (arm = bmain->armature.first; arm; arm = arm->id.next) {
|
2012-05-05 16:03:57 +00:00
|
|
|
BKE_armature_where_is(arm);
|
2012-05-04 15:42:49 +00:00
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (bone = arm->bonebase.first; bone; bone = bone->next)
|
2012-05-04 15:42:49 +00:00
|
|
|
do_version_bone_head_tail_237(bone);
|
|
|
|
}
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ob = bmain->object.first; ob; ob = ob->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (ob->parent) {
|
2012-05-07 06:32:14 +00:00
|
|
|
Object *parent = blo_do_versions_newlibadr(fd, lib, ob->parent);
|
|
|
|
if (parent && parent->type == OB_LATTICE)
|
2012-05-04 15:42:49 +00:00
|
|
|
ob->partype = PARSKEL;
|
|
|
|
}
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
/* btw. armature_rebuild_pose is further only called on leave editmode */
|
|
|
|
if (ob->type == OB_ARMATURE) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (ob->pose)
|
2018-06-05 15:10:33 +02:00
|
|
|
BKE_pose_tag_recalc(bmain, ob->pose);
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
/* cannot call stuff now (pointers!), done in setup_app_data */
|
2017-12-15 10:45:20 +01:00
|
|
|
ob->id.recalc |= ID_RECALC_ALL;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
|
|
|
/* new generic xray option */
|
2012-05-07 06:32:14 +00:00
|
|
|
arm = blo_do_versions_newlibadr(fd, lib, ob->data);
|
2012-05-04 15:42:49 +00:00
|
|
|
if (arm->flag & ARM_DRAWXRAY) {
|
|
|
|
ob->dtx |= OB_DRAWXRAY;
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
else if (ob->type == OB_MESH) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Mesh *me = blo_do_versions_newlibadr(fd, lib, ob->data);
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-12-17 13:21:49 +11:00
|
|
|
enum {
|
|
|
|
ME_SUBSURF = (1 << 7),
|
|
|
|
ME_OPT_EDGES = (1 << 8),
|
|
|
|
};
|
|
|
|
|
2018-11-30 14:51:16 +11:00
|
|
|
if ((me->flag & ME_SUBSURF)) {
|
|
|
|
SubsurfModifierData *smd = (SubsurfModifierData *)modifier_new(eModifierType_Subsurf);
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
smd->levels = MAX2(1, me->subdiv);
|
|
|
|
smd->renderLevels = MAX2(1, me->subdivr);
|
|
|
|
smd->subdivType = me->subsurftype;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
smd->modifier.mode = 0;
|
2012-05-07 06:32:14 +00:00
|
|
|
if (me->subdiv != 0)
|
2012-05-04 15:42:49 +00:00
|
|
|
smd->modifier.mode |= 1;
|
2012-05-07 06:32:14 +00:00
|
|
|
if (me->subdivr != 0)
|
2012-05-04 15:42:49 +00:00
|
|
|
smd->modifier.mode |= 2;
|
2018-12-17 13:21:49 +11:00
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
if (me->flag & ME_OPT_EDGES)
|
2012-05-04 15:42:49 +00:00
|
|
|
smd->flags |= eSubsurfModifierFlag_ControlEdges;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
BLI_addtail(&ob->modifiers, smd);
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-11-30 14:51:16 +11:00
|
|
|
modifier_unique_name(&ob->modifiers, (ModifierData *)smd);
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
/* follow path constraint needs to set the 'path' option in curves... */
|
|
|
|
for (con = ob->constraints.first; con; con = con->next) {
|
|
|
|
if (con->type == CONSTRAINT_TYPE_FOLLOWPATH) {
|
2012-05-04 15:42:49 +00:00
|
|
|
bFollowPathConstraint *data = con->data;
|
2012-05-07 06:32:14 +00:00
|
|
|
Object *obc = blo_do_versions_newlibadr(fd, lib, data->tar);
|
|
|
|
|
|
|
|
if (obc && obc->type == OB_CURVE) {
|
|
|
|
Curve *cu = blo_do_versions_newlibadr(fd, lib, obc->data);
|
|
|
|
if (cu)
|
|
|
|
cu->flag |= CU_PATH;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 238) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Lattice *lt;
|
|
|
|
Object *ob;
|
|
|
|
bArmature *arm;
|
|
|
|
Mesh *me;
|
|
|
|
Key *key;
|
2018-06-05 15:10:33 +02:00
|
|
|
Scene *sce = bmain->scene.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
|
|
|
while (sce) {
|
|
|
|
if (sce->toolsettings == NULL) {
|
|
|
|
sce->toolsettings = MEM_callocN(sizeof(struct ToolSettings), "Tool Settings Struct");
|
|
|
|
sce->toolsettings->doublimit = 0.001f;
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
sce = sce->id.next;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (lt = bmain->latt.first; lt; lt = lt->id.next) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (lt->fu == 0.0f && lt->fv == 0.0f && lt->fw == 0.0f) {
|
2012-05-04 15:42:49 +00:00
|
|
|
calc_lat_fudu(lt->flag, lt->pntsu, <->fu, <->du);
|
|
|
|
calc_lat_fudu(lt->flag, lt->pntsv, <->fv, <->dv);
|
|
|
|
calc_lat_fudu(lt->flag, lt->pntsw, <->fw, <->dw);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ob = bmain->object.first; ob; ob = ob->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
ModifierData *md;
|
|
|
|
PartEff *paf;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (md = ob->modifiers.first; md; md = md->next) {
|
|
|
|
if (md->type == eModifierType_Subsurf) {
|
2018-11-30 14:51:16 +11:00
|
|
|
SubsurfModifierData *smd = (SubsurfModifierData *)md;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
2018-11-30 14:51:16 +11:00
|
|
|
smd->flags &= ~(eSubsurfModifierFlag_Incremental | eSubsurfModifierFlag_DebugIncr);
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
if ((ob->softflag & OB_SB_ENABLE) && !modifiers_findByType(ob, eModifierType_Softbody)) {
|
|
|
|
if (ob->softflag & OB_SB_POSTDEF) {
|
2012-05-04 15:42:49 +00:00
|
|
|
md = ob->modifiers.first;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
while (md && modifierType_getInfo(md->type)->type == eModifierTypeType_OnlyDeform) {
|
2012-05-04 15:42:49 +00:00
|
|
|
md = md->next;
|
|
|
|
}
|
|
|
|
|
|
|
|
BLI_insertlinkbefore(&ob->modifiers, md, modifier_new(eModifierType_Softbody));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
BLI_addhead(&ob->modifiers, modifier_new(eModifierType_Softbody));
|
|
|
|
}
|
|
|
|
|
|
|
|
ob->softflag &= ~OB_SB_ENABLE;
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
if (ob->pose) {
|
|
|
|
bPoseChannel *pchan;
|
|
|
|
bConstraint *con;
|
2012-05-07 06:32:14 +00:00
|
|
|
for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
|
|
|
|
/* note, pchan->bone is also lib-link stuff */
|
2012-05-04 15:42:49 +00:00
|
|
|
if (pchan->limitmin[0] == 0.0f && pchan->limitmax[0] == 0.0f) {
|
2012-05-07 06:32:14 +00:00
|
|
|
pchan->limitmin[0] = pchan->limitmin[1] = pchan->limitmin[2] = -180.0f;
|
|
|
|
pchan->limitmax[0] = pchan->limitmax[1] = pchan->limitmax[2] = 180.0f;
|
|
|
|
|
|
|
|
for (con = pchan->constraints.first; con; con = con->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (con->type == CONSTRAINT_TYPE_KINEMATIC) {
|
2018-11-30 14:51:16 +11:00
|
|
|
bKinematicConstraint *data = (bKinematicConstraint *)con->data;
|
2012-05-04 15:42:49 +00:00
|
|
|
data->weight = 1.0f;
|
|
|
|
data->orientweight = 1.0f;
|
|
|
|
data->flag &= ~CONSTRAINT_IK_ROT;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* enforce conversion from old IK_TOPARENT to rootbone index */
|
2012-05-07 06:32:14 +00:00
|
|
|
data->rootbone = -1;
|
|
|
|
|
|
|
|
/* update_pose_etc handles rootbone == -1 */
|
2018-06-05 15:10:33 +02:00
|
|
|
BKE_pose_tag_recalc(bmain, ob->pose);
|
2012-05-07 06:32:14 +00:00
|
|
|
}
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
paf = blo_do_version_give_parteff_245(ob);
|
|
|
|
if (paf) {
|
|
|
|
if (paf->disp == 0)
|
|
|
|
paf->disp = 100;
|
|
|
|
if (paf->speedtex == 0)
|
|
|
|
paf->speedtex = 8;
|
|
|
|
if (paf->omat == 0)
|
|
|
|
paf->omat = 1;
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (arm = bmain->armature.first; arm; arm = arm->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
bone_version_238(&arm->bonebase);
|
|
|
|
arm->deformflag |= ARM_DEF_VGROUP;
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (me = bmain->mesh.first; me; me = me->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (!me->medge) {
|
2013-09-09 02:11:44 +00:00
|
|
|
BKE_mesh_calc_edges_legacy(me, true); /* true = use mface->edcode */
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
else {
|
2012-05-05 21:28:12 +00:00
|
|
|
BKE_mesh_strip_loose_faces(me);
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (key = bmain->key.first; key; key = key->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
KeyBlock *kb;
|
|
|
|
int index = 1;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (kb = key->block.first; kb; kb = kb->next) {
|
|
|
|
if (kb == key->refkey) {
|
|
|
|
if (kb->name[0] == 0)
|
2012-05-04 15:42:49 +00:00
|
|
|
strcpy(kb->name, "Basis");
|
|
|
|
}
|
|
|
|
else {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (kb->name[0] == 0) {
|
2012-05-04 15:42:49 +00:00
|
|
|
BLI_snprintf(kb->name, sizeof(kb->name), "Key %d", index);
|
|
|
|
}
|
|
|
|
index++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 239) {
|
2012-05-04 15:42:49 +00:00
|
|
|
bArmature *arm;
|
|
|
|
Object *ob;
|
2018-06-05 15:10:33 +02:00
|
|
|
Scene *sce = bmain->scene.first;
|
|
|
|
Camera *cam = bmain->camera.first;
|
2012-05-07 06:32:14 +00:00
|
|
|
int set_passepartout = 0;
|
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* deformflag is local in modifier now */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ob = bmain->object.first; ob; ob = ob->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
ModifierData *md;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
for (md = ob->modifiers.first; md; md = md->next) {
|
|
|
|
if (md->type == eModifierType_Armature) {
|
2018-11-30 14:51:16 +11:00
|
|
|
ArmatureModifierData *amd = (ArmatureModifierData *)md;
|
2012-05-07 06:32:14 +00:00
|
|
|
if (amd->object && amd->deformflag == 0) {
|
|
|
|
Object *oba = blo_do_versions_newlibadr(fd, lib, amd->object);
|
|
|
|
arm = blo_do_versions_newlibadr(fd, lib, oba->data);
|
|
|
|
amd->deformflag = arm->deformflag;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* updating stepsize for ghost drawing */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (arm = bmain->armature.first; arm; arm = arm->id.next) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (arm->ghostsize == 0)
|
|
|
|
arm->ghostsize = 1;
|
2012-05-04 15:42:49 +00:00
|
|
|
bone_version_239(&arm->bonebase);
|
2012-05-07 06:32:14 +00:00
|
|
|
if (arm->layer == 0)
|
|
|
|
arm->layer = 1;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
for (; sce; sce = sce->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (sce->r.scemode & R_PASSEPARTOUT) {
|
2012-05-07 06:32:14 +00:00
|
|
|
set_passepartout = 1;
|
2012-05-04 15:42:49 +00:00
|
|
|
sce->r.scemode &= ~R_PASSEPARTOUT;
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
for (; cam; cam = cam->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (set_passepartout)
|
|
|
|
cam->flag |= CAM_SHOWPASSEPARTOUT;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* make sure old cameras have title safe on */
|
2015-01-19 16:30:35 +11:00
|
|
|
if (!(cam->flag & CAM_SHOW_SAFE_MARGINS))
|
|
|
|
cam->flag |= CAM_SHOW_SAFE_MARGINS;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* set an appropriate camera passepartout alpha */
|
2012-05-07 06:32:14 +00:00
|
|
|
if (!(cam->passepartalpha))
|
|
|
|
cam->passepartalpha = 0.2f;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 241) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Object *ob;
|
|
|
|
Scene *sce;
|
|
|
|
Lamp *la;
|
|
|
|
bArmature *arm;
|
|
|
|
bNodeTree *ntree;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* updating layers still */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (arm = bmain->armature.first; arm; arm = arm->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
bone_version_239(&arm->bonebase);
|
2012-05-07 06:32:14 +00:00
|
|
|
if (arm->layer == 0)
|
|
|
|
arm->layer = 1;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sce = bmain->scene.first; sce; sce = sce->id.next) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (sce->audio.mixrate == 0)
|
2015-12-27 16:33:54 +01:00
|
|
|
sce->audio.mixrate = 48000;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2017-11-16 13:39:25 -02:00
|
|
|
/* We don't add default layer since blender2.8 because the layers
|
2017-11-22 10:52:39 -02:00
|
|
|
* are now in Scene->view_layers and a default layer is created in
|
2017-11-16 13:39:25 -02:00
|
|
|
* the doversion later on.
|
|
|
|
*/
|
|
|
|
SceneRenderLayer *srl;
|
|
|
|
/* new layer flag for sky, was default for solid */
|
|
|
|
for (srl = sce->r.layers.first; srl; srl = srl->next) {
|
|
|
|
if (srl->layflag & SCE_LAY_SOLID)
|
|
|
|
srl->layflag |= SCE_LAY_SKY;
|
2018-11-30 14:51:16 +11:00
|
|
|
srl->passflag &= (SCE_PASS_COMBINED | SCE_PASS_Z | SCE_PASS_NORMAL | SCE_PASS_VECTOR);
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* node version changes */
|
|
|
|
if (sce->nodetree)
|
|
|
|
ntree_version_241(sce->nodetree);
|
|
|
|
|
|
|
|
/* uv calculation options moved to toolsettings */
|
2013-10-08 13:07:09 +00:00
|
|
|
if (sce->toolsettings->unwrapper == 0) {
|
2012-05-04 15:42:49 +00:00
|
|
|
sce->toolsettings->uvcalc_flag = UVCALC_FILLHOLES;
|
|
|
|
sce->toolsettings->unwrapper = 1;
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ntree = bmain->nodetree.first; ntree; ntree = ntree->id.next)
|
2012-05-04 15:42:49 +00:00
|
|
|
ntree_version_241(ntree);
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (la = bmain->lamp.first; la; la = la->id.next)
|
2012-05-07 06:32:14 +00:00
|
|
|
if (la->buffers == 0)
|
|
|
|
la->buffers = 1;
|
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* for empty drawsize and drawtype */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ob = bmain->object.first; ob; ob = ob->id.next) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (ob->empty_drawsize == 0.0f) {
|
2012-05-04 15:42:49 +00:00
|
|
|
ob->empty_drawtype = OB_ARROWS;
|
|
|
|
ob->empty_drawsize = 1.0;
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* during 2.41 images with this name were used for viewer node output, lets fix that */
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile == 241) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Image *ima;
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ima = bmain->image.first; ima; ima = ima->id.next) {
|
2015-01-26 16:03:11 +01:00
|
|
|
if (STREQ(ima->name, "Compositor")) {
|
2013-03-18 18:25:05 +00:00
|
|
|
strcpy(ima->id.name + 2, "Viewer Node");
|
2012-05-04 15:42:49 +00:00
|
|
|
strcpy(ima->name, "Viewer Node");
|
|
|
|
}
|
2017-05-19 22:18:54 +10:00
|
|
|
}
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 242) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Scene *sce;
|
|
|
|
bScreen *sc;
|
|
|
|
Object *ob;
|
|
|
|
Curve *cu;
|
|
|
|
Material *ma;
|
|
|
|
Mesh *me;
|
Collections and groups unification
OVERVIEW
* In 2.7 terminology, all layers and groups are now collection datablocks.
* These collections are nestable, linkable, instanceable, overrideable, ..
which opens up new ways to set up scenes and link + override data.
* Viewport/render visibility and selectability are now a part of the collection
and shared across all view layers and linkable.
* View layers define which subset of the scene collection hierarchy is excluded
for each. For many workflows one view layer can be used, these are more of an
advanced feature now.
OUTLINER
* The outliner now has a "View Layer" display mode instead of "Collections",
which can display the collections and/or objects in the view layer.
* In this display mode, collections can be excluded with the right click menu.
These will then be greyed out and their objects will be excluded.
* To view collections not linked to any scene, the "Blender File" display mode
can be used, with the new filtering option to just see Colleciton datablocks.
* The outliner right click menus for collections and objects were reorganized.
* Drag and drop still needs to be improved. Like before, dragging the icon or
text gives different results, we'll unify this later.
LINKING AND OVERRIDES
* Collections can now be linked into the scene without creating an instance,
with the link/append operator or from the collections view in the outliner.
* Collections can get static overrides with the right click menu in the outliner,
but this is rather unreliable and not clearly communicated at the moment.
* We still need to improve the make override operator to turn collection instances
into collections with overrides directly in the scene.
PERFORMANCE
* We tried to make performance not worse than before and improve it in some
cases. The main thing that's still a bit slower is multiple scenes, we have to
change the layer syncing to only updated affected scenes.
* Collections keep a list of their parent collections for faster incremental
updates in syncing and caching.
* View layer bases are now in a object -> base hash to avoid quadratic time
lookups internally and in API functions like visible_get().
VERSIONING
* Compatibility with 2.7 files should be improved due to the new visibility
controls. Of course users may not want to set up their scenes differently
now to avoid having separate layers and groups.
* Compatibility with 2.8 is mostly there, and was tested on Eevee demo and Hero
files. There's a few things which are know to be not quite compatible, like
nested layer collections inside groups.
* The versioning code for 2.8 files is quite complicated, and isolated behind
#ifdef so it can be removed at the end of the release cycle.
KNOWN ISSUES
* The G-key group operators in the 3D viewport were left mostly as is, they
need to be modified still to fit better.
* Same for the groups panel in the object properties. This needs to be updated
still, or perhaps replaced by something better.
* Collections must all have a unique name. Less restrictive namespacing is to
be done later, we'll have to see how important this is as all objects within
the collections must also have a unique name anyway.
* Full scene copy and delete scene are exactly doing the right thing yet.
Differential Revision: https://developer.blender.org/D3383
https://code.blender.org/2018/05/collections-and-groups/
2018-04-30 15:57:22 +02:00
|
|
|
Collection *collection;
|
2012-05-04 15:42:49 +00:00
|
|
|
Nurb *nu;
|
|
|
|
BezTriple *bezt;
|
|
|
|
BPoint *bp;
|
|
|
|
bNodeTree *ntree;
|
|
|
|
int a;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sc = bmain->screen.first; sc; sc = sc->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
ScrArea *sa;
|
2012-05-07 06:32:14 +00:00
|
|
|
sa = sc->areabase.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (sa) {
|
|
|
|
SpaceLink *sl;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (sl = sa->spacedata.first; sl; sl = sl->next) {
|
|
|
|
if (sl->spacetype == SPACE_VIEW3D) {
|
2018-11-30 14:51:16 +11:00
|
|
|
View3D *v3d = (View3D *)sl;
|
2012-05-04 15:42:49 +00:00
|
|
|
if (v3d->gridsubdiv == 0)
|
|
|
|
v3d->gridsubdiv = 10;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
sa = sa->next;
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sce = bmain->scene.first; sce; sce = sce->id.next) {
|
2018-12-17 13:21:49 +11:00
|
|
|
enum {
|
|
|
|
R_THREADS = (1 << 19),
|
|
|
|
};
|
2012-05-04 15:42:49 +00:00
|
|
|
if (sce->toolsettings->select_thresh == 0.0f)
|
2012-05-07 06:32:14 +00:00
|
|
|
sce->toolsettings->select_thresh = 0.01f;
|
|
|
|
if (sce->r.threads == 0) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (sce->r.mode & R_THREADS)
|
2012-05-07 06:32:14 +00:00
|
|
|
sce->r.threads = 2;
|
2012-05-04 15:42:49 +00:00
|
|
|
else
|
2012-05-07 06:32:14 +00:00
|
|
|
sce->r.threads = 1;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
if (sce->nodetree)
|
|
|
|
ntree_version_242(sce->nodetree);
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ntree = bmain->nodetree.first; ntree; ntree = ntree->id.next)
|
2012-05-04 15:42:49 +00:00
|
|
|
ntree_version_242(ntree);
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* add default radius values to old curve points */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (cu = bmain->curve.first; cu; cu = cu->id.next) {
|
2012-05-07 06:32:14 +00:00
|
|
|
for (nu = cu->nurb.first; nu; nu = nu->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (nu) {
|
|
|
|
if (nu->bezt) {
|
2012-05-07 06:32:14 +00:00
|
|
|
for (bezt = nu->bezt, a = 0; a < nu->pntsu; a++, bezt++) {
|
|
|
|
if (!bezt->radius)
|
|
|
|
bezt->radius = 1.0;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (nu->bp) {
|
2012-05-07 06:32:14 +00:00
|
|
|
for (bp = nu->bp, a = 0; a < nu->pntsu * nu->pntsv; a++, bp++) {
|
|
|
|
if (!bp->radius)
|
|
|
|
bp->radius = 1.0;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ob = bmain->object.first; ob; ob = ob->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
ModifierData *md;
|
|
|
|
ListBase *list;
|
|
|
|
list = &ob->constraints;
|
|
|
|
|
|
|
|
/* check for already existing MinMax (floor) constraint
|
|
|
|
* and update the sticky flagging */
|
|
|
|
|
|
|
|
if (list) {
|
|
|
|
bConstraint *curcon;
|
2012-05-07 06:32:14 +00:00
|
|
|
for (curcon = list->first; curcon; curcon = curcon->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
switch (curcon->type) {
|
|
|
|
case CONSTRAINT_TYPE_MINMAX:
|
|
|
|
{
|
|
|
|
bMinMaxConstraint *data = curcon->data;
|
2012-05-07 06:32:14 +00:00
|
|
|
if (data->sticky == 1)
|
2012-05-04 15:42:49 +00:00
|
|
|
data->flag |= MINMAX_STICKY;
|
2012-05-07 06:32:14 +00:00
|
|
|
else
|
2012-05-04 15:42:49 +00:00
|
|
|
data->flag &= ~MINMAX_STICKY;
|
2015-07-18 19:02:39 +10:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
break;
|
2015-07-18 19:02:39 +10:00
|
|
|
}
|
2012-05-04 15:42:49 +00:00
|
|
|
case CONSTRAINT_TYPE_ROTLIKE:
|
|
|
|
{
|
|
|
|
bRotateLikeConstraint *data = curcon->data;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* version patch from buttons_object.c */
|
2012-05-07 06:32:14 +00:00
|
|
|
if (data->flag == 0)
|
2018-11-30 14:51:16 +11:00
|
|
|
data->flag = ROTLIKE_X | ROTLIKE_Y | ROTLIKE_Z;
|
2015-07-18 19:02:39 +10:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
break;
|
2015-07-18 19:02:39 +10:00
|
|
|
}
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ob->type == OB_ARMATURE) {
|
|
|
|
if (ob->pose) {
|
|
|
|
bConstraint *curcon;
|
|
|
|
bPoseChannel *pchan;
|
2012-05-07 06:32:14 +00:00
|
|
|
for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
|
|
|
|
for (curcon = pchan->constraints.first; curcon; curcon = curcon->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
switch (curcon->type) {
|
|
|
|
case CONSTRAINT_TYPE_MINMAX:
|
2018-11-30 14:51:16 +11:00
|
|
|
{
|
|
|
|
bMinMaxConstraint *data = curcon->data;
|
|
|
|
if (data->sticky == 1)
|
|
|
|
data->flag |= MINMAX_STICKY;
|
|
|
|
else
|
|
|
|
data->flag &= ~MINMAX_STICKY;
|
2012-05-04 15:42:49 +00:00
|
|
|
break;
|
2018-11-30 14:51:16 +11:00
|
|
|
}
|
2012-05-04 15:42:49 +00:00
|
|
|
case CONSTRAINT_TYPE_KINEMATIC:
|
2018-11-30 14:51:16 +11:00
|
|
|
{
|
|
|
|
bKinematicConstraint *data = curcon->data;
|
|
|
|
if (!(data->flag & CONSTRAINT_IK_POS)) {
|
|
|
|
data->flag |= CONSTRAINT_IK_POS;
|
|
|
|
data->flag |= CONSTRAINT_IK_STRETCH;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
break;
|
2018-11-30 14:51:16 +11:00
|
|
|
}
|
2012-05-04 15:42:49 +00:00
|
|
|
case CONSTRAINT_TYPE_ROTLIKE:
|
2018-11-30 14:51:16 +11:00
|
|
|
{
|
|
|
|
bRotateLikeConstraint *data = curcon->data;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-11-30 14:51:16 +11:00
|
|
|
/* version patch from buttons_object.c */
|
|
|
|
if (data->flag == 0)
|
|
|
|
data->flag = ROTLIKE_X | ROTLIKE_Y | ROTLIKE_Z;
|
2012-05-04 15:42:49 +00:00
|
|
|
break;
|
2018-11-30 14:51:16 +11:00
|
|
|
}
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* copy old object level track settings to curve modifers */
|
2012-05-07 06:32:14 +00:00
|
|
|
for (md = ob->modifiers.first; md; md = md->next) {
|
|
|
|
if (md->type == eModifierType_Curve) {
|
2018-11-30 14:51:16 +11:00
|
|
|
CurveModifierData *cmd = (CurveModifierData *)md;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
if (cmd->defaxis == 0)
|
2018-11-30 14:51:16 +11:00
|
|
|
cmd->defaxis = ob->trackflag + 1;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ma = bmain->mat.first; ma; ma = ma->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (ma->nodetree)
|
|
|
|
ntree_version_242(ma->nodetree);
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (me = bmain->mesh.first; me; me = me->id.next)
|
2012-05-04 15:42:49 +00:00
|
|
|
customdata_version_242(me);
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 17:02:50 +02:00
|
|
|
for (collection = bmain->collection.first; collection; collection = collection->id.next)
|
Collections and groups unification
OVERVIEW
* In 2.7 terminology, all layers and groups are now collection datablocks.
* These collections are nestable, linkable, instanceable, overrideable, ..
which opens up new ways to set up scenes and link + override data.
* Viewport/render visibility and selectability are now a part of the collection
and shared across all view layers and linkable.
* View layers define which subset of the scene collection hierarchy is excluded
for each. For many workflows one view layer can be used, these are more of an
advanced feature now.
OUTLINER
* The outliner now has a "View Layer" display mode instead of "Collections",
which can display the collections and/or objects in the view layer.
* In this display mode, collections can be excluded with the right click menu.
These will then be greyed out and their objects will be excluded.
* To view collections not linked to any scene, the "Blender File" display mode
can be used, with the new filtering option to just see Colleciton datablocks.
* The outliner right click menus for collections and objects were reorganized.
* Drag and drop still needs to be improved. Like before, dragging the icon or
text gives different results, we'll unify this later.
LINKING AND OVERRIDES
* Collections can now be linked into the scene without creating an instance,
with the link/append operator or from the collections view in the outliner.
* Collections can get static overrides with the right click menu in the outliner,
but this is rather unreliable and not clearly communicated at the moment.
* We still need to improve the make override operator to turn collection instances
into collections with overrides directly in the scene.
PERFORMANCE
* We tried to make performance not worse than before and improve it in some
cases. The main thing that's still a bit slower is multiple scenes, we have to
change the layer syncing to only updated affected scenes.
* Collections keep a list of their parent collections for faster incremental
updates in syncing and caching.
* View layer bases are now in a object -> base hash to avoid quadratic time
lookups internally and in API functions like visible_get().
VERSIONING
* Compatibility with 2.7 files should be improved due to the new visibility
controls. Of course users may not want to set up their scenes differently
now to avoid having separate layers and groups.
* Compatibility with 2.8 is mostly there, and was tested on Eevee demo and Hero
files. There's a few things which are know to be not quite compatible, like
nested layer collections inside groups.
* The versioning code for 2.8 files is quite complicated, and isolated behind
#ifdef so it can be removed at the end of the release cycle.
KNOWN ISSUES
* The G-key group operators in the 3D viewport were left mostly as is, they
need to be modified still to fit better.
* Same for the groups panel in the object properties. This needs to be updated
still, or perhaps replaced by something better.
* Collections must all have a unique name. Less restrictive namespacing is to
be done later, we'll have to see how important this is as all objects within
the collections must also have a unique name anyway.
* Full scene copy and delete scene are exactly doing the right thing yet.
Differential Revision: https://developer.blender.org/D3383
https://code.blender.org/2018/05/collections-and-groups/
2018-04-30 15:57:22 +02:00
|
|
|
if (collection->layer == 0)
|
|
|
|
collection->layer = (1 << 20) - 1;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
|
|
|
/* now, subversion control! */
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->subversionfile < 3) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Image *ima;
|
|
|
|
Tex *tex;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* Image refactor initialize */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ima = bmain->image.first; ima; ima = ima->id.next) {
|
2012-05-07 06:32:14 +00:00
|
|
|
ima->source = IMA_SRC_FILE;
|
|
|
|
ima->type = IMA_TYPE_IMAGE;
|
|
|
|
|
|
|
|
ima->gen_x = 256; ima->gen_y = 256;
|
|
|
|
ima->gen_type = 1;
|
|
|
|
|
2015-01-26 16:03:11 +01:00
|
|
|
if (STREQLEN(ima->id.name + 2, "Viewer Node", sizeof(ima->id.name) - 2)) {
|
2012-05-07 06:32:14 +00:00
|
|
|
ima->source = IMA_SRC_VIEWER;
|
|
|
|
ima->type = IMA_TYPE_COMPOSITE;
|
|
|
|
}
|
2015-01-26 16:03:11 +01:00
|
|
|
if (STREQLEN(ima->id.name + 2, "Render Result", sizeof(ima->id.name) - 2)) {
|
2012-05-07 06:32:14 +00:00
|
|
|
ima->source = IMA_SRC_VIEWER;
|
|
|
|
ima->type = IMA_TYPE_R_RESULT;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2018-06-05 15:10:33 +02:00
|
|
|
for (tex = bmain->tex.first; tex; tex = tex->id.next) {
|
2018-12-17 13:21:49 +11:00
|
|
|
enum {
|
|
|
|
TEX_ANIMCYCLIC = (1 << 6),
|
|
|
|
TEX_ANIM5 = (1 << 7),
|
|
|
|
};
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
if (tex->type == TEX_IMAGE && tex->ima) {
|
|
|
|
ima = blo_do_versions_newlibadr(fd, lib, tex->ima);
|
2018-12-17 13:21:49 +11:00
|
|
|
if (tex->imaflag & TEX_ANIM5) {
|
2012-05-07 06:32:14 +00:00
|
|
|
ima->source = IMA_SRC_MOVIE;
|
2018-12-17 13:21:49 +11:00
|
|
|
}
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
tex->iuser.frames = tex->frames;
|
|
|
|
tex->iuser.offset = tex->offset;
|
|
|
|
tex->iuser.sfra = tex->sfra;
|
2018-12-17 13:21:49 +11:00
|
|
|
tex->iuser.cycl = (tex->imaflag & TEX_ANIMCYCLIC) != 0;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sce = bmain->scene.first; sce; sce = sce->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (sce->nodetree)
|
|
|
|
do_version_ntree_242_2(sce->nodetree);
|
|
|
|
}
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ntree = bmain->nodetree.first; ntree; ntree = ntree->id.next)
|
2012-05-04 15:42:49 +00:00
|
|
|
do_version_ntree_242_2(ntree);
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ma = bmain->mat.first; ma; ma = ma->id.next)
|
2012-05-04 15:42:49 +00:00
|
|
|
if (ma->nodetree)
|
|
|
|
do_version_ntree_242_2(ma->nodetree);
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->subversionfile < 4) {
|
|
|
|
for (sce = bmain->scene.first; sce; sce = sce->id.next) {
|
2018-11-30 14:51:16 +11:00
|
|
|
sce->r.bake_mode = 1; /* prevent to include render stuff here */
|
2013-03-04 15:58:40 +00:00
|
|
|
sce->r.bake_filter = 16;
|
2012-05-07 06:32:14 +00:00
|
|
|
sce->r.bake_flag = R_BAKE_CLEAR;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 243) {
|
|
|
|
Object *ob = bmain->object.first;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
for (; ob; ob = ob->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
bDeformGroup *curdef;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
for (curdef = ob->defbase.first; curdef; curdef = curdef->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
/* replace an empty-string name with unique name */
|
|
|
|
if (curdef->name[0] == '\0') {
|
|
|
|
defgroup_unique_name(curdef, ob);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile < 243 || bmain->subversionfile < 1) {
|
2012-05-04 15:42:49 +00:00
|
|
|
ModifierData *md;
|
|
|
|
|
|
|
|
/* translate old mirror modifier axis values to new flags */
|
2012-05-07 06:32:14 +00:00
|
|
|
for (md = ob->modifiers.first; md; md = md->next) {
|
|
|
|
if (md->type == eModifierType_Mirror) {
|
2018-11-30 14:51:16 +11:00
|
|
|
MirrorModifierData *mmd = (MirrorModifierData *)md;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
|
|
|
switch (mmd->axis) {
|
|
|
|
case 0:
|
|
|
|
mmd->flag |= MOD_MIR_AXIS_X;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
mmd->flag |= MOD_MIR_AXIS_Y;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
mmd->flag |= MOD_MIR_AXIS_Z;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
mmd->axis = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* render layer added, this is not the active layer */
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 243 || bmain->subversionfile < 2) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Mesh *me;
|
2018-06-05 15:10:33 +02:00
|
|
|
for (me = bmain->mesh.first; me; me = me->id.next)
|
2012-05-04 15:42:49 +00:00
|
|
|
customdata_version_243(me);
|
2012-05-07 06:32:14 +00:00
|
|
|
}
|
2012-05-04 15:42:49 +00:00
|
|
|
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 244) {
|
2012-05-04 15:42:49 +00:00
|
|
|
bScreen *sc;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile != 244 || bmain->subversionfile < 2) {
|
2012-05-04 15:42:49 +00:00
|
|
|
/* correct older action editors - incorrect scrolling */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sc = bmain->screen.first; sc; sc = sc->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
ScrArea *sa;
|
2012-05-07 06:32:14 +00:00
|
|
|
sa = sc->areabase.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
while (sa) {
|
|
|
|
SpaceLink *sl;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (sl = sa->spacedata.first; sl; sl = sl->next) {
|
|
|
|
if (sl->spacetype == SPACE_ACTION) {
|
2018-11-30 14:51:16 +11:00
|
|
|
SpaceAction *saction = (SpaceAction *)sl;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
saction->v2d.tot.ymin = -1000.0;
|
|
|
|
saction->v2d.tot.ymax = 0.0;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
saction->v2d.cur.ymin = -75.0;
|
|
|
|
saction->v2d.cur.ymax = 5.0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
sa = sa->next;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile <= 245) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Scene *sce;
|
|
|
|
Object *ob;
|
|
|
|
Image *ima;
|
|
|
|
Lamp *la;
|
|
|
|
Material *ma;
|
|
|
|
ParticleSettings *part;
|
|
|
|
Mesh *me;
|
|
|
|
bNodeTree *ntree;
|
|
|
|
Tex *tex;
|
|
|
|
ModifierData *md;
|
|
|
|
ParticleSystem *psys;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* unless the file was created 2.44.3 but not 2.45, update the constraints */
|
2018-06-05 15:10:33 +02:00
|
|
|
if (!(bmain->versionfile == 244 && bmain->subversionfile == 3) &&
|
2018-11-30 14:51:16 +11:00
|
|
|
((bmain->versionfile < 245) || (bmain->versionfile == 245 && bmain->subversionfile == 0)) )
|
2012-05-04 15:42:49 +00:00
|
|
|
{
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ob = bmain->object.first; ob; ob = ob->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
ListBase *list;
|
|
|
|
list = &ob->constraints;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* fix up constraints due to constraint recode changes (originally at 2.44.3) */
|
|
|
|
if (list) {
|
|
|
|
bConstraint *curcon;
|
2012-05-07 06:32:14 +00:00
|
|
|
for (curcon = list->first; curcon; curcon = curcon->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
/* old CONSTRAINT_LOCAL check -> convert to CONSTRAINT_SPACE_LOCAL */
|
|
|
|
if (curcon->flag & 0x20) {
|
|
|
|
curcon->ownspace = CONSTRAINT_SPACE_LOCAL;
|
|
|
|
curcon->tarspace = CONSTRAINT_SPACE_LOCAL;
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
switch (curcon->type) {
|
|
|
|
case CONSTRAINT_TYPE_LOCLIMIT:
|
|
|
|
{
|
2018-11-30 14:51:16 +11:00
|
|
|
bLocLimitConstraint *data = (bLocLimitConstraint *)curcon->data;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* old limit without parent option for objects */
|
|
|
|
if (data->flag2)
|
|
|
|
curcon->ownspace = CONSTRAINT_SPACE_LOCAL;
|
2018-11-30 14:51:16 +11:00
|
|
|
break;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
}
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* correctly initialize constinv matrix */
|
|
|
|
unit_m4(ob->constinv);
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
if (ob->type == OB_ARMATURE) {
|
|
|
|
if (ob->pose) {
|
|
|
|
bConstraint *curcon;
|
|
|
|
bPoseChannel *pchan;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
/* make sure constraints are all up to date */
|
2012-05-07 06:32:14 +00:00
|
|
|
for (curcon = pchan->constraints.first; curcon; curcon = curcon->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
/* old CONSTRAINT_LOCAL check -> convert to CONSTRAINT_SPACE_LOCAL */
|
|
|
|
if (curcon->flag & 0x20) {
|
|
|
|
curcon->ownspace = CONSTRAINT_SPACE_LOCAL;
|
|
|
|
curcon->tarspace = CONSTRAINT_SPACE_LOCAL;
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
switch (curcon->type) {
|
|
|
|
case CONSTRAINT_TYPE_ACTION:
|
|
|
|
{
|
2018-11-30 14:51:16 +11:00
|
|
|
bActionConstraint *data = (bActionConstraint *)curcon->data;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* 'data->local' used to mean that target was in local-space */
|
|
|
|
if (data->local)
|
|
|
|
curcon->tarspace = CONSTRAINT_SPACE_LOCAL;
|
2018-11-30 14:51:16 +11:00
|
|
|
break;
|
2012-05-07 06:32:14 +00:00
|
|
|
}
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* correctly initialize constinv matrix */
|
|
|
|
unit_m4(pchan->constinv);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* fix all versions before 2.45 */
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile != 245) {
|
2012-05-04 15:42:49 +00:00
|
|
|
|
|
|
|
/* repair preview from 242 - 244*/
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ima = bmain->image.first; ima; ima = ima->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
ima->preview = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* add point caches */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ob = bmain->object.first; ob; ob = ob->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (ob->soft && !ob->soft->pointcache)
|
2012-05-07 06:32:14 +00:00
|
|
|
ob->soft->pointcache = BKE_ptcache_add(&ob->soft->ptcaches);
|
2012-05-04 15:42:49 +00:00
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (psys = ob->particlesystem.first; psys; psys = psys->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (psys->pointcache) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (psys->pointcache->flag & PTCACHE_BAKED && (psys->pointcache->flag & PTCACHE_DISK_CACHE) == 0) {
|
2012-05-04 15:42:49 +00:00
|
|
|
printf("Old memory cache isn't supported for particles, so re-bake the simulation!\n");
|
|
|
|
psys->pointcache->flag &= ~PTCACHE_BAKED;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
2012-05-07 06:32:14 +00:00
|
|
|
psys->pointcache = BKE_ptcache_add(&psys->ptcaches);
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (md = ob->modifiers.first; md; md = md->next) {
|
|
|
|
if (md->type == eModifierType_Cloth) {
|
2018-11-30 14:51:16 +11:00
|
|
|
ClothModifierData *clmd = (ClothModifierData *)md;
|
2014-01-15 06:08:44 +01:00
|
|
|
if (!clmd->point_cache) {
|
2012-05-07 06:32:14 +00:00
|
|
|
clmd->point_cache = BKE_ptcache_add(&clmd->ptcaches);
|
2014-01-15 06:08:44 +01:00
|
|
|
clmd->point_cache->step = 1;
|
|
|
|
}
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Copy over old per-level multires vertex data
|
|
|
|
* into a single vertex array in struct Multires */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (me = bmain->mesh.first; me; me = me->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (me->mr && !me->mr->verts) {
|
|
|
|
MultiresLevel *lvl = me->mr->levels.last;
|
|
|
|
if (lvl) {
|
|
|
|
me->mr->verts = lvl->verts;
|
|
|
|
lvl->verts = NULL;
|
|
|
|
/* Don't need the other vert arrays */
|
|
|
|
for (lvl = lvl->prev; lvl; lvl = lvl->prev) {
|
|
|
|
MEM_freeN(lvl->verts);
|
|
|
|
lvl->verts = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile != 245 || bmain->subversionfile < 1) {
|
|
|
|
for (la = bmain->lamp.first; la; la = la->id.next) {
|
Remove Blender Internal and legacy viewport from Blender 2.8.
Brecht authored this commit, but he gave me the honours to actually
do it. Here it goes; Blender Internal. Bye bye, you did great!
* Point density, voxel data, ocean, environment map textures were removed,
as these only worked within BI rendering. Note that the ocean modifier
and the Cycles point density shader node continue to work.
* Dynamic paint using material shading was removed, as this only worked
with BI. If we ever wanted to support this again probably it should go
through the baking API.
* GPU shader export through the Python API was removed. This only worked
for the old BI GLSL shaders, which no longer exists. Doing something
similar for Eevee would be significantly more complicated because it
uses a lot of multiplass rendering and logic outside the shader, it's
probably impractical.
* Collada material import / export code is mostly gone, as it only worked
for BI materials. We need to add Cycles / Eevee material support at some
point.
* The mesh noise operator was removed since it only worked with BI
material texture slots. A displacement modifier can be used instead.
* The delete texture paint slot operator was removed since it only worked
for BI material texture slots. Could be added back with node support.
* Not all legacy viewport features are supported in the new viewport, but
their code was removed. If we need to bring anything back we can look at
older git revisions.
* There is some legacy viewport code that I could not remove yet, and some
that I probably missed.
* Shader node execution code was left mostly intact, even though it is not
used anywhere now. We may eventually use this to replace the texture
nodes with Cycles / Eevee shader nodes.
* The Cycles Bake panel now includes settings for baking multires normal
and displacement maps. The underlying code needs to be merged properly,
and we plan to add back support for multires AO baking and add support
to Cycles baking for features like vertex color, displacement, and other
missing baking features.
* This commit removes DNA and the Python API for BI material, lamp, world
and scene settings. This breaks a lot of addons.
* There is more DNA that can be removed or renamed, where Cycles or Eevee
are reusing some old BI properties but the names are not really correct
anymore.
* Texture slots for materials, lamps and world were removed. They remain
for brushes, particles and freestyle linestyles.
* 'BLENDER_RENDER' remains in the COMPAT_ENGINES of UI panels. Cycles and
other renderers use this to find all panels to show, minus a few panels
that they have their own replacement for.
2018-04-19 17:34:44 +02:00
|
|
|
la->falloff_type = LA_FALLOFF_INVLINEAR;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
if (la->curfalloff == NULL) {
|
|
|
|
la->curfalloff = curvemapping_add(1, 0.0f, 1.0f, 1.0f, 0.0f);
|
|
|
|
curvemapping_initialize(la->curfalloff);
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ma = bmain->mat.first; ma; ma = ma->id.next) {
|
Remove Blender Internal and legacy viewport from Blender 2.8.
Brecht authored this commit, but he gave me the honours to actually
do it. Here it goes; Blender Internal. Bye bye, you did great!
* Point density, voxel data, ocean, environment map textures were removed,
as these only worked within BI rendering. Note that the ocean modifier
and the Cycles point density shader node continue to work.
* Dynamic paint using material shading was removed, as this only worked
with BI. If we ever wanted to support this again probably it should go
through the baking API.
* GPU shader export through the Python API was removed. This only worked
for the old BI GLSL shaders, which no longer exists. Doing something
similar for Eevee would be significantly more complicated because it
uses a lot of multiplass rendering and logic outside the shader, it's
probably impractical.
* Collada material import / export code is mostly gone, as it only worked
for BI materials. We need to add Cycles / Eevee material support at some
point.
* The mesh noise operator was removed since it only worked with BI
material texture slots. A displacement modifier can be used instead.
* The delete texture paint slot operator was removed since it only worked
for BI material texture slots. Could be added back with node support.
* Not all legacy viewport features are supported in the new viewport, but
their code was removed. If we need to bring anything back we can look at
older git revisions.
* There is some legacy viewport code that I could not remove yet, and some
that I probably missed.
* Shader node execution code was left mostly intact, even though it is not
used anywhere now. We may eventually use this to replace the texture
nodes with Cycles / Eevee shader nodes.
* The Cycles Bake panel now includes settings for baking multires normal
and displacement maps. The underlying code needs to be merged properly,
and we plan to add back support for multires AO baking and add support
to Cycles baking for features like vertex color, displacement, and other
missing baking features.
* This commit removes DNA and the Python API for BI material, lamp, world
and scene settings. This breaks a lot of addons.
* There is more DNA that can be removed or renamed, where Cycles or Eevee
are reusing some old BI properties but the names are not really correct
anymore.
* Texture slots for materials, lamps and world were removed. They remain
for brushes, particles and freestyle linestyles.
* 'BLENDER_RENDER' remains in the COMPAT_ENGINES of UI panels. Cycles and
other renderers use this to find all panels to show, minus a few panels
that they have their own replacement for.
2018-04-19 17:34:44 +02:00
|
|
|
if (ma->gloss_mir == 0.0f) {
|
|
|
|
ma->gloss_mir = 1.0f;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (part = bmain->particle.first; part; part = part->id.next) {
|
2012-05-07 06:32:14 +00:00
|
|
|
if (part->ren_child_nbr == 0)
|
|
|
|
part->ren_child_nbr = part->child_nbr;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sce = bmain->scene.first; sce; sce = sce->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (sce->nodetree)
|
|
|
|
ntree_version_245(fd, lib, sce->nodetree);
|
|
|
|
|
Remove Blender Internal and legacy viewport from Blender 2.8.
Brecht authored this commit, but he gave me the honours to actually
do it. Here it goes; Blender Internal. Bye bye, you did great!
* Point density, voxel data, ocean, environment map textures were removed,
as these only worked within BI rendering. Note that the ocean modifier
and the Cycles point density shader node continue to work.
* Dynamic paint using material shading was removed, as this only worked
with BI. If we ever wanted to support this again probably it should go
through the baking API.
* GPU shader export through the Python API was removed. This only worked
for the old BI GLSL shaders, which no longer exists. Doing something
similar for Eevee would be significantly more complicated because it
uses a lot of multiplass rendering and logic outside the shader, it's
probably impractical.
* Collada material import / export code is mostly gone, as it only worked
for BI materials. We need to add Cycles / Eevee material support at some
point.
* The mesh noise operator was removed since it only worked with BI
material texture slots. A displacement modifier can be used instead.
* The delete texture paint slot operator was removed since it only worked
for BI material texture slots. Could be added back with node support.
* Not all legacy viewport features are supported in the new viewport, but
their code was removed. If we need to bring anything back we can look at
older git revisions.
* There is some legacy viewport code that I could not remove yet, and some
that I probably missed.
* Shader node execution code was left mostly intact, even though it is not
used anywhere now. We may eventually use this to replace the texture
nodes with Cycles / Eevee shader nodes.
* The Cycles Bake panel now includes settings for baking multires normal
and displacement maps. The underlying code needs to be merged properly,
and we plan to add back support for multires AO baking and add support
to Cycles baking for features like vertex color, displacement, and other
missing baking features.
* This commit removes DNA and the Python API for BI material, lamp, world
and scene settings. This breaks a lot of addons.
* There is more DNA that can be removed or renamed, where Cycles or Eevee
are reusing some old BI properties but the names are not really correct
anymore.
* Texture slots for materials, lamps and world were removed. They remain
for brushes, particles and freestyle linestyles.
* 'BLENDER_RENDER' remains in the COMPAT_ENGINES of UI panels. Cycles and
other renderers use this to find all panels to show, minus a few panels
that they have their own replacement for.
2018-04-19 17:34:44 +02:00
|
|
|
if (sce->r.simplify_subsurf == 0) {
|
2012-05-07 06:32:14 +00:00
|
|
|
sce->r.simplify_subsurf = 6;
|
|
|
|
sce->r.simplify_particles = 1.0f;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ntree = bmain->nodetree.first; ntree; ntree = ntree->id.next)
|
2012-05-04 15:42:49 +00:00
|
|
|
ntree_version_245(fd, lib, ntree);
|
|
|
|
|
|
|
|
/* fix for temporary flag changes during 245 cycle */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ima = bmain->image.first; ima; ima = ima->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (ima->flag & IMA_OLD_PREMUL) {
|
|
|
|
ima->flag &= ~IMA_OLD_PREMUL;
|
2012-12-31 13:52:13 +00:00
|
|
|
ima->alpha_mode = IMA_ALPHA_STRAIGHT;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (tex = bmain->tex.first; tex; tex = tex->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (tex->iuser.flag & IMA_OLD_PREMUL) {
|
|
|
|
tex->iuser.flag &= ~IMA_OLD_PREMUL;
|
|
|
|
}
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
ima = blo_do_versions_newlibadr(fd, lib, tex->ima);
|
2012-05-04 15:42:49 +00:00
|
|
|
if (ima && (tex->iuser.flag & IMA_DO_PREMUL)) {
|
|
|
|
ima->flag &= ~IMA_OLD_PREMUL;
|
2012-12-31 13:52:13 +00:00
|
|
|
ima->alpha_mode = IMA_ALPHA_STRAIGHT;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if ((bmain->versionfile < 245) || (bmain->versionfile == 245 && bmain->subversionfile < 2)) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Image *ima;
|
|
|
|
|
|
|
|
/* initialize 1:1 Aspect */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ima = bmain->image.first; ima; ima = ima->id.next) {
|
2012-05-07 06:32:14 +00:00
|
|
|
ima->aspx = ima->aspy = 1.0f;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if ((bmain->versionfile < 245) || (bmain->versionfile == 245 && bmain->subversionfile < 4)) {
|
2012-05-04 15:42:49 +00:00
|
|
|
bArmature *arm;
|
|
|
|
ModifierData *md;
|
|
|
|
Object *ob;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (arm = bmain->armature.first; arm; arm = arm->id.next)
|
2012-05-04 15:42:49 +00:00
|
|
|
arm->deformflag |= ARM_DEF_B_BONE_REST;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ob = bmain->object.first; ob; ob = ob->id.next) {
|
2012-05-07 06:32:14 +00:00
|
|
|
for (md = ob->modifiers.first; md; md = md->next) {
|
|
|
|
if (md->type == eModifierType_Armature)
|
2018-11-30 14:51:16 +11:00
|
|
|
((ArmatureModifierData *)md)->deformflag |= ARM_DEF_B_BONE_REST;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if ((bmain->versionfile < 245) || (bmain->versionfile == 245 && bmain->subversionfile < 5)) {
|
2012-05-04 15:42:49 +00:00
|
|
|
/* foreground color needs to be something other then black */
|
|
|
|
Scene *sce;
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sce = bmain->scene.first; sce; sce = sce->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
sce->r.fg_stamp[0] = sce->r.fg_stamp[1] = sce->r.fg_stamp[2] = 0.8f;
|
|
|
|
sce->r.fg_stamp[3] = 1.0f; /* don't use text alpha yet */
|
|
|
|
sce->r.bg_stamp[3] = 0.25f; /* make sure the background has full alpha */
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if ((bmain->versionfile < 245) || (bmain->versionfile == 245 && bmain->subversionfile < 6)) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Scene *sce;
|
|
|
|
/* fix frs_sec_base */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sce = bmain->scene.first; sce; sce = sce->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (sce->r.frs_sec_base == 0) {
|
|
|
|
sce->r.frs_sec_base = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if ((bmain->versionfile < 245) || (bmain->versionfile == 245 && bmain->subversionfile < 7)) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Object *ob;
|
|
|
|
bPoseChannel *pchan;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ob = bmain->object.first; ob; ob = ob->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (ob->pose) {
|
2012-05-07 06:32:14 +00:00
|
|
|
for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
|
2015-01-07 11:40:44 +11:00
|
|
|
do_version_constraints_245(&pchan->constraints);
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2015-01-07 11:40:44 +11:00
|
|
|
do_version_constraints_245(&ob->constraints);
|
2012-05-04 15:42:49 +00:00
|
|
|
|
|
|
|
if (ob->soft && ob->soft->keys) {
|
|
|
|
SoftBody *sb = ob->soft;
|
|
|
|
int k;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (k = 0; k < sb->totkey; k++) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (sb->keys[k])
|
|
|
|
MEM_freeN(sb->keys[k]);
|
|
|
|
}
|
|
|
|
|
|
|
|
MEM_freeN(sb->keys);
|
|
|
|
|
|
|
|
sb->keys = NULL;
|
|
|
|
sb->totkey = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if ((bmain->versionfile < 245) || (bmain->versionfile == 245 && bmain->subversionfile < 8)) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Scene *sce;
|
|
|
|
Object *ob;
|
2012-05-07 06:32:14 +00:00
|
|
|
PartEff *paf = NULL;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ob = bmain->object.first; ob; ob = ob->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (ob->soft && ob->soft->keys) {
|
|
|
|
SoftBody *sb = ob->soft;
|
|
|
|
int k;
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (k = 0; k < sb->totkey; k++) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (sb->keys[k])
|
|
|
|
MEM_freeN(sb->keys[k]);
|
|
|
|
}
|
|
|
|
|
|
|
|
MEM_freeN(sb->keys);
|
|
|
|
|
|
|
|
sb->keys = NULL;
|
|
|
|
sb->totkey = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* convert old particles to new system */
|
|
|
|
if ((paf = blo_do_version_give_parteff_245(ob))) {
|
|
|
|
ParticleSystem *psys;
|
|
|
|
ModifierData *md;
|
|
|
|
ParticleSystemModifierData *psmd;
|
|
|
|
ParticleSettings *part;
|
|
|
|
|
|
|
|
/* create new particle system */
|
|
|
|
psys = MEM_callocN(sizeof(ParticleSystem), "particle_system");
|
|
|
|
psys->pointcache = BKE_ptcache_add(&psys->ptcaches);
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
part = psys->part = BKE_particlesettings_add(bmain, "ParticleSettings");
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* needed for proper libdata lookup */
|
|
|
|
blo_do_versions_oldnewmap_insert(fd->libmap, psys->part, psys->part, 0);
|
2012-05-07 06:32:14 +00:00
|
|
|
part->id.lib = ob->id.lib;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
|
|
|
part->id.us--;
|
Split id->flag in two, persistent flags and runtime tags.
This is purely internal sanitizing/cleanup, no change in behavior is expected at all.
This change was also needed because we were getting short on ID flags, and
future enhancement of 'user_one' ID behavior requires two new ones.
id->flag remains for persistent data (fakeuser only, so far!), this also allows us
100% backward & forward compatibility.
New id->tag is used for most flags. Though written in .blend files, its content
is cleared at read time.
Note that .blend file version was bumped, so that we can clear runtimeflags from
old .blends, important in case we add new persistent flags in future.
Also, behavior of tags (either status ones, or whether they need to be cleared before/after use)
has been added as comments to their declaration.
Reviewers: sergey, campbellbarton
Differential Revision: https://developer.blender.org/D1683
2015-12-27 11:53:50 +01:00
|
|
|
part->id.tag |= (ob->id.tag & LIB_TAG_NEED_LINK);
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
psys->totpart = 0;
|
2013-12-10 12:59:04 +11:00
|
|
|
psys->flag = PSYS_CURRENT;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
|
|
|
BLI_addtail(&ob->particlesystem, psys);
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
md = modifier_new(eModifierType_ParticleSystem);
|
2014-11-16 13:57:58 +01:00
|
|
|
BLI_snprintf(md->name, sizeof(md->name), "ParticleSystem %i", BLI_listbase_count(&ob->particlesystem));
|
2018-11-30 14:51:16 +11:00
|
|
|
psmd = (ParticleSystemModifierData *)md;
|
2012-05-07 06:32:14 +00:00
|
|
|
psmd->psys = psys;
|
2012-05-04 15:42:49 +00:00
|
|
|
BLI_addtail(&ob->modifiers, md);
|
|
|
|
|
|
|
|
/* convert settings from old particle system */
|
|
|
|
/* general settings */
|
|
|
|
part->totpart = MIN2(paf->totpart, 100000);
|
|
|
|
part->sta = paf->sta;
|
|
|
|
part->end = paf->end;
|
|
|
|
part->lifetime = paf->lifetime;
|
|
|
|
part->randlife = paf->randlife;
|
|
|
|
psys->seed = paf->seed;
|
|
|
|
part->disp = paf->disp;
|
|
|
|
part->omat = paf->mat[0];
|
|
|
|
part->hair_step = paf->totkey;
|
|
|
|
|
|
|
|
part->eff_group = paf->group;
|
|
|
|
|
|
|
|
/* old system didn't interpolate between keypoints at render time */
|
|
|
|
part->draw_step = part->ren_step = 0;
|
|
|
|
|
|
|
|
/* physics */
|
|
|
|
part->normfac = paf->normfac * 25.0f;
|
|
|
|
part->obfac = paf->obfac;
|
|
|
|
part->randfac = paf->randfac * 25.0f;
|
|
|
|
part->dampfac = paf->damp;
|
|
|
|
copy_v3_v3(part->acc, paf->force);
|
|
|
|
|
|
|
|
/* flags */
|
|
|
|
if (paf->stype & PAF_VECT) {
|
|
|
|
if (paf->flag & PAF_STATIC) {
|
|
|
|
/* new hair lifetime is always 100.0f */
|
|
|
|
float fac = paf->lifetime / 100.0f;
|
|
|
|
|
|
|
|
part->draw_as = PART_DRAW_PATH;
|
|
|
|
part->type = PART_HAIR;
|
2018-12-06 17:52:37 +01:00
|
|
|
psys->recalc |= ID_RECALC_PSYS_REDO;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
|
|
|
part->normfac *= fac;
|
|
|
|
part->randfac *= fac;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
part->draw_as = PART_DRAW_LINE;
|
|
|
|
part->draw |= PART_DRAW_VEL_LENGTH;
|
|
|
|
part->draw_line[1] = 0.04f;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
part->rotmode = PART_ROT_VEL;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
part->flag |= (paf->flag & PAF_BSPLINE) ? PART_HAIR_BSPLINE : 0;
|
|
|
|
part->flag |= (paf->flag & PAF_TRAND) ? PART_TRAND : 0;
|
|
|
|
part->flag |= (paf->flag & PAF_EDISTR) ? PART_EDISTR : 0;
|
|
|
|
part->flag |= (paf->flag & PAF_UNBORN) ? PART_UNBORN : 0;
|
|
|
|
part->flag |= (paf->flag & PAF_DIED) ? PART_DIED : 0;
|
|
|
|
part->from |= (paf->flag & PAF_FACE) ? PART_FROM_FACE : 0;
|
|
|
|
part->draw |= (paf->flag & PAF_SHOWE) ? PART_DRAW_EMITTER : 0;
|
|
|
|
|
|
|
|
psys->vgroup[PSYS_VG_DENSITY] = paf->vertgroup;
|
|
|
|
psys->vgroup[PSYS_VG_VEL] = paf->vertgroup_v;
|
|
|
|
psys->vgroup[PSYS_VG_LENGTH] = paf->vertgroup_v;
|
|
|
|
|
|
|
|
/* dupliobjects */
|
|
|
|
if (ob->transflag & OB_DUPLIVERTS) {
|
2018-06-05 15:10:33 +02:00
|
|
|
Object *dup = bmain->object.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
for (; dup; dup = dup->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (ob == blo_do_versions_newlibadr(fd, lib, dup->parent)) {
|
|
|
|
part->dup_ob = dup;
|
|
|
|
ob->transflag |= OB_DUPLIPARTS;
|
|
|
|
ob->transflag &= ~OB_DUPLIVERTS;
|
|
|
|
|
|
|
|
part->draw_as = PART_DRAW_OB;
|
|
|
|
|
|
|
|
/* needed for proper libdata lookup */
|
|
|
|
blo_do_versions_oldnewmap_insert(fd->libmap, dup, dup, 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
|
|
|
|
if (fluidmd && fluidmd->fss && fluidmd->fss->type == OB_FLUIDSIM_PARTICLE)
|
|
|
|
part->type = PART_FLUID;
|
|
|
|
}
|
|
|
|
|
|
|
|
do_version_free_effects_245(&ob->effect);
|
|
|
|
|
|
|
|
printf("Old particle system converted to new system.\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sce = bmain->scene.first; sce; sce = sce->id.next) {
|
2012-05-07 06:32:14 +00:00
|
|
|
ParticleEditSettings *pset = &sce->toolsettings->particle;
|
2012-05-04 15:42:49 +00:00
|
|
|
int a;
|
|
|
|
|
|
|
|
if (pset->brush[0].size == 0) {
|
2018-11-30 14:51:16 +11:00
|
|
|
pset->flag = PE_KEEP_LENGTHS | PE_LOCK_FIRST | PE_DEFLECT_EMITTER;
|
2012-05-07 06:32:14 +00:00
|
|
|
pset->emitterdist = 0.25f;
|
|
|
|
pset->totrekey = 5;
|
|
|
|
pset->totaddkey = 5;
|
|
|
|
pset->brushtype = PE_BRUSH_NONE;
|
2012-05-04 15:42:49 +00:00
|
|
|
|
2018-01-18 14:02:26 +11:00
|
|
|
for (a = 0; a < ARRAY_SIZE(pset->brush); a++) {
|
2012-05-07 06:32:14 +00:00
|
|
|
pset->brush[a].strength = 50;
|
|
|
|
pset->brush[a].size = 50;
|
|
|
|
pset->brush[a].step = 10;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
pset->brush[PE_BRUSH_CUT].strength = 100;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if ((bmain->versionfile < 245) || (bmain->versionfile == 245 && bmain->subversionfile < 10)) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Object *ob;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* dupliface scale */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ob = bmain->object.first; ob; ob = ob->id.next)
|
2012-05-04 15:42:49 +00:00
|
|
|
ob->dupfacesca = 1.0f;
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if ((bmain->versionfile < 245) || (bmain->versionfile == 245 && bmain->subversionfile < 11)) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Object *ob;
|
|
|
|
bActionStrip *strip;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
/* nla-strips - scale */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ob = bmain->object.first; ob; ob = ob->id.next) {
|
2012-05-07 06:32:14 +00:00
|
|
|
for (strip = ob->nlastrips.first; strip; strip = strip->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
float length, actlength, repeat;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
if (strip->flag & ACTSTRIP_USESTRIDE)
|
2012-05-07 06:32:14 +00:00
|
|
|
repeat = 1.0f;
|
2012-05-04 15:42:49 +00:00
|
|
|
else
|
2012-05-07 06:32:14 +00:00
|
|
|
repeat = strip->repeat;
|
|
|
|
|
2018-11-30 14:51:16 +11:00
|
|
|
length = strip->end - strip->start;
|
2012-05-07 06:32:14 +00:00
|
|
|
if (length == 0.0f)
|
|
|
|
length = 1.0f;
|
2018-11-30 14:51:16 +11:00
|
|
|
actlength = strip->actend - strip->actstart;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
strip->scale = length / (repeat * actlength);
|
2012-05-07 06:32:14 +00:00
|
|
|
if (strip->scale == 0.0f)
|
|
|
|
strip->scale = 1.0f;
|
|
|
|
}
|
2012-05-04 15:42:49 +00:00
|
|
|
if (ob->soft) {
|
|
|
|
ob->soft->inpush = ob->soft->inspring;
|
2012-05-07 06:32:14 +00:00
|
|
|
ob->soft->shearstiff = 1.0f;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if ((bmain->versionfile < 245) || (bmain->versionfile == 245 && bmain->subversionfile < 14)) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Scene *sce;
|
|
|
|
Sequence *seq;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sce = bmain->scene.first; sce; sce = sce->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
SEQ_BEGIN (sce->ed, seq)
|
|
|
|
{
|
|
|
|
if (seq->blend_mode == 0)
|
|
|
|
seq->blend_opacity = 100.0f;
|
2018-11-30 15:35:15 +11:00
|
|
|
} SEQ_END;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
/* fix broken group lengths in id properties */
|
2018-06-05 15:10:33 +02:00
|
|
|
if ((bmain->versionfile < 245) || (bmain->versionfile == 245 && bmain->subversionfile < 15)) {
|
|
|
|
idproperties_fix_group_lengths(bmain->scene);
|
|
|
|
idproperties_fix_group_lengths(bmain->library);
|
|
|
|
idproperties_fix_group_lengths(bmain->object);
|
|
|
|
idproperties_fix_group_lengths(bmain->mesh);
|
|
|
|
idproperties_fix_group_lengths(bmain->curve);
|
|
|
|
idproperties_fix_group_lengths(bmain->mball);
|
|
|
|
idproperties_fix_group_lengths(bmain->mat);
|
|
|
|
idproperties_fix_group_lengths(bmain->tex);
|
|
|
|
idproperties_fix_group_lengths(bmain->image);
|
|
|
|
idproperties_fix_group_lengths(bmain->latt);
|
|
|
|
idproperties_fix_group_lengths(bmain->lamp);
|
|
|
|
idproperties_fix_group_lengths(bmain->camera);
|
|
|
|
idproperties_fix_group_lengths(bmain->ipo);
|
|
|
|
idproperties_fix_group_lengths(bmain->key);
|
|
|
|
idproperties_fix_group_lengths(bmain->world);
|
|
|
|
idproperties_fix_group_lengths(bmain->screen);
|
|
|
|
idproperties_fix_group_lengths(bmain->vfont);
|
|
|
|
idproperties_fix_group_lengths(bmain->text);
|
|
|
|
idproperties_fix_group_lengths(bmain->sound);
|
2018-06-05 17:02:50 +02:00
|
|
|
idproperties_fix_group_lengths(bmain->collection);
|
2018-06-05 15:10:33 +02:00
|
|
|
idproperties_fix_group_lengths(bmain->armature);
|
|
|
|
idproperties_fix_group_lengths(bmain->action);
|
|
|
|
idproperties_fix_group_lengths(bmain->nodetree);
|
|
|
|
idproperties_fix_group_lengths(bmain->brush);
|
|
|
|
idproperties_fix_group_lengths(bmain->particle);
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
/* convert fluids to modifier */
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile < 246 || (bmain->versionfile == 246 && bmain->subversionfile < 1)) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Object *ob;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ob = bmain->object.first; ob; ob = ob->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (ob->fluidsimSettings) {
|
|
|
|
FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifier_new(eModifierType_Fluidsim);
|
|
|
|
BLI_addhead(&ob->modifiers, (ModifierData *)fluidmd);
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
MEM_freeN(fluidmd->fss);
|
|
|
|
fluidmd->fss = MEM_dupallocN(ob->fluidsimSettings);
|
|
|
|
fluidmd->fss->ipo = blo_do_versions_newlibadr_us(fd, ob->id.lib, ob->fluidsimSettings->ipo);
|
|
|
|
MEM_freeN(ob->fluidsimSettings);
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
fluidmd->fss->lastgoodframe = INT_MAX;
|
|
|
|
fluidmd->fss->flag = 0;
|
|
|
|
fluidmd->fss->meshVelocities = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile < 246 || (bmain->versionfile == 246 && bmain->subversionfile < 1)) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Object *ob;
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ob = bmain->object.first; ob; ob = ob->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (ob->pd && (ob->pd->forcefield == PFIELD_WIND))
|
|
|
|
ob->pd->f_noise = 0.0f;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* set the curve radius interpolation to 2.47 default - easy */
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile < 247 || (bmain->versionfile == 247 && bmain->subversionfile < 6)) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Curve *cu;
|
|
|
|
Nurb *nu;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
for (cu = bmain->curve.first; cu; cu = cu->id.next) {
|
2012-05-07 06:32:14 +00:00
|
|
|
for (nu = cu->nurb.first; nu; nu = nu->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (nu) {
|
|
|
|
nu->radius_interp = 3;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* resolu and resolv are now used differently for surfaces
|
|
|
|
* rather than using the resolution to define the entire number of divisions,
|
|
|
|
* use it for the number of divisions per segment
|
|
|
|
*/
|
|
|
|
if (nu->pntsv > 1) {
|
2018-11-30 14:51:16 +11:00
|
|
|
nu->resolu = MAX2(1, (int)(((float)nu->resolu / (float)nu->pntsu) + 0.5f) );
|
|
|
|
nu->resolv = MAX2(1, (int)(((float)nu->resolv / (float)nu->pntsv) + 0.5f) );
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile < 248 || (bmain->versionfile == 248 && bmain->subversionfile < 2)) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Scene *sce;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* Note, these will need to be added for painting */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sce = bmain->scene.first; sce; sce = sce->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
sce->toolsettings->imapaint.seam_bleed = 2;
|
|
|
|
sce->toolsettings->imapaint.normal_angle = 80;
|
|
|
|
}
|
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile < 248 || (bmain->versionfile == 248 && bmain->subversionfile < 3)) {
|
2012-05-04 15:42:49 +00:00
|
|
|
bScreen *sc;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
/* adjust default settings for Animation Editors */
|
2018-06-05 15:10:33 +02:00
|
|
|
for (sc = bmain->screen.first; sc; sc = sc->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
ScrArea *sa;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
for (sa = sc->areabase.first; sa; sa = sa->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
SpaceLink *sl;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
|
|
|
for (sl = sa->spacedata.first; sl; sl = sl->next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
switch (sl->spacetype) {
|
|
|
|
case SPACE_ACTION:
|
2018-11-30 14:51:16 +11:00
|
|
|
{
|
|
|
|
SpaceAction *sact = (SpaceAction *)sl;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2018-11-30 14:51:16 +11:00
|
|
|
sact->mode = SACTCONT_DOPESHEET;
|
|
|
|
sact->autosnap = SACTSNAP_FRAME;
|
2012-05-04 15:42:49 +00:00
|
|
|
break;
|
2018-11-30 14:51:16 +11:00
|
|
|
}
|
2012-05-04 15:42:49 +00:00
|
|
|
case SPACE_IPO:
|
2018-11-30 14:51:16 +11:00
|
|
|
{
|
|
|
|
SpaceIpo *sipo = (SpaceIpo *)sl;
|
|
|
|
sipo->autosnap = SACTSNAP_FRAME;
|
2012-05-04 15:42:49 +00:00
|
|
|
break;
|
2018-11-30 14:51:16 +11:00
|
|
|
}
|
2012-05-04 15:42:49 +00:00
|
|
|
case SPACE_NLA:
|
2018-11-30 14:51:16 +11:00
|
|
|
{
|
|
|
|
SpaceNla *snla = (SpaceNla *)sl;
|
|
|
|
snla->autosnap = SACTSNAP_FRAME;
|
2012-05-04 15:42:49 +00:00
|
|
|
break;
|
2018-11-30 14:51:16 +11:00
|
|
|
}
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
/* correct introduce of seed for wind force */
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile < 249 && bmain->subversionfile < 1) {
|
2012-05-04 15:42:49 +00:00
|
|
|
Object *ob;
|
2018-06-05 15:10:33 +02:00
|
|
|
for (ob = bmain->object.first; ob; ob = ob->id.next) {
|
2012-05-04 15:42:49 +00:00
|
|
|
if (ob->pd)
|
2018-11-30 14:51:16 +11:00
|
|
|
ob->pd->seed = ((uint)(ceil(PIL_check_seconds_timer())) + 1) % 128;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
if (bmain->versionfile < 249 && bmain->subversionfile < 2) {
|
|
|
|
Scene *sce = bmain->scene.first;
|
2012-05-04 15:42:49 +00:00
|
|
|
Sequence *seq;
|
|
|
|
Editing *ed;
|
2012-05-07 06:32:14 +00:00
|
|
|
|
2012-05-04 15:42:49 +00:00
|
|
|
while (sce) {
|
2012-05-07 06:32:14 +00:00
|
|
|
ed = sce->ed;
|
2012-05-04 15:42:49 +00:00
|
|
|
if (ed) {
|
|
|
|
SEQP_BEGIN (ed, seq)
|
|
|
|
{
|
|
|
|
if (seq->strip && seq->strip->proxy) {
|
2018-11-30 14:51:16 +11:00
|
|
|
seq->strip->proxy->quality = 90;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
2018-11-30 15:35:15 +11:00
|
|
|
} SEQ_END;
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
|
2012-05-07 06:32:14 +00:00
|
|
|
sce = sce->id.next;
|
|
|
|
}
|
2012-05-04 15:42:49 +00:00
|
|
|
}
|
|
|
|
}
|