Commit: 8f670dd855b1d81fcf619b3b94ba4bfaf51e896d
Author: Bastien Montagne
Date:   Tue May 29 15:59:18 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB8f670dd855b1d81fcf619b3b94ba4bfaf51e896d

Merge branch 'master' into blender2.8

Conflicts:
        source/blender/blenkernel/BKE_material.h
        source/blender/blenkernel/BKE_mesh.h
        source/blender/blenkernel/intern/library_remap.c
        source/blender/blenkernel/intern/material.c
        source/blender/editors/object/object_relations.c
        source/blender/editors/render/render_preview.c
        source/blender/makesrna/intern/rna_object.c

===================================================================



===================================================================

diff --cc source/blender/blenkernel/BKE_material.h
index 43f36618c19,431d1df1ff6..c85017a2216
--- a/source/blender/blenkernel/BKE_material.h
+++ b/source/blender/blenkernel/BKE_material.h
@@@ -102,14 -109,14 +102,14 @@@ void ramp_blend(int type, float r_col[3
  /* copy/paste */
  void clear_matcopybuf(void);
  void free_matcopybuf(void);
- void copy_matcopybuf(struct Material *ma);
- void paste_matcopybuf(struct Material *ma);
+ void copy_matcopybuf(struct Main *bmain, struct Material *ma);
+ void paste_matcopybuf(struct Main *bmain, struct Material *ma);
  
 -/* handle backward compatibility for tface/materials called from doversion */ 
 -int do_version_tface(struct Main *main);
 +/* Evaluation. */
 +
 +struct Depsgraph;
 +
 +void BKE_material_eval(struct Depsgraph *depsgraph, struct Material 
*material);
  
  #ifdef __cplusplus
  }
diff --cc source/blender/blenkernel/BKE_mesh.h
index f1326974f10,2c7ba845960..499bea1dd51
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@@ -127,23 -99,7 +127,23 @@@ float (*BKE_mesh_orco_verts_get(struct 
  void   BKE_mesh_orco_verts_transform(struct Mesh *me, float (*orco)[3], int 
totvert, int invert);
  int test_index_face(struct MFace *mface, struct CustomData *mfdata, int 
mfindex, int nr);
  struct Mesh *BKE_mesh_from_object(struct Object *ob);
- void BKE_mesh_assign_object(struct Object *ob, struct Mesh *me);
+ void BKE_mesh_assign_object(struct Main *bmain, struct Object *ob, struct 
Mesh *me);
 +void BKE_mesh_from_metaball(struct ListBase *lb, struct Mesh *me);
 +int  BKE_mesh_nurbs_to_mdata(
 +        struct Object *ob, struct MVert **r_allvert, int *r_totvert,
 +        struct MEdge **r_alledge, int *r_totedge, struct MLoop **r_allloop, 
struct MPoly **r_allpoly,
 +        int *r_totloop, int *r_totpoly);
 +int BKE_mesh_nurbs_displist_to_mdata(
 +        struct Object *ob, const struct ListBase *dispbase,
 +        struct MVert **r_allvert, int *r_totvert,
 +        struct MEdge **r_alledge, int *r_totedge,
 +        struct MLoop **r_allloop, struct MPoly **r_allpoly,
 +        struct MLoopUV **r_alluv, int *r_totloop, int *r_totpoly);
 +void BKE_mesh_from_nurbs_displist(
 +        struct Object *ob, struct ListBase *dispbase, const bool use_orco_uv, 
const char *obdata_name);
 +void BKE_mesh_from_nurbs(struct Object *ob);
 +void BKE_mesh_to_curve_nurblist(struct DerivedMesh *dm, struct ListBase 
*nurblist, const int edge_users_test);
 +void BKE_mesh_to_curve(struct Depsgraph *depsgraph, struct Scene *scene, 
struct Object *ob);
  void BKE_mesh_material_index_remove(struct Mesh *me, short index);
  void BKE_mesh_material_index_clear(struct Mesh *me);
  void BKE_mesh_material_remap(struct Mesh *me, const unsigned int *remap, 
unsigned int remap_len);
diff --cc source/blender/blenkernel/intern/material.c
index 131d79c249f,3283619587e..404761d2c36
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@@ -532,10 -631,10 +532,10 @@@ void BKE_material_resize_object(Main *b
        if (ob->totcol && ob->actcol == 0) ob->actcol = 1;
        if (ob->actcol > ob->totcol) ob->actcol = ob->totcol;
  
 -      DAG_relations_tag_update(bmain);
 +      DEG_relations_tag_update(bmain);
  }
  
- void test_object_materials(Object *ob, ID *id)
+ void test_object_materials(Main *bmain, Object *ob, ID *id)
  {
        /* make the ob mat-array same size as 'ob->data' mat-array */
        const short *totcol;
@@@ -837,9 -936,279 +837,9 @@@ bool BKE_object_material_slot_add(Main 
        return true;
  }
  
 -static void do_init_render_material(Main *bmain, Material *ma, int r_mode, 
float *amb)
 -{
 -      MTex *mtex;
 -      int a, needuv = 0, needtang = 0;
 -      
 -      if (ma->flarec == 0) ma->flarec = 1;
 -
 -      /* add all texcoflags from mtex, texco and mapto were cleared in 
advance */
 -      for (a = 0; a < MAX_MTEX; a++) {
 -              
 -              /* separate tex switching */
 -              if (ma->septex & (1 << a)) continue;
 -
 -              mtex = ma->mtex[a];
 -              if (mtex && mtex->tex && (mtex->tex->type | 
(mtex->tex->use_nodes && mtex->tex->nodetree) )) {
 -                      
 -                      ma->texco |= mtex->texco;
 -                      ma->mapto |= mtex->mapto;
 -
 -                      /* always get derivatives for these textures */
 -                      if (ELEM(mtex->tex->type, TEX_IMAGE, TEX_ENVMAP)) 
ma->texco |= TEXCO_OSA;
 -                      else if (mtex->texflag & (MTEX_COMPAT_BUMP | 
MTEX_3TAP_BUMP | MTEX_5TAP_BUMP | MTEX_BICUBIC_BUMP)) ma->texco |= TEXCO_OSA;
 -                      
 -                      if (ma->texco & (TEXCO_ORCO | TEXCO_REFL | TEXCO_NORM | 
TEXCO_STRAND | TEXCO_STRESS)) needuv = 1;
 -                      else if (ma->texco & (TEXCO_GLOB | TEXCO_UV | 
TEXCO_OBJECT | TEXCO_SPEED)) needuv = 1;
 -                      else if (ma->texco & (TEXCO_LAVECTOR | TEXCO_VIEW)) 
needuv = 1;
 -
 -                      if ((ma->mapto & MAP_NORM) && (mtex->normapspace == 
MTEX_NSPACE_TANGENT))
 -                              needtang = 1;
 -              }
 -      }
 -
 -      if (needtang) ma->mode |= MA_NORMAP_TANG;
 -      else ma->mode &= ~MA_NORMAP_TANG;
 -      
 -      if (ma->mode & (MA_VERTEXCOL | MA_VERTEXCOLP | MA_FACETEXTURE)) {
 -              needuv = 1;
 -              if (r_mode & R_OSA) ma->texco |= TEXCO_OSA;     /* for texfaces 
*/
 -      }
 -      if (needuv) ma->texco |= NEED_UV;
 -      
 -      /* since the raytracer doesnt recalc O structs for each ray, we have to 
preset them all */
 -      if (r_mode & R_RAYTRACE) {
 -              if ((ma->mode & (MA_RAYMIRROR | MA_SHADOW_TRA)) || ((ma->mode & 
MA_TRANSP) && (ma->mode & MA_RAYTRANSP))) {
 -                      ma->texco |= NEED_UV | TEXCO_ORCO | TEXCO_REFL | 
TEXCO_NORM;
 -                      if (r_mode & R_OSA) ma->texco |= TEXCO_OSA;
 -              }
 -      }
 -      
 -      if (amb) {
 -              ma->ambr = ma->amb * amb[0];
 -              ma->ambg = ma->amb * amb[1];
 -              ma->ambb = ma->amb * amb[2];
 -      }
 -
 -      /* local group override */
 -      if ((ma->shade_flag & MA_GROUP_LOCAL) && ma->id.lib && ma->group && 
ma->group->id.lib) {
 -              Group *group;
 -
 -              for (group = bmain->group.first; group; group = group->id.next) 
{
 -                      if (!ID_IS_LINKED(group) && STREQ(group->id.name, 
ma->group->id.name)) {
 -                              ma->group = group;
 -                      }
 -              }
 -      }
 -}
 -
 -static void init_render_nodetree(Main *bmain, bNodeTree *ntree, Material 
*basemat, int r_mode, float *amb)
 -{
 -      bNode *node;
 -
 -      /* parses the geom+tex nodes */
 -      ntreeShaderGetTexcoMode(ntree, r_mode, &basemat->texco, 
&basemat->mode_l);
 -      for (node = ntree->nodes.first; node; node = node->next) {
 -              if (node->id) {
 -                      if (GS(node->id->name) == ID_MA) {
 -                              Material *ma = (Material *)node->id;
 -                              if (ma != basemat) {
 -                                      do_init_render_material(bmain, ma, 
r_mode, amb);
 -                                      basemat->texco |= ma->texco;
 -                              }
 -
 -                              basemat->mode_l |= ma->mode & 
~(MA_MODE_PIPELINE | MA_SHLESS);
 -                              basemat->mode2_l |= ma->mode2 & 
~MA_MODE2_PIPELINE;
 -                              /* basemat only considered shadeless if all 
node materials are too */
 -                              if (!(ma->mode & MA_SHLESS))
 -                                      basemat->mode_l &= ~MA_SHLESS;
 -
 -                              if (ma->strand_surfnor > 0.0f)
 -                                      basemat->mode_l |= MA_STR_SURFDIFF;
 -                      }
 -                      else if (node->type == NODE_GROUP)
 -                              init_render_nodetree(bmain, (bNodeTree 
*)node->id, basemat, r_mode, amb);
 -              }
 -              else if (node->typeinfo->type == SH_NODE_NORMAL_MAP) {
 -                      basemat->mode2_l |= MA_TANGENT_CONCRETE;
 -                      NodeShaderNormalMap *nm = node->storage;
 -                      bool taken_into_account = false;
 -                      for (int i = 0; i < basemat->nmap_tangent_names_count; 
i++) {
 -                              if (STREQ(basemat->nmap_tangent_names[i], 
nm->uv_map)) {
 -                                      taken_into_account = true;
 -                                      break;
 -                              }
 -                      }
 -                      if (!taken_into_account) {
 -                              BLI_assert(basemat->nmap_tangent_names_count < 
MAX_MTFACE + 1);
 -                              
strcpy(basemat->nmap_tangent_names[basemat->nmap_tangent_names_count++], 
nm->uv_map);
 -                      }
 -              }
 -      }
 -}
 -
 -void init_render_material(Main *bmain, Material *mat, int r_mode, float *amb)
 -{
 -      
 -      do_init_render_material(bmain, mat, r_mode, amb);
 -      
 -      if (mat->nodetree && mat->use_nodes) {
 -              /* mode_l will take the pipeline options from the main 
material, and the or-ed
 -               * result of non-pipeline options from the nodes. shadeless is 
an exception,
 -               * mode_l will have it set when all node materials are 
shadeless. */
 -              mat->mode_l = (mat->mode & MA_MODE_PIPELINE) | MA_SHLESS;
 -              mat->mode2_l = mat->mode2 & MA_MODE2_PIPELINE;
 -              mat->nmap_tangent_names_count = 0;
 -              init_render_nodetree(bmain, mat->nodetree, mat, r_mode, amb);
 -              
 -              if (!mat->nodetree->execdata)
 -                      mat->nodetree->execdata = 
ntreeShaderBeginExecTree(mat->nodetree);
 -      }
 -      else {
 -              mat->mode_l = mat->mode;
 -              mat->mode2_l = mat->mode2;
 -
 -              if (mat->strand_surfnor > 0.0f)
 -                      mat->mode_l |= MA_STR_SURFDIFF;
 -      }
 -}
 -
 -void init_render_materials(Main *bmain, int r_mode, float *amb, bool 
do_default_material)
 -{
 -      Material *ma;
 -      
 -      /* clear these flags before going over materials, to make sure they
 -       * are cleared only once, otherwise node materials contained in other
 -       * node materials can go wrong */
 -      for (ma = bmain->mat.first; ma; ma = ma->id.next) {
 -              if (ma->id.us) {
 -                      ma->texco = 0;
 -                      ma->mapto = 0;
 -              }
 -      }
 -
 -      /* two steps, first initialize, then or the flags for layers */
 -      for (ma = bmain->mat.first; ma; ma = ma->id.next) {
 -              /* is_used flag comes back in convertblender.c */
 -              ma->flag &= ~MA_IS_USED;
 -              if (ma->id.us) 
 -                      init_render_material(bmain, ma, r_mode, amb);
 -      }
 -
 -      if (do_default_material) {
 -              init_render_material(bmain, &defmaterial, r_mode, amb);
 -      }
 -}
 -
 -/* only needed for nodes now */
 -void end_render_material(Material *mat)
 -{
 -      if (mat && mat->nodetree && mat->use_nodes) {
 -              if (mat->nodetree->execdata)
 -                      ntreeShaderEndExecTree(mat->nodetree->execdata);
 -      }
 -}
 -
 -void end_render_materials(Main *bmain)
 -{
 -      Material *ma;
 -      for (ma = bmain->mat.first; ma; ma = ma->id.next)
 -              if (ma->id.us) 
 -                      end_render_material(ma);
 -}
 -
 -static bool material_in_nodetree(bNodeTree *ntree, Material *mat)
 -{
 -      bNode *node;
 -
 -      for (node = ntree->nodes.first; node; node = node->next) {
 -              if (node->id) {
 -                      if (GS(node->id->name) == ID_MA) {
 -                              if (node->id == (ID *)mat) {
 -                                      return true;
 -                              }
 -                      }
 -                      else if (node->type == NODE_GROUP) {
 -                              if (material_in_nodetree((bNodeTree *)node->id, 
mat)) {
 -                                      return true;
 -                              }
 -                      }
 -              }
 -      }
 -
 -      return false;
 -}
 -
 -bool material_in_material(Material *parmat, Material *mat)
 -{
 -      if (parmat == mat)
 -              return true;
 -      else if (parmat->nodetree && parmat

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to