Merge branch 'blender-v2.90-release'
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user