[Bf-blender-cvs] [f043365c38c] blender2.8: DRW: Culling: Fix precision error.

Clément Foucault noreply at git.blender.org
Sat Mar 10 02:48:48 CET 2018


Commit: f043365c38cb75443d22c3d4c66e15852b4846f6
Author: Clément Foucault
Date:   Thu Mar 8 15:06:50 2018 +0100
Branches: blender2.8
https://developer.blender.org/rBf043365c38cb75443d22c3d4c66e15852b4846f6

DRW: Culling: Fix precision error.

This was triggering the BLI_assert(fac >= 0.0f);.

Clamp fac to ensure correct value for release builds.

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

M	source/blender/draw/intern/draw_manager_exec.c

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

diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c
index 896525a10eb..1c149330005 100644
--- a/source/blender/draw/intern/draw_manager_exec.c
+++ b/source/blender/draw/intern/draw_manager_exec.c
@@ -387,7 +387,6 @@ static void draw_clipping_setup_from_view(void)
 	if (DST.clipping.updated)
 		return;
 
-	float (*viewprojinv)[4] = DST.view_data.matstate.mat[DRW_MAT_PERSINV];
 	float (*viewinv)[4] = DST.view_data.matstate.mat[DRW_MAT_VIEWINV];
 	float (*projmat)[4] = DST.view_data.matstate.mat[DRW_MAT_WIN];
 	float (*projinv)[4] = DST.view_data.matstate.mat[DRW_MAT_WININV];
@@ -399,7 +398,9 @@ static void draw_clipping_setup_from_view(void)
 
 	/* Extract the 8 corners (world space). */
 	for (int i = 0; i < 8; i++) {
-		mul_project_m4_v3(viewprojinv, bbox.vec[i]);
+		/* Use separate matrix mul for more precision. */
+		mul_project_m4_v3(projinv, bbox.vec[i]);
+		mul_m4_v3(viewinv, bbox.vec[i]);
 	}
 
 	/* Compute clip planes using the world space frustum corners. */
@@ -458,9 +459,7 @@ static void draw_clipping_setup_from_view(void)
 
 		/* The goal is to get the smallest sphere,
 		 * not the sphere that passes through each corner */
-		if (fac > 1.0f) {
-			fac = 1.0f;
-		}
+		CLAMP(fac, 0.0f, 1.0f);
 
 		interp_v3_v3v3(bsphere->center, mid_min, mid_max, fac);



More information about the Bf-blender-cvs mailing list