[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