Commit: cfbd605567f48229a923df382baf6db98fbafc61
Author: Bastien Montagne
Date: Tue Jul 12 00:01:38 2016 +0200
Branches: blender2.8
https://developer.blender.org/rBcfbd605567f48229a923df382baf6db98fbafc61
Merge branch 'master' into blender2.8
Conflicts:
intern/cycles/blender/addon/ui.py
source/blender/blenkernel/BKE_particle.h
source/blender/blenkernel/intern/dynamicpaint.c
source/blender/blenkernel/intern/library.c
source/blender/blenkernel/intern/object.c
source/blender/blenkernel/intern/particle.c
source/blender/blenkernel/intern/particle_distribute.c
source/blender/blenkernel/intern/texture.c
source/blender/editors/object/object_add.c
source/blender/editors/object/object_relations.c
source/blender/editors/physics/particle_edit.c
source/blender/editors/physics/particle_object.c
source/blender/editors/transform/transform_snap_object.c
===================================================================
===================================================================
diff --cc source/blender/blenkernel/intern/library.c
index 5f7bded,869e024..978f1ac
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@@ -323,17 -333,20 +332,17 @@@ bool id_make_local(Main *bmain, ID *id
case ID_GR:
return false; /* not implemented */
case ID_AR:
- if (!test) BKE_armature_make_local((bArmature *)id);
+ if (!test) BKE_armature_make_local(bmain, (bArmature
*)id);
return true;
case ID_AC:
- if (!test) BKE_action_make_local((bAction *)id);
+ if (!test) BKE_action_make_local(bmain, (bAction *)id);
return true;
case ID_NT:
- if (!test) ntreeMakeLocal((bNodeTree *)id, true);
+ if (!test) ntreeMakeLocal(bmain, (bNodeTree *)id, true);
return true;
case ID_BR:
- if (!test) BKE_brush_make_local((Brush *)id);
+ if (!test) BKE_brush_make_local(bmain, (Brush *)id);
return true;
- case ID_PA:
- if (!test) BKE_particlesettings_make_local(bmain,
(ParticleSettings *)id);
- return true;
case ID_WM:
return false; /* can't be linked */
case ID_GD:
@@@ -412,20 -427,23 +423,20 @@@ bool id_copy(Main *bmain, ID *id, ID **
case ID_SO:
return false; /* not implemented */
case ID_GR:
- if (!test) *newid = (ID *)BKE_group_copy((Group *)id);
+ if (!test) *newid = (ID *)BKE_group_copy(bmain, (Group
*)id);
return true;
case ID_AR:
- if (!test) *newid = (ID *)BKE_armature_copy((bArmature
*)id);
+ if (!test) *newid = (ID *)BKE_armature_copy(bmain,
(bArmature *)id);
return true;
case ID_AC:
- if (!test) *newid = (ID *)BKE_action_copy((bAction
*)id);
+ if (!test) *newid = (ID *)BKE_action_copy(bmain,
(bAction *)id);
return true;
case ID_NT:
- if (!test) *newid = (ID *)ntreeCopyTree((bNodeTree
*)id);
+ if (!test) *newid = (ID *)ntreeCopyTree(bmain,
(bNodeTree *)id);
return true;
case ID_BR:
- if (!test) *newid = (ID *)BKE_brush_copy((Brush *)id);
+ if (!test) *newid = (ID *)BKE_brush_copy(bmain, (Brush
*)id);
return true;
- case ID_PA:
- if (!test) *newid = (ID
*)BKE_particlesettings_copy(bmain, (ParticleSettings *)id);
- return true;
case ID_WM:
return false; /* can't be copied from here */
case ID_GD:
diff --cc source/blender/blenkernel/intern/library_query.c
index 7cb5bfd,f86f5fa..b623cec
--- a/source/blender/blenkernel/intern/library_query.c
+++ b/source/blender/blenkernel/intern/library_query.c
@@@ -71,7 -72,9 +72,8 @@@
#include "BKE_fcurve.h"
#include "BKE_library.h"
#include "BKE_library_query.h"
+ #include "BKE_main.h"
#include "BKE_modifier.h"
-#include "BKE_particle.h"
#include "BKE_rigidbody.h"
#include "BKE_sca.h"
#include "BKE_sequencer.h"
@@@ -399,8 -417,14 +403,13 @@@ void BKE_library_foreach_ID_link(ID *id
case ID_OB:
{
Object *object = (Object *) id;
- ParticleSystem *psys;
+ /* Object is special, proxies make things
hard... */
+ const int data_cd_flag = data.cd_flag;
+ const int proxy_cd_flag = (object->proxy ||
object->proxy_group) ? IDWALK_INDIRECT_USAGE : 0;
+
/* object data special case */
+ data.cd_flag |= proxy_cd_flag;
if (object->type == OB_EMPTY) {
/* empty can have NULL or Image */
CALLBACK_INVOKE_ID(object->data,
IDWALK_USER);
@@@ -743,6 -854,82 +785,80 @@@ void BKE_library_update_ID_link_user(I
}
}
+ /**
+ * Say whether given \a id_type_owner can use (in any way) a datablock of \a
id_type_used.
+ */
+ /* This is a 'simplified' abstract version of BKE_library_foreach_ID_link()
above, quite useful to reduce
+ * useless ietrations in some cases. */
+ bool BKE_library_idtype_can_use_idtype(const short id_type_owner, const short
id_type_used)
+ {
+ if (id_type_used == ID_AC) {
+ return id_type_can_have_animdata(id_type_owner);
+ }
+
+ switch (id_type_owner) {
+ case ID_LI:
+ return ELEM(id_type_used, ID_LI);
+ case ID_SCE:
+ return (ELEM(id_type_used, ID_OB, ID_WO, ID_SCE, ID_MC,
ID_MA, ID_GR, ID_TXT,
+ ID_LS, ID_MSK, ID_SO, ID_GD,
ID_BR, ID_PAL, ID_IM, ID_NT) ||
+ BKE_library_idtype_can_use_idtype(ID_NT,
id_type_used));
+ case ID_OB:
+ /* Could be the following, but simpler to just always
say 'yes' here. */
+ #if 0
+ return ELEM(id_type_used, ID_ME, ID_CU, ID_MB, ID_LT,
ID_SPK, ID_AR, ID_LA, ID_CA, /* obdata */
- ID_OB, ID_MA, ID_GD, ID_GR,
ID_TE, ID_PA, ID_TXT, ID_SO, ID_MC, ID_IM, ID_AC
++ ID_OB, ID_MA, ID_GD, ID_GR,
ID_TE, ID_TXT, ID_SO, ID_MC, ID_IM, ID_AC
+ /* + constraints, modifiers
and game logic ID types... */);
+ #else
+ return true;
+ #endif
+ case ID_ME:
+ return ELEM(id_type_used, ID_ME, ID_KE, ID_MA);
+ case ID_CU:
+ return ELEM(id_type_used, ID_OB, ID_KE, ID_MA, ID_VF);
+ case ID_MB:
+ return ELEM(id_type_used, ID_MA);
+ case ID_MA:
+ return (ELEM(id_type_used, ID_TE, ID_GR) ||
BKE_library_idtype_can_use_idtype(ID_NT, id_type_used));
+ case ID_TE:
+ return (ELEM(id_type_used, ID_IM, ID_OB) ||
BKE_library_idtype_can_use_idtype(ID_NT, id_type_used));
+ case ID_LT:
+ return ELEM(id_type_used, ID_KE);
+ case ID_LA:
+ return (ELEM(id_type_used, ID_TE) ||
BKE_library_idtype_can_use_idtype(ID_NT, id_type_used));
+ case ID_CA:
+ return ELEM(id_type_used, ID_OB);
+ case ID_KE:
+ return ELEM(id_type_used, ID_ME, ID_CU, ID_LT); /*
Warning! key->from, could be more types in future? */
+ case ID_SCR:
+ return ELEM(id_type_used, ID_SCE);
+ case ID_WO:
+ return (ELEM(id_type_used, ID_TE) ||
BKE_library_idtype_can_use_idtype(ID_NT, id_type_used));
+ case ID_SPK:
+ return ELEM(id_type_used, ID_SO);
+ case ID_GR:
+ return ELEM(id_type_used, ID_OB);
+ case ID_NT:
+ /* Could be the following, but node.id has no type
restriction... */
+ #if 0
+ return ELEM(id_type_used, ID_GD /* + node.id types...
*/);
+ #else
+ return true;
+ #endif
+ case ID_BR:
+ return ELEM(id_type_used, ID_BR, ID_IM, ID_PC, ID_TE);
- case ID_PA:
- return ELEM(id_type_used, ID_OB, ID_GR, ID_TE);
+ case ID_MC:
+ return ELEM(id_type_used, ID_GD, ID_IM);
+ case ID_MSK:
+ return ELEM(id_type_used, ID_MC); /* WARNING!
mask->parent.id, not typed. */
+ case ID_LS:
+ return (ELEM(id_type_used, ID_TE, ID_OB) ||
BKE_library_idtype_can_use_idtype(ID_NT, id_type_used));
+ default:
+ return false;
+ }
+ }
+
+
/* ***** ID users iterator. ***** */
typedef struct IDUsersIter {
ID *id;
diff --cc source/blender/editors/interface/interface_templates.c
index cf3a50d,d91bd49..7cc7b54
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@@ -939,9 -974,9 +939,9 @@@ static uiLayout *draw_modifier
}
UI_block_lock_clear(block);
- UI_block_lock_set(block, ob && ob->id.lib,
ERROR_LIBDATA_MESSAGE);
+ UI_block_lock_set(block, ob &&
ID_IS_LINKED_DATABLOCK(ob), ERROR_LIBDATA_MESSAGE);
- if (!ELEM(md->type, eModifierType_Fluidsim,
eModifierType_Softbody, eModifierType_ParticleSystem,
+ if (!ELEM(md->type, eModifierType_Fluidsim,
eModifierType_Softbody,
eModifierType_Cloth, eModifierType_Smoke))
{
uiItemO(row,
CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Copy"), ICON_NONE,
diff --cc source/blender/editors/transform/transform_snap_object.c
index af465d7,59dfe18..ed6d49d
--- a/source/blender/editors/transform/transform_snap_object.c
+++ b/source/blender/editors/transform/transform_snap_object.c
@@@ -1324,9 -1450,34 +1450,18 @@@ static bool snapObjectsRay
ListBase *r_hit_list)
{
bool retval = false;
+
+ float dvec[3];
+ sub_v3_v3v3(dvec, ray_start, ray_origin);
+
+ const float ray_depth_range[2] = {
+ dot_v3v3(dvec, ray_normal),
+ *ray_depth,
+ };
+
unsigned int ob_index = 0;
Object *obedit = use_object_edit_cage ? sctx->scene->obedit : NULL;
-
- /* Need an exception for particle edit because the base is flagged with
BA_HAS_RECALC_DATA
- * which makes the loop skip it, even the derived mesh will never change
- *
- * To solve that problem, we do it first as an exception.
- * */
Base *base_act = sctx->scene->basact;
- if (base_act && base_act->object && base_act->object->mode &
OB_MODE_PARTICLE_EDIT) {
- Object *ob = base_act->object;
-
- retval |= snapObject(
- sctx, ob, ob->obmat, ob_index++,
- false, snap_to,
- ray_origin, ray_start, ray_normal, ray_depth_range,
- ray_depth, dist_to_ray_sq,
- r_loc, r_no, r_index, r_ob, r_obmat, r_hit_list);
- }
bool ignore_object_selected = false, ignore_object_active = false;
switch (snap_select) {
diff --cc source/blender/gpu/GPU_material.h
index 3413ee0,0d92d22..202e5fd
--- a/source/blender/gpu/GPU_material.h
+++ b/source/blender/gpu/GPU_material.h
@@@ -332,7 -337,16 +332,8 @@@ void GPU_mist_update_enable(short enabl
void GPU_mist_update_values(int type, float start, float dist, float inten,
float color[3]);
void GPU_horizon_update_color(float color[3]);
void GPU_ambient_update_color(float color[3]);
+ void GPU_zenith_update_color(float color[3]);
-struct GPUParticleInfo
-{
- float scalprops[4];
- float location[3];
- float velocity[3];
- float angular_velocity[3];
-};
-
#ifdef WITH_OPENSUBDIV
struct DerivedMesh;
void GPU_material_update_fvar_offset(GPUMaterial *gpu_material,
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs