[Bf-blender-cvs] [c5e7dff566e] temp-eeveelightcache: DRW: Codestyle: Add alias for accessing particular matrix in DRWMatrixState

Clément Foucault noreply at git.blender.org
Thu Jun 28 15:55:05 CEST 2018


Commit: c5e7dff566e407a1591d8b3c5bc2882ac5ead83a
Author: Clément Foucault
Date:   Mon Jun 25 18:31:31 2018 +0200
Branches: temp-eeveelightcache
https://developer.blender.org/rBc5e7dff566e407a1591d8b3c5bc2882ac5ead83a

DRW: Codestyle: Add alias for accessing particular matrix in DRWMatrixState

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

M	source/blender/draw/engines/eevee/eevee_lightprobes.c
M	source/blender/draw/intern/DRW_render.h

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

diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c
index a8ad25bc7c6..638a9709a58 100644
--- a/source/blender/draw/engines/eevee/eevee_lightprobes.c
+++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c
@@ -433,6 +433,7 @@ void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedat
 	const Scene *scene_eval = DEG_get_evaluated_scene(draw_ctx->depsgraph);
 
 	pinfo->num_planar = 0;
+	pinfo->vis_data.collection = NULL;
 
 	{
 		psl->probe_background = DRW_pass_create("World Probe Background Pass", DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL);
@@ -757,18 +758,18 @@ static void lightbake_planar_compute_render_matrices(
         EEVEE_PlanarReflection *eplanar, DRWMatrixState *r_matstate, const float viewmat[4][4])
 {
 	/* Reflect Camera Matrix. */
-	mul_m4_m4m4(r_matstate->mat[DRW_MAT_VIEW], viewmat, eplanar->mtx);
+	mul_m4_m4m4(r_matstate->viewmat, viewmat, eplanar->mtx);
 	/* TODO FOV margin */
 	/* Temporal sampling jitter should be already applied to the DRW_MAT_WIN. */
-	DRW_viewport_matrix_get(r_matstate->mat[DRW_MAT_WIN], DRW_MAT_WIN);
+	DRW_viewport_matrix_get(r_matstate->winmat, DRW_MAT_WIN);
 	/* Apply Projection Matrix. */
-	mul_m4_m4m4(r_matstate->mat[DRW_MAT_PERS], r_matstate->mat[DRW_MAT_WIN], r_matstate->mat[DRW_MAT_VIEW]);
+	mul_m4_m4m4(r_matstate->persmat, r_matstate->winmat, r_matstate->viewmat);
 
 	/* This is the matrix used to reconstruct texture coordinates.
 	 * We use the original view matrix because it does not create
 	 * visual artifacts if receiver is not perfectly aligned with
 	 * the planar reflection probe. */
-	mul_m4_m4m4(eplanar->reflectionmat, r_matstate->mat[DRW_MAT_WIN], viewmat); /* TODO FOV margin */
+	mul_m4_m4m4(eplanar->reflectionmat, r_matstate->winmat, viewmat); /* TODO FOV margin */
 	/* Convert from [-1, 1] to [0, 1] (NDC to Texture coord). */
 	mul_m4_m4m4(eplanar->reflectionmat, texcomat, eplanar->reflectionmat);
 }
@@ -831,31 +832,25 @@ static void render_cubemap(
         const float pos[3], float clipsta, float clipend)
 {
 	DRWMatrixState matstate;
-	float (*viewmat)[4] = matstate.mat[DRW_MAT_VIEW];
-	float (*viewinv)[4] = matstate.mat[DRW_MAT_VIEWINV];
-	float (*persmat)[4] = matstate.mat[DRW_MAT_PERS];
-	float (*persinv)[4] = matstate.mat[DRW_MAT_PERSINV];
-	float (*winmat)[4] = matstate.mat[DRW_MAT_WIN];
-	float (*wininv)[4] = matstate.mat[DRW_MAT_WININV];
 
 	/* Move to capture position */
 	float posmat[4][4];
 	unit_m4(posmat);
 	negate_v3_v3(posmat[3], pos);
 
-	perspective_m4(winmat, -clipsta, clipsta, -clipsta, clipsta, clipsta, clipend);
-	invert_m4_m4(wininv, winmat);
+	perspective_m4(matstate.winmat, -clipsta, clipsta, -clipsta, clipsta, clipsta, clipend);
+	invert_m4_m4(matstate.wininv, matstate.winmat);
 
 	/* 1 - Render to each cubeface individually.
 	 * We do this instead of using geometry shader because a) it's faster,
 	 * b) it's easier than fixing the nodetree shaders (for view dependant effects). */
 	for (int i = 0; i < 6; ++i) {
 		/* Setup custom matrices */
-		mul_m4_m4m4(viewmat, cubefacemat[i], posmat);
-		mul_m4_m4m4(persmat, winmat, viewmat);
-		invert_m4_m4(persinv, persmat);
-		invert_m4_m4(viewinv, viewmat);
-		invert_m4_m4(wininv, winmat);
+		mul_m4_m4m4(matstate.viewmat, cubefacemat[i], posmat);
+		mul_m4_m4m4(matstate.persmat, matstate.winmat, matstate.viewmat);
+		invert_m4_m4(matstate.persinv, matstate.persmat);
+		invert_m4_m4(matstate.viewinv, matstate.viewmat);
+		invert_m4_m4(matstate.wininv, matstate.winmat);
 
 		DRW_viewport_matrix_override_set_all(&matstate);
 
@@ -868,12 +863,6 @@ static void render_reflections(
         EEVEE_PlanarReflection *planar_data, int ref_count)
 {
 	DRWMatrixState matstate;
-	float (*viewmat)[4] = matstate.mat[DRW_MAT_VIEW];
-	float (*viewinv)[4] = matstate.mat[DRW_MAT_VIEWINV];
-	float (*persmat)[4] = matstate.mat[DRW_MAT_PERS];
-	float (*persinv)[4] = matstate.mat[DRW_MAT_PERSINV];
-	float (*winmat)[4] = matstate.mat[DRW_MAT_WIN];
-	float (*wininv)[4] = matstate.mat[DRW_MAT_WININV];
 
 	float original_viewmat[4][4];
 	DRW_viewport_matrix_get(original_viewmat, DRW_MAT_VIEW);
@@ -881,9 +870,9 @@ static void render_reflections(
 	for (int i = 0; i < ref_count; ++i) {
 		/* Setup custom matrices */
 		lightbake_planar_compute_render_matrices(planar_data + i, &matstate, original_viewmat);
-		invert_m4_m4(persinv, persmat);
-		invert_m4_m4(viewinv, viewmat);
-		invert_m4_m4(wininv, winmat);
+		invert_m4_m4(matstate.persinv, matstate.persmat);
+		invert_m4_m4(matstate.viewinv, matstate.viewmat);
+		invert_m4_m4(matstate.wininv, matstate.winmat);
 		DRW_viewport_matrix_override_set_all(&matstate);
 
 		callback(i, user_data);
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 8abada0371a..18df327eb6d 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -410,6 +410,7 @@ void DRW_pass_sort_shgroup_z(DRWPass *pass);
 
 /* Viewport */
 typedef enum {
+	/* keep in sync with the union struct DRWMatrixState. */
 	DRW_MAT_PERS = 0,
 	DRW_MAT_PERSINV,
 	DRW_MAT_VIEW,
@@ -421,7 +422,18 @@ typedef enum {
 } DRWViewportMatrixType;
 
 typedef struct DRWMatrixState {
-	float mat[DRW_MAT_COUNT][4][4];
+	union {
+		float mat[DRW_MAT_COUNT][4][4];
+		struct {
+			/* keep in sync with the enum DRWViewportMatrixType. */
+			float persmat[4][4];
+			float persinv[4][4];
+			float viewmat[4][4];
+			float viewinv[4][4];
+			float winmat[4][4];
+			float wininv[4][4];
+		};
+	};
 } DRWMatrixState;
 
 void DRW_viewport_init(const bContext *C);



More information about the Bf-blender-cvs mailing list