[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54987] trunk/blender/source/blender: code cleanup: ~400 duplicate lines for AO form factor math.

Campbell Barton ideasman42 at gmail.com
Sun Mar 3 06:07:59 CET 2013


Revision: 54987
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54987
Author:   campbellbarton
Date:     2013-03-03 05:07:58 +0000 (Sun, 03 Mar 2013)
Log Message:
-----------
code cleanup: ~400 duplicate lines for AO form factor math.

Modified Paths:
--------------
    trunk/blender/source/blender/blenlib/BLI_math_geom.h
    trunk/blender/source/blender/blenlib/intern/math_geom.c
    trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
    trunk/blender/source/blender/editors/space_view3d/view3d_intern.h
    trunk/blender/source/blender/render/intern/source/occlusion.c

Modified: trunk/blender/source/blender/blenlib/BLI_math_geom.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_math_geom.h	2013-03-03 04:54:33 UTC (rev 54986)
+++ trunk/blender/source/blender/blenlib/BLI_math_geom.h	2013-03-03 05:07:58 UTC (rev 54987)
@@ -260,6 +260,11 @@
 
 /********************************* Form Factor *******************************/
 
+float form_factor_quad(const float p[3], const float n[3],
+                       const float q0[3], const float q1[3], const float q2[3], const float q3[3]);
+int form_factor_visible_quad(const float p[3], const float n[3],
+                             const float v0[3], const float v1[3], const float v2[3],
+                             float q0[3], float q1[3], float q2[3], float q3[3]);
 float form_factor_hemi_poly(float p[3], float n[3],
                             float v1[3], float v2[3], float v3[3], float v4[3]);
 

Modified: trunk/blender/source/blender/blenlib/intern/math_geom.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/math_geom.c	2013-03-03 04:54:33 UTC (rev 54986)
+++ trunk/blender/source/blender/blenlib/intern/math_geom.c	2013-03-03 05:07:58 UTC (rev 54987)
@@ -3171,9 +3171,9 @@
 	r[2] = v1[2] + fac * (v2[2] - v1[2]);
 }
 
-static int ff_visible_quad(const float p[3], const float n[3],
-                           const float v0[3], const float v1[3], const float v2[3],
-                           float q0[3], float q1[3], float q2[3], float q3[3])
+int form_factor_visible_quad(const float p[3], const float n[3],
+                             const float v0[3], const float v1[3], const float v2[3],
+                             float q0[3], float q1[3], float q2[3], float q3[3])
 {
 	static const float epsilon = 1e-6f;
 	float c, sd[3];
@@ -3532,8 +3532,8 @@
 	}
 }
 
-static float ff_quad_form_factor(const float p[3], const float n[3],
-                                 const float q0[3], const float q1[3], const float q2[3], const float q3[3])
+float form_factor_quad(const float p[3], const float n[3],
+                       const float q0[3], const float q1[3], const float q2[3], const float q3[3])
 {
 	float r0[3], r1[3], r2[3], r3[3], g0[3], g1[3], g2[3], g3[3];
 	float a1, a2, a3, a4, dot1, dot2, dot3, dot4, result;
@@ -3579,11 +3579,11 @@
 	 * covered by a quad or triangle, cosine weighted */
 	float q0[3], q1[3], q2[3], q3[3], contrib = 0.0f;
 
-	if (ff_visible_quad(p, n, v1, v2, v3, q0, q1, q2, q3))
-		contrib += ff_quad_form_factor(p, n, q0, q1, q2, q3);
+	if (form_factor_visible_quad(p, n, v1, v2, v3, q0, q1, q2, q3))
+		contrib += form_factor_quad(p, n, q0, q1, q2, q3);
 
-	if (v4 && ff_visible_quad(p, n, v1, v3, v4, q0, q1, q2, q3))
-		contrib += ff_quad_form_factor(p, n, q0, q1, q2, q3);
+	if (v4 && form_factor_visible_quad(p, n, v1, v3, v4, q0, q1, q2, q3))
+		contrib += form_factor_quad(p, n, q0, q1, q2, q3);
 
 	return contrib;
 }

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2013-03-03 04:54:33 UTC (rev 54986)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2013-03-03 05:07:58 UTC (rev 54987)
@@ -1001,7 +1001,7 @@
 	return ndof->dt * normalize_v3_v3(axis, ndof->rvec);
 }
 
-void ndof_to_quat(struct wmNDOFMotionData *ndof, float q[4])
+void ndof_to_quat(const struct wmNDOFMotionData *ndof, float q[4])
 {
 	float axis[3];
 	float angle;

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_intern.h	2013-03-03 04:54:33 UTC (rev 54986)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_intern.h	2013-03-03 05:07:58 UTC (rev 54987)
@@ -101,8 +101,8 @@
 void VIEW3D_OT_zoom_border(struct wmOperatorType *ot);
 
 void view3d_boxview_copy(ScrArea *sa, ARegion *ar);
-void ndof_to_quat(struct wmNDOFMotionData *ndof, float q[4]);
-float ndof_to_axis_angle(struct wmNDOFMotionData *ndof, float axis[3]);
+void ndof_to_quat(const struct wmNDOFMotionData *ndof, float q[4]);
+float ndof_to_axis_angle(const struct wmNDOFMotionData *ndof, float axis[3]);
 
 /* view3d_fly.c */
 void view3d_keymap(struct wmKeyConfig *keyconf);

Modified: trunk/blender/source/blender/render/intern/source/occlusion.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/occlusion.c	2013-03-03 04:54:33 UTC (rev 54986)
+++ trunk/blender/source/blender/render/intern/source/occlusion.c	2013-03-03 05:07:58 UTC (rev 54987)
@@ -763,414 +763,6 @@
 	return ((node->area * dotemit * dotreceive) / (d2 + node->area * INVPI)) * INVPI;
 }
 
