Merge branch 'master' into blender2.8

This commit is contained in:
Sergey Sharybin 2018-04-04 12:57:36 +02:00
commit ef22b837e8
3 changed files with 41 additions and 12 deletions

View File

@ -204,7 +204,7 @@ public:
src = dest;
}
if(num_refiner_verts) {
if(num_local_points) {
patch_table->ComputeLocalPointValues(&verts[0], &verts[num_refiner_verts]);
}
@ -238,7 +238,7 @@ public:
src = dest;
}
if(num_refiner_verts) {
if(num_local_points) {
if(attr.same_storage(attr.type, TypeDesc::TypeFloat)) {
patch_table->ComputeLocalPointValues((OsdValue<float>*)&attr.buffer[0],
(OsdValue<float>*)&attr.buffer[num_refiner_verts * attr.data_sizeof()]);

View File

@ -124,14 +124,26 @@ struct BuilderWalkUserData {
static void modifier_walk(void *user_data,
struct Object * /*object*/,
struct Object **obpoin,
struct ID **idpoin,
int /*cb_flag*/)
{
BuilderWalkUserData *data = (BuilderWalkUserData *)user_data;
if (*obpoin) {
data->builder->build_object(NULL,
*obpoin,
DEG_ID_LINKED_INDIRECTLY);
ID *id = *idpoin;
if (id == NULL) {
return;
}
switch (GS(id->name)) {
case ID_OB:
data->builder->build_object(NULL,
(Object *)id,
DEG_ID_LINKED_INDIRECTLY);
break;
case ID_TE:
data->builder->build_texture((Tex *)id);
break;
default:
/* pass */
break;
}
}
@ -483,7 +495,7 @@ void DepsgraphNodeBuilder::build_object(Base *base,
if (object->modifiers.first != NULL) {
BuilderWalkUserData data;
data.builder = this;
modifiers_foreachObjectLink(object, modifier_walk, &data);
modifiers_foreachIDLink(object, modifier_walk, &data);
}
/* Constraints. */
if (object->constraints.first != NULL) {
@ -1315,6 +1327,11 @@ void DepsgraphNodeBuilder::build_texture(Tex *texture)
build_image(texture->ima);
}
}
/* Placeholder so we can add relations and tag ID node for update. */
add_operation_node(&texture->id,
DEG_NODE_TYPE_PARAMETERS,
NULL,
DEG_OPCODE_PLACEHOLDER);
}
void DepsgraphNodeBuilder::build_image(Image *image) {

View File

@ -123,12 +123,24 @@ struct BuilderWalkUserData {
void modifier_walk(void *user_data,
struct Object * /*object*/,
struct Object **obpoin,
struct ID **idpoin,
int /*cb_flag*/)
{
BuilderWalkUserData *data = (BuilderWalkUserData *)user_data;
if (*obpoin) {
data->builder->build_object(NULL, *obpoin);
ID *id = *idpoin;
if (id == NULL) {
return;
}
switch (GS(id->name)) {
case ID_OB:
data->builder->build_object(NULL, (Object *)id);
break;
case ID_TE:
data->builder->build_texture((Tex *)id);
break;
default:
/* pass */
break;
}
}
@ -463,7 +475,7 @@ void DepsgraphRelationBuilder::build_object(Base *base, Object *object)
if (object->modifiers.first != NULL) {
BuilderWalkUserData data;
data.builder = this;
modifiers_foreachObjectLink(object, modifier_walk, &data);
modifiers_foreachIDLink(object, modifier_walk, &data);
}
/* Constraints. */
if (object->constraints.first != NULL) {