Merge branch 'blender-v2.90-release'

This commit is contained in:
Clément Foucault
2020-08-05 22:13:15 +02:00
3 changed files with 37 additions and 16 deletions

View File

@@ -28,6 +28,7 @@
#include "BLI_memblock.h"
#include "BKE_duplilist.h"
#include "BKE_modifier.h"
#include "DEG_depsgraph_query.h"
@@ -147,28 +148,46 @@ EEVEE_ObjectMotionData *EEVEE_motion_blur_object_data_get(EEVEE_MotionBlurData *
return ob_step;
}
EEVEE_GeometryMotionData *EEVEE_motion_blur_geometry_data_get(EEVEE_MotionBlurData *mb,
Object *ob,
bool hair)
static EEVEE_GeometryMotionData *motion_blur_geometry_data_get(EEVEE_MotionBlurData *mb,
void *key,
bool hair)
{
if (mb->geom == NULL) {
return NULL;
}
/* Use original data as key to ensure matching accross update. */
Object *ob_orig = DEG_get_original_object(ob);
void *key = (char *)ob_orig->data + hair;
key = (char *)key + (int)hair;
EEVEE_GeometryMotionData *geom_step = BLI_ghash_lookup(mb->geom, key);
if (geom_step == NULL) {
geom_step = MEM_callocN(sizeof(EEVEE_GeometryMotionData), __func__);
geom_step->type = (hair) ? EEVEE_HAIR_GEOM_MOTION_DATA : EEVEE_MESH_GEOM_MOTION_DATA;
geom_step->type = hair ? EEVEE_HAIR_GEOM_MOTION_DATA : EEVEE_MESH_GEOM_MOTION_DATA;
BLI_ghash_insert(mb->geom, key, geom_step);
}
return geom_step;
}
EEVEE_GeometryMotionData *EEVEE_motion_blur_geometry_data_get(EEVEE_MotionBlurData *mb, Object *ob)
{
/* Use original data as key to ensure matching accross update. */
return motion_blur_geometry_data_get(mb, DEG_get_original_object(ob)->data, false);
}
EEVEE_GeometryMotionData *EEVEE_motion_blur_hair_data_get(EEVEE_MotionBlurData *mb,
Object *ob,
ModifierData *md)
{
void *key;
if (md) {
/* Particle system. */
key = BKE_modifier_get_original(md);
}
else {
/* Hair object. */
key = DEG_get_original_object(ob)->data;
}
return motion_blur_geometry_data_get(mb, DEG_get_original_object(ob), true);
}
/* View Layer data. */
void EEVEE_view_layer_data_free(void *storage)

View File

@@ -284,8 +284,8 @@ void EEVEE_motion_blur_hair_cache_populate(EEVEE_ViewLayerData *UNUSED(sldata),
/* Store transform */
DRW_hair_duplimat_get(ob, psys, md, mb_data->obmat[mb_step]);
EEVEE_GeometryMotionData *mb_geom = EEVEE_motion_blur_geometry_data_get(
&effects->motion_blur, ob, true);
EEVEE_GeometryMotionData *mb_geom = EEVEE_motion_blur_hair_data_get(
&effects->motion_blur, ob, md);
if (mb_step == MB_CURR) {
/* Fill missing matrices if the object was hidden in previous or next frame. */
@@ -342,8 +342,8 @@ void EEVEE_motion_blur_cache_populate(EEVEE_ViewLayerData *UNUSED(sldata),
/* Store transform */
copy_m4_m4(mb_data->obmat[mb_step], ob->obmat);
EEVEE_GeometryMotionData *mb_geom = EEVEE_motion_blur_geometry_data_get(
&effects->motion_blur, ob, false);
EEVEE_GeometryMotionData *mb_geom = EEVEE_motion_blur_geometry_data_get(&effects->motion_blur,
ob);
if (mb_step == MB_CURR) {
GPUBatch *batch = DRW_cache_object_surface_get(ob);

View File

@@ -970,8 +970,10 @@ EEVEE_ObjectMotionData *EEVEE_motion_blur_object_data_get(EEVEE_MotionBlurData *
Object *ob,
bool hair);
EEVEE_GeometryMotionData *EEVEE_motion_blur_geometry_data_get(EEVEE_MotionBlurData *mb,
Object *ob,
bool hair);
Object *ob);
EEVEE_GeometryMotionData *EEVEE_motion_blur_hair_data_get(EEVEE_MotionBlurData *mb,
Object *ob,
struct ModifierData *md);
EEVEE_LightProbeEngineData *EEVEE_lightprobe_data_get(Object *ob);
EEVEE_LightProbeEngineData *EEVEE_lightprobe_data_ensure(Object *ob);
EEVEE_LightEngineData *EEVEE_light_data_get(Object *ob);