[Bf-blender-cvs] [bc2400963d2] new-object-types: Merge branch 'master' into new-object-types

Brecht Van Lommel noreply at git.blender.org
Wed Jan 29 20:54:54 CET 2020


Commit: bc2400963d229c2318d5b630d0f0a47754ee0bc2
Author: Brecht Van Lommel
Date:   Wed Jan 29 09:51:51 2020 +0100
Branches: new-object-types
https://developer.blender.org/rBbc2400963d229c2318d5b630d0f0a47754ee0bc2

Merge branch 'master' into new-object-types

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



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

diff --cc source/blender/blenkernel/intern/object.c
index 9f6802b66ea,90205286a72..4bd0448fb2f
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@@ -460,21 -430,18 +460,20 @@@ void BKE_object_free_derived_caches(Obj
    MEM_SAFE_FREE(ob->runtime.bb);
  
    object_update_from_subsurf_ccg(ob);
-   BKE_object_free_derived_mesh_caches(ob);
  
 -  /* Restore initial pointer. */
 -  if (ob->runtime.mesh_orig != NULL) {
 -    ob->data = ob->runtime.mesh_orig;
 -  }
 -
 -  if (ob->runtime.mesh_eval != NULL) {
 -    if (ob->runtime.is_mesh_eval_owned) {
 -      Mesh *mesh_eval = ob->runtime.mesh_eval;
 -      BKE_mesh_eval_delete(mesh_eval);
 +  if (ob->runtime.data_eval != NULL) {
 +    if (ob->runtime.is_data_eval_owned) {
 +      ID *data_eval = ob->runtime.data_eval;
 +      if (GS(data_eval->name) == ID_ME) {
 +        /* TODO: why exception? */
 +        BKE_mesh_eval_delete((Mesh *)data_eval);
 +      }
 +      else {
 +        BKE_libblock_free_datablock(data_eval, 0);
 +        MEM_freeN(data_eval);
 +      }
      }
 -    ob->runtime.mesh_eval = NULL;
 +    ob->runtime.data_eval = NULL;
    }
    if (ob->runtime.mesh_deform_eval != NULL) {
      Mesh *mesh_deform_eval = ob->runtime.mesh_deform_eval;
diff --cc source/blender/depsgraph/intern/eval/deg_eval_runtime_backup_object.cc
index e5440ecc21b,df7338e1076..b647271c099
--- a/source/blender/depsgraph/intern/eval/deg_eval_runtime_backup_object.cc
+++ b/source/blender/depsgraph/intern/eval/deg_eval_runtime_backup_object.cc
@@@ -95,13 -98,12 +95,13 @@@ void ObjectRuntimeBackup::backup_pose_c
  
  void ObjectRuntimeBackup::restore_to_object(Object *object)
  {
 -  Mesh *mesh_orig = object->runtime.mesh_orig;
 +  ID *data_orig = object->runtime.data_orig;
 +  ID *data_eval = object->runtime.data_eval;
    BoundBox *bb = object->runtime.bb;
    object->runtime = runtime;
 -  object->runtime.mesh_orig = mesh_orig;
 +  object->runtime.data_orig = data_orig;
    object->runtime.bb = bb;
-   if (object->type == OB_MESH && data_eval != NULL) {
 -  if (object->type == OB_MESH && object->runtime.mesh_eval != nullptr) {
++  if (object->type == OB_MESH && data_eval != nullptr) {
      if (object->id.recalc & ID_RECALC_GEOMETRY) {
        /* If geometry is tagged for update it means, that part of
         * evaluated mesh are not valid anymore. In this case we can not
diff --cc source/blender/draw/engines/eevee/eevee_materials.c
index b64fbb2fb43,2e0afc5d8d7..697d22ebeff
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@@ -1456,16 -1456,8 +1456,16 @@@ void EEVEE_materials_cache_populate(EEV
                           !DRW_state_is_image_render();
  
    /* First get materials for this mesh. */
 -  if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL)) {
 +  if (ELEM(ob->type,
 +           OB_MESH,
 +           OB_CURVE,
 +           OB_SURF,
 +           OB_FONT,
 +           OB_MBALL,
 +           OB_HAIR,
 +           OB_POINTCLOUD,
 +           OB_VOLUME)) {
-     const int materials_len = MAX2(1, ob->totcol);
+     const int materials_len = DRW_cache_object_material_count_get(ob);
  
      struct DRWShadingGroup **shgrp_array = BLI_array_alloca(shgrp_array, materials_len);
      struct DRWShadingGroup **shgrp_depth_array = BLI_array_alloca(shgrp_depth_array,
diff --cc source/blender/draw/engines/workbench/workbench_forward.c
index 6a1ad5b58e0,e5f121a690d..2f4ad4fffa9
--- a/source/blender/draw/engines/workbench/workbench_forward.c
+++ b/source/blender/draw/engines/workbench/workbench_forward.c
@@@ -665,18 -665,10 +665,18 @@@ void workbench_forward_cache_populate(W
    }
  
    WORKBENCH_MaterialData *material;
 -  if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL)) {
 +  if (ELEM(ob->type,
 +           OB_MESH,
 +           OB_CURVE,
 +           OB_SURF,
 +           OB_FONT,
 +           OB_MBALL,
 +           OB_HAIR,
 +           OB_POINTCLOUD,
 +           OB_VOLUME)) {
      const bool use_sculpt_pbvh = BKE_sculptsession_use_pbvh_draw(ob, draw_ctx->v3d) &&
                                   !DRW_state_is_image_render();
-     const int materials_len = MAX2(1, ob->totcol);
+     const int materials_len = DRW_cache_object_material_count_get(ob);
      const Mesh *me = (ob->type == OB_MESH) ? ob->data : NULL;
      const WORKBENCH_ColorOverride color_override = workbench_object_color_override_get(ob);
      const bool use_texture_paint_drawing = !(DRW_state_is_image_render() &&
diff --cc source/blender/draw/intern/draw_cache.c
index 6988a5d4a8d,f2764753a51..dce5b9c10ba
--- a/source/blender/draw/intern/draw_cache.c
+++ b/source/blender/draw/intern/draw_cache.c
@@@ -824,6 -824,25 +824,25 @@@ GPUBatch *DRW_cache_object_surface_get(
    }
  }
  
+ int DRW_cache_object_material_count_get(struct Object *ob)
+ {
 -  short type = (ob->runtime.mesh_eval != NULL) ? OB_MESH : ob->type;
++  short type = (BKE_object_get_evaluated_mesh(ob) != NULL) ? OB_MESH : ob->type;
+ 
+   switch (type) {
+     case OB_MESH:
+       return DRW_mesh_material_count_get(ob->data);
+     case OB_CURVE:
+     case OB_SURF:
+     case OB_FONT:
+       return DRW_curve_material_count_get(ob->data);
+     case OB_MBALL:
+       return DRW_metaball_material_count_get(ob->data);
+     default:
+       BLI_assert(0);
+       return 0;
+   }
+ }
+ 
  GPUBatch **DRW_cache_object_surface_material_get(struct Object *ob,
                                                   struct GPUMaterial **gpumat_array,
                                                   uint gpumat_array_len)



More information about the Bf-blender-cvs mailing list