[Bf-blender-cvs] [a10eda79550] temp-lanpr-staging: LANPR: Use built-in math functions.

YimingWu noreply at git.blender.org
Wed Aug 14 12:26:36 CEST 2019


Commit: a10eda79550cfb83aa05fc69231715872f9ec5ca
Author: YimingWu
Date:   Wed Aug 14 18:26:07 2019 +0800
Branches: temp-lanpr-staging
https://developer.blender.org/rBa10eda79550cfb83aa05fc69231715872f9ec5ca

LANPR: Use built-in math functions.

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

M	source/blender/blenlib/BLI_math_vector.h
M	source/blender/blenlib/intern/math_vector_inline.c
M	source/blender/editors/include/ED_lanpr.h
M	source/blender/editors/lanpr/lanpr_cpu.c
M	source/blender/editors/lanpr/lanpr_util.c

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

diff --git a/source/blender/blenlib/BLI_math_vector.h b/source/blender/blenlib/BLI_math_vector.h
index 7f526585e3b..ccb42683d5a 100644
--- a/source/blender/blenlib/BLI_math_vector.h
+++ b/source/blender/blenlib/BLI_math_vector.h
@@ -197,6 +197,7 @@ MINLINE double dot_v3v3_db(const double a[3], const double b[3]) ATTR_WARN_UNUSE
 MINLINE float cross_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT;
 MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3]);
 MINLINE void cross_v3_v3v3_hi_prec(float r[3], const float a[3], const float b[3]);
+MINLINE void cross_v3_v3v3_db(double r[3], const double a[3], const double b[3]);
 
 MINLINE void add_newell_cross_v3_v3v3(float n[3], const float v_prev[3], const float v_curr[3]);
 
