Node merge: some forward compatibility code to avoid crash loading files with
node groups in older version, and to keep unconnected/default socket values.
This commit is contained in:
@@ -135,6 +135,7 @@ Any case: direct data is ALWAYS after the lib block
|
||||
#include "BLI_blenlib.h"
|
||||
#include "BLI_linklist.h"
|
||||
#include "BLI_bpath.h"
|
||||
#include "BLI_math.h"
|
||||
#include "BLI_utildefines.h"
|
||||
|
||||
#include "BKE_action.h"
|
||||
@@ -645,6 +646,38 @@ static void write_curvemapping(WriteData *wd, CurveMapping *cumap)
|
||||
static void write_node_socket(WriteData *wd, bNodeSocket *sock)
|
||||
{
|
||||
bNodeSocketType *stype= ntreeGetSocketType(sock->type);
|
||||
|
||||
/* forward compatibility code, so older blenders still open */
|
||||
sock->stack_type = 1;
|
||||
|
||||
if(sock->default_value) {
|
||||
bNodeSocketValueFloat *valfloat;
|
||||
bNodeSocketValueVector *valvector;
|
||||
bNodeSocketValueRGBA *valrgba;
|
||||
|
||||
switch (sock->type) {
|
||||
case SOCK_FLOAT:
|
||||
valfloat = sock->default_value;
|
||||
sock->ns.vec[0] = valfloat->value;
|
||||
sock->ns.min = valfloat->min;
|
||||
sock->ns.max = valfloat->max;
|
||||
break;
|
||||
case SOCK_VECTOR:
|
||||
valvector = sock->default_value;
|
||||
copy_v3_v3(sock->ns.vec, valvector->value);
|
||||
sock->ns.min = valvector->min;
|
||||
sock->ns.max = valvector->max;
|
||||
break;
|
||||
case SOCK_RGBA:
|
||||
valrgba = sock->default_value;
|
||||
copy_v4_v4(sock->ns.vec, valrgba->value);
|
||||
sock->ns.min = 0.0f;
|
||||
sock->ns.max = 1.0f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* actual socket writing */
|
||||
writestruct(wd, DATA, "bNodeSocket", 1, sock);
|
||||
if (sock->default_value)
|
||||
writestruct(wd, DATA, stype->value_structname, 1, sock->default_value);
|
||||
|
||||
@@ -84,7 +84,7 @@ typedef struct bNodeSocket {
|
||||
|
||||
/* execution data */
|
||||
short stack_index; /* local stack index */
|
||||
short pad2;
|
||||
short stack_type; /* deprecated, kept for forward compatibility */
|
||||
int pad3;
|
||||
void *cache; /* cached data from execution */
|
||||
|
||||
@@ -198,8 +198,8 @@ typedef struct bNodeLink {
|
||||
} bNodeLink;
|
||||
|
||||
/* link->flag */
|
||||
#define NODE_LINK_VALID 1 /* link has been successfully validated */
|
||||
#define NODE_LINKFLAG_HILITE 2
|
||||
#define NODE_LINKFLAG_HILITE 1 /* link has been successfully validated */
|
||||
#define NODE_LINK_VALID 2
|
||||
|
||||
/* the basis for a Node tree, all links and nodes reside internal here */
|
||||
/* only re-usable node trees are in the library though, materials and textures allocate own tree struct */
|
||||
|
||||
Reference in New Issue
Block a user