[Bf-blender-cvs] [e9740f54001] temp-eevee-next-cryptomatte: Use correct resource_id to store object hashes.

Jeroen Bakker noreply at git.blender.org
Tue Sep 13 09:37:59 CEST 2022


Commit: e9740f5400192707d83225795c1dd3a61fd5b04c
Author: Jeroen Bakker
Date:   Tue Sep 13 09:37:45 2022 +0200
Branches: temp-eevee-next-cryptomatte
https://developer.blender.org/rBe9740f5400192707d83225795c1dd3a61fd5b04c

Use correct resource_id to store object hashes.

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

M	source/blender/draw/engines/eevee_next/eevee_cryptomatte.cc
M	source/blender/draw/engines/eevee_next/eevee_cryptomatte.hh
M	source/blender/draw/engines/eevee_next/eevee_sync.cc

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

diff --git a/source/blender/draw/engines/eevee_next/eevee_cryptomatte.cc b/source/blender/draw/engines/eevee_next/eevee_cryptomatte.cc
index bcda27d8e81..340a587b1c1 100644
--- a/source/blender/draw/engines/eevee_next/eevee_cryptomatte.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_cryptomatte.cc
@@ -46,7 +46,7 @@ void Cryptomatte::begin_sync()
   }
 }
 
-void Cryptomatte::sync_object(Object *ob)
+void Cryptomatte::sync_object(Object *ob, ResourceHandle res_handle)
 {
   const eViewLayerEEVEEPassType enabled_passes = inst_.film.enabled_passes_get();
   if (!(enabled_passes &
@@ -54,7 +54,7 @@ void Cryptomatte::sync_object(Object *ob)
     return;
   }
 
-  uint32_t resource_id = DRW_object_resource_id_get(ob);
+  uint32_t resource_id = res_handle.resource_index();
   float2 object_hashes(0.0f, 0.0f);
 
   if (enabled_passes & EEVEE_RENDER_PASS_CRYPTOMATTE_OBJECT) {
@@ -68,7 +68,6 @@ void Cryptomatte::sync_object(Object *ob)
     }
     object_hashes[1] = register_id(EEVEE_RENDER_PASS_CRYPTOMATTE_ASSET, asset->id);
   }
-
   cryptomatte_object_buf.get_or_resize(resource_id) = object_hashes;
 }
 
@@ -76,7 +75,7 @@ void Cryptomatte::sync_material(const ::Material *material)
 {
   /* Material crypto hashes are generated during shader codegen stage. We only need to register
    * them to store inside the metadata. */
-  if (material_layer_) {
+  if (material_layer_ && material) {
     material_layer_->add_ID(material->id);
   }
 }
diff --git a/source/blender/draw/engines/eevee_next/eevee_cryptomatte.hh b/source/blender/draw/engines/eevee_next/eevee_cryptomatte.hh
index c823d3b5de8..37f5edf4c6d 100644
--- a/source/blender/draw/engines/eevee_next/eevee_cryptomatte.hh
+++ b/source/blender/draw/engines/eevee_next/eevee_cryptomatte.hh
@@ -50,7 +50,7 @@ class Cryptomatte {
   Cryptomatte(Instance &inst) : inst_(inst){};
 
   void begin_sync();
-  void sync_object(Object *ob);
+  void sync_object(Object *ob, ResourceHandle res_handle);
   void sync_material(const ::Material *material);
   void end_sync();
 
diff --git a/source/blender/draw/engines/eevee_next/eevee_sync.cc b/source/blender/draw/engines/eevee_next/eevee_sync.cc
index afb7af89348..09ea7c9ec3d 100644
--- a/source/blender/draw/engines/eevee_next/eevee_sync.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_sync.cc
@@ -127,7 +127,7 @@ void SyncModule::sync_mesh(Object *ob,
   }
 
   inst_.manager->extract_object_attributes(res_handle, ob_ref, material_array.gpu_materials);
-  inst_.cryptomatte.sync_object(ob);
+  inst_.cryptomatte.sync_object(ob, res_handle);
   // shadows.sync_object(ob, ob_handle, is_shadow_caster, is_alpha_blend);
 }
 
@@ -324,7 +324,12 @@ void SyncModule::sync_curves(Object *ob,
   shgroup_curves_call(material.prepass, ob, part_sys, modifier_data);
   shgroup_curves_call(material.shadow, ob, part_sys, modifier_data);
 
-  inst_.cryptomatte.sync_object(ob);
+  inst_.cryptomatte.sync_object(ob, res_handle);
+  GPUMaterial *gpu_material =
+      inst_.materials.material_array_get(ob, has_motion).gpu_materials[mat_nr - 1];
+  ::Material *mat = GPU_material_get_material(gpu_material);
+  inst_.cryptomatte.sync_material(mat);
+
   /* TODO(fclem) Hair velocity. */
   // shading_passes.velocity.gpencil_add(ob, ob_handle);



More information about the Bf-blender-cvs mailing list