diff --git a/source/blender/blenlib/intern/math_vector_inline.c b/source/blender/blenlib/intern/math_vector_inline.c
index f646907797c..8cb618ae14e 100644
--- a/source/blender/blenlib/intern/math_vector_inline.c
+++ b/source/blender/blenlib/intern/math_vector_inline.c
@@ -885,6 +885,14 @@ MINLINE void cross_v3_v3v3_hi_prec(float r[3], const float a[3], const float b[3
   r[2] = (float)((double)a[0] * (double)b[1] - (double)a[1] * (double)b[0]);
 }
 
+MINLINE void cross_v3_v3v3_db(double r[3], const double a[3], const double b[3])
+{
+  BLI_assert(r != a && r != b);
+  r[0] = a[1] * b[2] - a[2] * b[1];
+  r[1] = a[2] * b[0] - a[0] * b[2];
+  r[2] = a[0] * b[1] - a[1] * b[0];
+}
+
 /* Newell's Method */
 /* excuse this fairly specific function,
  * its used for polygon normals all over the place
diff --git a/source/blender/editors/include/ED_lanpr.h b/source/blender/editors/include/ED_lanpr.h
index 73edfa0ca55..dffbd5b7eee 100644
--- a/source/blender/editors/include/ED_lanpr.h
+++ b/source/blender/editors/include/ED_lanpr.h
@@ -91,7 +91,7 @@ typedef struct LANPR_RenderTriangle {
   struct LANPR_RenderTriangle *next, *prev;
   struct LANPR_RenderVert *v[3];
   struct LANPR_RenderLine *rl[3];
-  real gn[3];
+  float gn[3];
   real gc[3];
   /*  struct BMFace *F; */
   short material_id;
@@ -225,8 +225,8 @@ typedef struct LANPR_RenderBuffer {
   int tile_size_w, tile_size_h;
   int tile_count_x, tile_count_y;
   real width_per_tile, height_per_tile;
-  tnsMatrix44d view_projection;
-  tnsMatrix44d vp_inverse;
+  float view_projection[4][4];
+  float vp_inverse[4][4];
 
   int output_mode;
   int output_aa_level;
@@ -253,7 +253,7 @@ typedef struct LANPR_RenderBuffer {
 
   int cached_for_frame;
 
-  real view_vector[3];
+  double view_vector[3];
 
   int triangle_size;
 
@@ -606,8 +606,8 @@ void tmat_apply_transform_44dTrue(tnsVector4d result, tnsMatrix44d mat, tnsVecto
 void tmat_load_identity_44d(tnsMatrix44d m);
 void tmat_make_ortho_matrix_44d(
     tnsMatrix44d mProjection, real xMin, real xMax, real yMin, real yMax, real zMin, real zMax);
-void tmat_make_perspective_matrix_44d(
-    tnsMatrix44d mProjection, real fFov_rad, real fAspect, real zMin, real zMax);
+void tmat_make_perspective_matrix_44f(
+    float (*mProjection)[4], float fFov_rad, float fAspect, float zMin, float zMax);
 void tmat_make_translation_matrix_44d(tnsMatrix44d mTrans, real x, real y, real z);
 void tmat_make_rotation_matrix_44d(tnsMatrix44d m, real angle_rad, real x, real y, real z);
 void tmat_make_scale_matrix_44d(tnsMatrix44d m, real x, real y, real z);
diff --git a/source/blender/editors/lanpr/lanpr_cpu.c b/source/blender/editors/lanpr/lanpr_cpu.c
index c1a98ac5c21..ac9bb5ec3ba 100644
--- a/source/blender/editors/lanpr/lanpr_cpu.c
+++ b/source/blender/editors/lanpr/lanpr_cpu.c
@@ -92,7 +92,7 @@ static int lanpr_triangle_line_imagespace_intersection_v2(SpinLock *spl,
                                                           LANPR_RenderTriangle *rt,
                                                           LANPR_RenderLine *rl,
                                                           Object *cam,
-                                                          tnsMatrix44d vp,
+                                                          float (*vp)[4],
                                                           real *CameraDir,
                                                           double *From,
                                                           double *To);
@@ -579,7 +579,7 @@ static int lanpr_make_next_occlusion_task_info(LANPR_RenderBuffer *rb, LANPR_Ren
     res = 1;
   }
   else {
-    BLI_listbase_is_empty(&rti->contour_pointers);
+    BLI_listbase_clear(&rti->contour_pointers);
     rti->contour = 0;
   }
 
@@ -595,7 +595,7 @@ static int lanpr_make_next_occlusion_task_info(LANPR_RenderBuffer *rb, LANPR_Ren
     res = 1;
   }
   else {
-    BLI_listbase_is_empty(&rti->intersection_pointers);
+    BLI_listbase_clear(&rti->intersection_pointers);
     rti->intersection = 0;
   }
 
@@ -611,7 +611,7 @@ static int lanpr_make_next_occlusion_task_info(LANPR_RenderBuffer *rb, LANPR_Ren
     res = 1;
   }
   else {
-    BLI_listbase_is_empty(&rti->crease_pointers);
+    BLI_listbase_clear(&rti->crease_pointers);
     rti->crease = 0;
   }
 
@@ -627,7 +627,7 @@ static int lanpr_make_next_occlusion_task_info(LANPR_RenderBuffer *rb, LANPR_Ren
     res = 1;
   }
   else {
-    BLI_listbase_is_empty(&rti->material_pointers);
+    BLI_listbase_clear(&rti->material_pointers);
     rti->material = 0;
   }
 
@@ -643,7 +643,7 @@ static int lanpr_make_next_occlusion_task_info(LANPR_RenderBuffer *rb, LANPR_Ren
     res = 1;
   }
   else {
-    BLI_listbase_is_empty(&rti->edge_mark_pointers);
+    BLI_listbase_clear(&rti->edge_mark_pointers);
     rti->edge_mark = 0;
   }
 
@@ -861,15 +861,11 @@ static int lanpr_point_inside_triangle3de(tnsVector3d v,
 
   sub_v3_v3v3_db(l, v1, v0);
   sub_v3_v3v3_db(r, v, v1);
-  /*  tmat_normalize_self_3d(l); */
-  /*  tmat_normalize_self_3d(r); */
-  tmat_vector_cross_3d(N1, l, r);
+  cross_v3_v3v3_db(N1,l,r);
 
   sub_v3_v3v3_db(l, v2, v1);
   sub_v3_v3v3_db(r, v, v2);
-  /*  tmat_normalize_self_3d(l); */
-  /*  tmat_normalize_self_3d(r); */
-  tmat_vector_cross_3d(N2, l, r);
+  cross_v3_v3v3_db(N2,l,r);
 
   if ((d = dot_v3v3_db(N1,  N2)) < 0) {
     return 0;
@@ -878,9 +874,7 @@ static int lanpr_point_inside_triangle3de(tnsVector3d v,
 
   sub_v3_v3v3_db(l, v0, v2);
   sub_v3_v3v3_db(r, v, v0);
-  /*  tmat_normalize_self_3d(l); */
-  /*  tmat_normalize_self_3d(r); */
-  tmat_vector_cross_3d(N1, l, r);
+  cross_v3_v3v3_db(N1,l,r);
 
   if ((d = dot_v3v3_db(N1,  N2)) < 0) {
     return 0;
@@ -889,9 +883,7 @@ static int lanpr_point_inside_triangle3de(tnsVector3d v,
 
   sub_v3_v3v3_db(l, v1, v0);
   sub_v3_v3v3_db(r, v, v1);
-  /*  tmat_normalize_self_3d(l); */
-  /*  tmat_normalize_self_3d(r); */
-  tmat_vector_cross_3d(N2, l, r);
+  cross_v3_v3v3_db(N2,l,r);
 
   if ((d = dot_v3v3_db(N1,  N2)) < 0) {
     return 0;
@@ -983,7 +975,7 @@ static void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
   LANPR_RenderVert *rv;
   LANPR_RenderElementLinkNode *reln, *veln, *teln;
   LANPR_RenderLineSegment *rls;
-  real *vp = rb->view_projection;
+  float** vp = rb->view_projection;
   int i;
   real a;
   int v_count = 0, t_count = 0;
@@ -1069,7 +1061,7 @@ static void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             dot2 = dot_v3v3_db(vv2,  view_dir);
             a = dot1 / (dot1 + dot2);
             interp_v3_v3v3_db(rv[0].gloc, rt->v[0]->gloc, rt->v[2]->gloc, a);
-            tmat_apply_transform_44d(rv[0].fbcoord, vp, rv[0].gloc);
+            mul_v4d_m4v4d(rv[0].fbcoord, vp, rv[0].gloc);
 
             sub_v3_v3v3_db(vv1, rt->v[0]->gloc, cam_pos);
             sub_v3_v3v3_db(vv2, cam_pos, rt->v[1]->gloc);
@@ -1077,7 +1069,7 @@ static void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             dot2 = dot_v3v3_db(vv2,  view_dir);
             a = dot1 / (dot1 + dot2);
             interp_v3_v3v3_db(rv[1].gloc, rt->v[0]->gloc, rt->v[1]->gloc, a);
-            tmat_apply_transform_44d(rv[1].fbcoord, vp, rv[1].gloc);
+            mul_v4d_m4v4d(rv[1].fbcoord, vp, rv[1].gloc);
 
             BLI_remlink(&rb->all_render_lines, (void *)rt->rl[0]);
             rt->rl[0]->next = rt->rl[0]->prev = 0;
@@ -1135,7 +1127,7 @@ static void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             dot2 = dot_v3v3_db(vv2,  view_dir);
             a = dot1 / (dot1 + dot2);
             interp_v3_v3v3_db(rv[0].gloc, rt->v[2]->gloc, rt->v[0]->gloc, a);
-            tmat_apply_transform_44d(rv[0].fbcoord, vp, rv[0].gloc);
+            mul_v4d_m4v4d(rv[0].fbcoord, vp, rv[0].gloc);
 
             sub_v3_v3v3_db(vv1, rt->v[2]->gloc, cam_pos);
             sub_v3_v3v3_db(vv2, cam_pos, rt->v[1]->gloc);
@@ -1143,7 +1135,7 @@ static void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             dot2 = dot_v3v3_db(vv2,  view_dir);
             a = dot1 / (dot1 + dot2);
             interp_v3_v3v3_db(rv[1].gloc, rt->v[2]->gloc, rt->v[1]->gloc, a);
-            tmat_apply_transform_44d(rv[1].fbcoord, vp, rv[1].gloc);
+            mul_v4d_m4v4d(rv[1].fbcoord, vp, rv[1].gloc);
 
             BLI_remlink(&rb->all_render_lines, (void *)rt->rl[0]);
             rt->rl[0]->next = rt->rl[0]->prev = 0;
@@ -1201,7 +1193,7 @@ static void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             dot2 = dot_v3v3_db(vv2,  view_dir);
             a = dot1 / (dot1 + dot2);
             interp_v3_v3v3_db(rv[0].gloc, rt->v[1]->gloc, rt->v[2]->gloc, a);
-            tmat_apply_transform_44d(rv[0].fbcoord, vp, rv[0].gloc);
+            mul_v4d_m4v4d(rv[0].fbcoord, vp, rv[0].gloc);
 
             sub_v3_v3v3_db(vv1, rt->v[1]->gloc, cam_pos);
             sub_v3_v3v3_db(vv2, cam_pos, rt->v[0]->gloc);
@@ -1209,7 +1201,7 @@ static void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             dot2 = dot_v3v3_db(vv2,  view_dir);
             a = dot1 / (dot1 + dot2);
             interp_v3_v3v3_db(rv[1].gloc, rt->v[1]->gloc, rt->v[0]->gloc, a);
-            tmat_apply_transform_44d(rv[1].fbcoord, vp, rv[1].gloc);
+            mul_v4d_m4v4d(rv[1].fbcoord, vp, rv[1].gloc);
 
             BLI_remlink(&rb->all_render_lines, (void *)rt->rl[0]);
             rt->rl[0]->next = rt->rl[0]->prev = 0;
@@ -1270,7 +1262,7 @@ static void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             dot2 = dot_v3v3_db(vv2,  view_dir);
             a = dot2 / 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list