Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2022-02-22 15:57:05 +0300
committerJacques Lucke <jacques@blender.org>2022-02-22 15:57:05 +0300
commit64293a277f3532c2e3048234950be250e1e9e90c (patch)
treeade889ff405684fcd1d780c143361407a5c1857d /source/blender/draw/engines/eevee/eevee_private.h
parent0b4c56b01078b70b294208932d1e1d37a1ab3bd2 (diff)
parent4e78a7360e451b4e2c99e8fb88d6701bc8f13618 (diff)
Merge branch 'blender-v3.1-release'
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_private.h')
-rw-r--r--source/blender/draw/engines/eevee/eevee_private.h48
1 files changed, 35 insertions, 13 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index e8828cc7494..2518ee53da3 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -618,8 +618,23 @@ enum {
#define MB_CURR 2
typedef struct EEVEE_MotionBlurData {
+ /**
+ * Maps #EEVEE_ObjectKey to #EEVEE_ObjectMotionData.
+ */
struct GHash *object;
- struct GHash *geom;
+ /**
+ * Maps original #GPUVertBuf to duplicated #GPUVertBuf.
+ * There are two maps for #MB_PREV and #MB_NEXT.
+ * Only the values are owned.
+ */
+ struct GHash *position_vbo_cache[2];
+ /**
+ * Maps original #GPUVertBuf to #EEVEE_HairMotionStepData.
+ * There are two maps for #MB_PREV and #MB_NEXT.
+ * Only the values are owned.
+ */
+ struct GHash *hair_motion_step_cache[2];
+
struct {
float viewmat[4][4];
float persmat[4][4];
@@ -637,15 +652,16 @@ typedef struct EEVEE_ObjectKey {
int id[8]; /* MAX_DUPLI_RECUR */
} EEVEE_ObjectKey;
-typedef struct EEVEE_ObjectMotionData {
- float obmat[3][4][4];
-} EEVEE_ObjectMotionData;
-
typedef enum eEEVEEMotionData {
EEVEE_MOTION_DATA_MESH = 0,
EEVEE_MOTION_DATA_HAIR,
} eEEVEEMotionData;
+typedef struct EEVEE_HairMotionStepData {
+ struct GPUVertBuf *hair_pos;
+ struct GPUTexture *hair_pos_tx;
+} EEVEE_HairMotionStepData;
+
typedef struct EEVEE_HairMotionData {
/** Needs to be first to ensure casting. */
eEEVEEMotionData type;
@@ -653,8 +669,8 @@ typedef struct EEVEE_HairMotionData {
/** Allocator will alloc enough slot for all particle systems. Or 1 if it's a hair object. */
int psys_len;
struct {
- struct GPUVertBuf *hair_pos[2]; /* Position buffer for time = t +/- step. */
- struct GPUTexture *hair_pos_tx[2]; /* Buffer Texture of the corresponding VBO. */
+ /* The vbos and textures are not owned. */
+ EEVEE_HairMotionStepData step_data[2]; /* Data for time = t +/- step. */
} psys[0];
} EEVEE_HairMotionData;
@@ -664,10 +680,18 @@ typedef struct EEVEE_GeometryMotionData {
/** To disable deform mb if vertcount mismatch. */
int use_deform;
+ /* The batch and vbos are not owned. */
struct GPUBatch *batch; /* Batch for time = t. */
struct GPUVertBuf *vbo[2]; /* VBO for time = t +/- step. */
} EEVEE_GeometryMotionData;
+typedef struct EEVEE_ObjectMotionData {
+ float obmat[3][4][4];
+
+ EEVEE_GeometryMotionData *geometry_data;
+ EEVEE_HairMotionData *hair_data;
+} EEVEE_ObjectMotionData;
+
/* ************ EFFECTS DATA ************* */
typedef enum EEVEE_EffectsFlag {
@@ -1062,17 +1086,15 @@ typedef struct EEVEE_PrivateData {
void EEVEE_motion_blur_data_init(EEVEE_MotionBlurData *mb);
void EEVEE_motion_blur_data_free(EEVEE_MotionBlurData *mb);
void EEVEE_view_layer_data_free(void *storage);
+void EEVEE_motion_hair_step_free(EEVEE_HairMotionStepData *step_data);
EEVEE_ViewLayerData *EEVEE_view_layer_data_get(void);
EEVEE_ViewLayerData *EEVEE_view_layer_data_ensure_ex(struct ViewLayer *view_layer);
EEVEE_ViewLayerData *EEVEE_view_layer_data_ensure(void);
EEVEE_ObjectEngineData *EEVEE_object_data_get(Object *ob);
EEVEE_ObjectEngineData *EEVEE_object_data_ensure(Object *ob);
-EEVEE_ObjectMotionData *EEVEE_motion_blur_object_data_get(EEVEE_MotionBlurData *mb,
- Object *ob,
- bool hair);
-EEVEE_GeometryMotionData *EEVEE_motion_blur_geometry_data_get(EEVEE_MotionBlurData *mb,
- Object *ob);
-EEVEE_HairMotionData *EEVEE_motion_blur_hair_data_get(EEVEE_MotionBlurData *mb, Object *ob);
+EEVEE_ObjectMotionData *EEVEE_motion_blur_object_data_get(EEVEE_MotionBlurData *mb, Object *ob);
+EEVEE_GeometryMotionData *EEVEE_motion_blur_geometry_data_get(EEVEE_ObjectMotionData *mb_data);
+EEVEE_HairMotionData *EEVEE_motion_blur_hair_data_get(EEVEE_ObjectMotionData *mb_data, Object *ob);
EEVEE_LightProbeEngineData *EEVEE_lightprobe_data_get(Object *ob);
EEVEE_LightProbeEngineData *EEVEE_lightprobe_data_ensure(Object *ob);
EEVEE_LightEngineData *EEVEE_light_data_get(Object *ob);