-static void vec_add_dir(float r[3], const float v1[3], const float v2[3], const float fac)
-{
-	r[0] = v1[0] + fac * (v2[0] - v1[0]);
-	r[1] = v1[1] + fac * (v2[1] - v1[1]);
-	r[2] = v1[2] + fac * (v2[2] - v1[2]);
-}
-
-/* TODO: exact duplicate of ff_visible_quad() in math_geom.c
- *       why not de-duplicate? (also above helper func) */
-static int occ_visible_quad(const float p[3], const float n[3],
-                            const float v0[3], const float v1[3], const float v2[3],
-                            float q0[3], float q1[3], float q2[3], float q3[3])
-{
-	static const float epsilon = 1e-6f;
-	float c, sd[3];
-	
-	c = dot_v3v3(n, p);
-
-	/* signed distances from the vertices to the plane. */
-	sd[0] = dot_v3v3(n, v0) - c;
-	sd[1] = dot_v3v3(n, v1) - c;
-	sd[2] = dot_v3v3(n, v2) - c;
-
-	if (fabsf(sd[0]) < epsilon) sd[0] = 0.0f;
-	if (fabsf(sd[1]) < epsilon) sd[1] = 0.0f;
-	if (fabsf(sd[2]) < epsilon) sd[2] = 0.0f;
-
-	if (sd[0] > 0) {
-		if (sd[1] > 0) {
-			if (sd[2] > 0) {
-				/* +++ */
-				copy_v3_v3(q0, v0);
-				copy_v3_v3(q1, v1);
-				copy_v3_v3(q2, v2);
-				copy_v3_v3(q3, q2);
-			}
-			else if (sd[2] < 0) {
-				/* ++- */
-				copy_v3_v3(q0, v0);
-				copy_v3_v3(q1, v1);
-				vec_add_dir(q2, v1, v2, (sd[1] / (sd[1] - sd[2])));
-				vec_add_dir(q3, v0, v2, (sd[0] / (sd[0] - sd[2])));
-			}
-			else {
-				/* ++0 */
-				copy_v3_v3(q0, v0);
-				copy_v3_v3(q1, v1);
-				copy_v3_v3(q2, v2);
-				copy_v3_v3(q3, q2);
-			}
-		}
-		else if (sd[1] < 0) {
-			if (sd[2] > 0) {
-				/* +-+ */
-				copy_v3_v3(q0, v0);
-				vec_add_dir(q1, v0, v1, (sd[0] / (sd[0] - sd[1])));
-				vec_add_dir(q2, v1, v2, (sd[1] / (sd[1] - sd[2])));
-				copy_v3_v3(q3, v2);
-			}
-			else if (sd[2] < 0) {
-				/* +-- */
-				copy_v3_v3(q0, v0);
-				vec_add_dir(q1, v0, v1, (sd[0] / (sd[0] - sd[1])));
-				vec_add_dir(q2, v0, v2, (sd[0] / (sd[0] - sd[2])));
-				copy_v3_v3(q3, q2);
-			}
-			else {
-				/* +-0 */
-				copy_v3_v3(q0, v0);
-				vec_add_dir(q1, v0, v1, (sd[0] / (sd[0] - sd[1])));
-				copy_v3_v3(q2, v2);
-				copy_v3_v3(q3, q2);
-			}
-		}
-		else {
-			if (sd[2] > 0) {
-				/* +0+ */
-				copy_v3_v3(q0, v0);
-				copy_v3_v3(q1, v1);
-				copy_v3_v3(q2, v2);
-				copy_v3_v3(q3, q2);
-			}
-			else if (sd[2] < 0) {
-				/* +0- */
-				copy_v3_v3(q0, v0);
-				copy_v3_v3(q1, v1);
-				vec_add_dir(q2, v0, v2, (sd[0] / (sd[0] - sd[2])));
-				copy_v3_v3(q3, q2);
-			}
-			else {
-				/* +00 */
-				copy_v3_v3(q0, v0);
-				copy_v3_v3(q1, v1);
-				copy_v3_v3(q2, v2);
-				copy_v3_v3(q3, q2);
-			}
-		}
-	}
-	else if (sd[0] < 0) {
-		if (sd[1] > 0) {
-			if (sd[2] > 0) {
-				/* -++ */
-				vec_add_dir(q0, v0, v1, (sd[0] / (sd[0] - sd[1])));
-				copy_v3_v3(q1, v1);
-				copy_v3_v3(q2, v2);
-				vec_add_dir(q3, v0, v2, (sd[0] / (sd[0] - sd[2])));
-			}
-			else if (sd[2] < 0) {
-				/* -+- */
-				vec_add_dir(q0, v0, v1, (sd[0] / (sd[0] - sd[1])));
-				copy_v3_v3(q1, v1);
-				vec_add_dir(q2, v1, v2, (sd[1] / (sd[1] - sd[2])));
-				copy_v3_v3(q3, q2);
-			}
-			else {
-				/* -+0 */
-				vec_add_dir(q0, v0, v1, (sd[0] / (sd[0] - sd[1])));
-				copy_v3_v3(q1, v1);
-				copy_v3_v3(q2, v2);
-				copy_v3_v3(q3, q2);
-			}
-		}
-		else if (sd[1] < 0) {
-			if (sd[2] > 0) {
-				/* --+ */
-				vec_add_dir(q0, v0, v2, (sd[0] / (sd[0] - sd[2])));
-				vec_add_dir(q1, v1, v2, (sd[1] / (sd[1] - sd[2])));
-				copy_v3_v3(q2, v2);
-				copy_v3_v3(q3, q2);
-			}
-			else if (sd[2] < 0) {
-				/* --- */
-				return 0;
-			}
-			else {
-				/* --0 */
-				return 0;
-			}
-		}
-		else {
-			if (sd[2] > 0) {
-				/* -0+ */
-				vec_add_dir(q0, v0, v2, (sd[0] / (sd[0] - sd[2])));
-				copy_v3_v3(q1, v1);
-				copy_v3_v3(q2, v2);
-				copy_v3_v3(q3, q2);
-			}
-			else if (sd[2] < 0) {
-				/* -0- */
-				return 0;
-			}
-			else {
-				/* -00 */
-				return 0;
-			}
-		}
-	}
-	else {
-		if (sd[1] > 0) {
-			if (sd[2] > 0) {
-				/* 0++ */
-				copy_v3_v3(q0, v0);
-				copy_v3_v3(q1, v1);
-				copy_v3_v3(q2, v2);
-				copy_v3_v3(q3, q2);
-			}
-			else if (sd[2] < 0) {
-				/* 0+- */
-				copy_v3_v3(q0, v0);
-				copy_v3_v3(q1, v1);
-				vec_add_dir(q2, v1, v2, (sd[1] / (sd[1] - sd[2])));
-				copy_v3_v3(q3, q2);
-			}
-			else {
-				/* 0+0 */
-				copy_v3_v3(q0, v0);
-				copy_v3_v3(q1, v1);
-				copy_v3_v3(q2, v2);
-				copy_v3_v3(q3, q2);
-			}
-		}
-		else if (sd[1] < 0) {
-			if (sd[2] > 0) {
-				/* 0-+ */
-				copy_v3_v3(q0, v0);
-				vec_add_dir(q1, v1, v2, (sd[1] / (sd[1] - sd[2])));
-				copy_v3_v3(q2, v2);
-				copy_v3_v3(q3, q2);
-			}
-			else if (sd[2] < 0) {
-				/* 0-- */
-				return 0;
-			}
-			else {
-				/* 0-0 */
-				return 0;
-			}
-		}
-		else {
-			if (sd[2] > 0) {
-				/* 00+ */
-				copy_v3_v3(q0, v0);
-				copy_v3_v3(q1, v1);
-				copy_v3_v3(q2, v2);
-				copy_v3_v3(q3, q2);
-			}
-			else if (sd[2] < 0) {
-				/* 00- */
-				return 0;
-			}
-			else {
-				/* 000 */
-				return 0;
-			}
-		}
-	}
-
-	return 1;
-}
-
-/* altivec optimization, this works, but is unused */
-
-#if 0
-#include <Accelerate/Accelerate.h>
-
-typedef union {
-	vFloat v;
-	float f[4];
-} vFloatResult;
-
-static vFloat vec_splat_float(float val)
-{
-	return (vFloat) {val, val, val, val};
-}
-
-static float occ_quad_form_factor(float *p, float *n, float *q0, float *q1, float *q2, float *q3)
-{
-	vFloat vcos, rlen, vrx, vry, vrz, vsrx, vsry, vsrz, gx, gy, gz, vangle;
-	vUInt8 rotate = (vUInt8) {4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3};
-	vFloatResult vresult;
-	float result;
-
-	/* compute r* */
-	vrx = (vFloat) {q0[0], q1[0], q2[0], q3[0]} -vec_splat_float(p[0]);
-	vry = (vFloat) {q0[1], q1[1], q2[1], q3[1]} -vec_splat_float(p[1]);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list