[Bf-blender-cvs] [0c8fb534cf4] temp-lanpr-staging: LANPR: Fixing double precision paths.

YimingWu noreply at git.blender.org
Thu Aug 15 05:36:16 CEST 2019


Commit: 0c8fb534cf425f8b74cd002d1bff2a4c1dbb2e56
Author: YimingWu
Date:   Thu Aug 15 11:35:45 2019 +0800
Branches: temp-lanpr-staging
https://developer.blender.org/rB0c8fb534cf425f8b74cd002d1bff2a4c1dbb2e56

LANPR: Fixing double precision paths.

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

M	source/blender/blenlib/BLI_math_matrix.h
M	source/blender/blenlib/intern/math_matrix.c
M	source/blender/editors/include/ED_lanpr.h
M	source/blender/editors/lanpr/lanpr_chain.c
M	source/blender/editors/lanpr/lanpr_cpu.c
M	source/blender/editors/lanpr/lanpr_util.c

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

diff --git a/source/blender/blenlib/BLI_math_matrix.h b/source/blender/blenlib/BLI_math_matrix.h
index 52d976daa2d..83f318c9184 100644
--- a/source/blender/blenlib/BLI_math_matrix.h
+++ b/source/blender/blenlib/BLI_math_matrix.h
@@ -178,6 +178,7 @@ void mul_v2_m2v2(float r[2], const float M[2][2], const float v[2]);
 void mul_m2v2(const float M[2][2], float v[2]);
 void mul_mat3_m4_v3(const float M[4][4], float r[3]);
 void mul_v3_mat3_m4v3(float r[3], const float M[4][4], const float v[3]);
+void mul_v3db_mat3_m4v3(double r[3], const float M[4][4], const float v[3]);
 void mul_m4_v4(const float M[4][4], float r[4]);
 void mul_v4_m4v4(float r[4], const float M[4][4], const float v[4]);
 void mul_v4_m4v3(float r[4], const float M[4][4], const float v[3]); /* v has implicit w = 1.0f */
diff --git a/source/blender/blenlib/intern/math_matrix.c b/source/blender/blenlib/intern/math_matrix.c
index 7c64206134b..6f36d695fcf 100644
--- a/source/blender/blenlib/intern/math_matrix.c
+++ b/source/blender/blenlib/intern/math_matrix.c
@@ -646,6 +646,16 @@ void mul_v3_mat3_m4v3(float r[3], const float mat[4][4], const float vec[3])
   r[2] = x * mat[0][2] + y * mat[1][2] + mat[2][2] * vec[2];
 }
 
+void mul_v3db_mat3_m4v3(double r[3], const float mat[4][4], const float vec[3])
+{
+  const float x = vec[0];
+  const float y = vec[1];
+
+  r[0] = x * mat[0][0] + y * mat[1][0] + mat[2][0] * vec[2];
+  r[1] = x * mat[0][1] + y * mat[1][1] + mat[2][1] * vec[2];
+  r[2] = x * mat[0][2] + y * mat[1][2] + mat[2][2] * vec[2];
+}
+
 void mul_project_m4_v3(const float mat[4][4], float vec[3])
 {
   /* absolute value to not flip the frustum upside down behind the camera */
diff --git a/source/blender/editors/include/ED_lanpr.h b/source/blender/editors/include/ED_lanpr.h
index 496d463726a..279b3bc7160 100644
--- a/source/blender/editors/include/ED_lanpr.h
+++ b/source/blender/editors/include/ED_lanpr.h
@@ -91,8 +91,8 @@ typedef struct LANPR_RenderTriangle {
   struct LANPR_RenderTriangle *next, *prev;
   struct LANPR_RenderVert *v[3];
   struct LANPR_RenderLine *rl[3];
-  float gn[3];
-  real gc[3];
+  double gn[3];
+  double gc[3];
   /*  struct BMFace *F; */
   short material_id;
   ListBase intersecting_verts;
diff --git a/source/blender/editors/lanpr/lanpr_chain.c b/source/blender/editors/lanpr/lanpr_chain.c
index ebd8b3d28cc..b3c264ae071 100644
--- a/source/blender/editors/lanpr/lanpr_chain.c
+++ b/source/blender/editors/lanpr/lanpr_chain.c
@@ -81,7 +81,7 @@ static LANPR_RenderLineChainItem *lanpr_append_render_line_chain_point(LANPR_Ren
                                                                        float gx,
                                                                        float gy,
                                                                        float gz,
-                                                                       float *normal,
+                                                                       double *normal,
                                                                        char type,
                                                                        int level)
 {
@@ -93,7 +93,7 @@ static LANPR_RenderLineChainItem *lanpr_append_render_line_chain_point(LANPR_Ren
   rlci->gpos[0] = gx;
   rlci->gpos[1] = gy;
   rlci->gpos[2] = gz;
-  copy_v3_v3(rlci->normal, normal);
+  copy_v3fl_v3db(rlci->normal, normal);
   rlci->line_type = type & LANPR_EDGE_FLAG_ALL_TYPE;
   rlci->occlusion = level;
   BLI_addtail(&rlc->chain, rlci);
@@ -206,20 +206,16 @@ void ED_lanpr_NO_THREAD_chain_feature_lines(LANPR_RenderBuffer *rb)
 
     LANPR_RenderLine *new_rl = rl;
     LANPR_RenderVert *new_rv;
-    float N[3] = {0};
+    double N[3] = {0};
 
     if (rl->tl) {
-      N[0] += rl->tl->gn[0];
-      N[1] += rl->tl->gn[1];
-      N[2] += rl->tl->gn[2];
+      add_v3_v3_db(N,rl->tl->gn);
     }
     if (rl->tr) {
-      N[0] += rl->tr->gn[0];
-      N[1] += rl->tr->gn[1];
-      N[2] += rl->tr->gn[2];
+      add_v3_v3_db(N,rl->tr->gn);
     }
     if (rl->tl || rl->tr) {
-      normalize_v3(N);
+      normalize_v3_d(N);
     }
 
     /*  step 1: grow left */
@@ -242,12 +238,12 @@ void ED_lanpr_NO_THREAD_chain_feature_lines(LANPR_RenderBuffer *rb)
       if (new_rl->tl || new_rl->tr) {
         zero_v3(N);
         if (new_rl->tl) {
-          add_v3_v3(N,new_rl->tl->gn);
+          add_v3_v3_db(N,new_rl->tl->gn);
         }
         if (new_rl->tr) {
-          add_v3_v3(N,new_rl->tr->gn);
+          add_v3_v3_db(N,new_rl->tr->gn);
         }
-        normalize_v3(N);
+        normalize_v3_d(N);
       }
 
       if (new_rv == new_rl->l) {
@@ -306,12 +302,12 @@ void ED_lanpr_NO_THREAD_chain_feature_lines(LANPR_RenderBuffer *rb)
     if (rl->tl || rl->tr) {
       zero_v3(N);
       if (rl->tl) {
-        add_v3_v3(N,rl->tl->gn);
+        add_v3_v3_db(N,rl->tl->gn);
       }
       if (rl->tr) {
-        add_v3_v3(N,rl->tr->gn);
+        add_v3_v3_db(N,rl->tr->gn);
       }
-      normalize_v3(N);
+      normalize_v3_d(N);
     }
     /*  step 2: this line */
     rls = rl->segments.first;
@@ -347,12 +343,12 @@ void ED_lanpr_NO_THREAD_chain_feature_lines(LANPR_RenderBuffer *rb)
       if (new_rl->tl || new_rl->tr) {
         zero_v3(N);
         if (new_rl->tl) {
-          add_v3_v3(N,new_rl->tl->gn);
+          add_v3_v3_db(N,new_rl->tl->gn);
         }
         if (new_rl->tr) {
-          add_v3_v3(N,new_rl->tr->gn);
+          add_v3_v3_db(N,new_rl->tr->gn);
         }
-        normalize_v3(N);
+        normalize_v3_d(N);
       }
 
       /*  fix leading vertex type */
diff --git a/source/blender/editors/lanpr/lanpr_cpu.c b/source/blender/editors/lanpr/lanpr_cpu.c
index 4a4437e2fa3..050bd3410f2 100644
--- a/source/blender/editors/lanpr/lanpr_cpu.c
+++ b/source/blender/editors/lanpr/lanpr_cpu.c
@@ -1061,6 +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);
+            rv[0].gloc[3] = 1.0f;
             mul_v4d_m4v4d(rv[0].fbcoord, vp, rv[0].gloc);
 
             sub_v3_v3v3_db(vv1, rt->v[0]->gloc, cam_pos);
@@ -1069,6 +1070,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);
+            rv[1].gloc[3] = 1.0f;
             mul_v4d_m4v4d(rv[1].fbcoord, vp, rv[1].gloc);
 
             BLI_remlink(&rb->all_render_lines, (void *)rt->rl[0]);
@@ -1127,6 +1129,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);
+            rv[0].gloc[3] = 1.0f;
             mul_v4d_m4v4d(rv[0].fbcoord, vp, rv[0].gloc);
 
             sub_v3_v3v3_db(vv1, rt->v[2]->gloc, cam_pos);
@@ -1135,6 +1138,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);
+            rv[1].gloc[3] = 1.0f;
             mul_v4d_m4v4d(rv[1].fbcoord, vp, rv[1].gloc);
 
             BLI_remlink(&rb->all_render_lines, (void *)rt->rl[0]);
@@ -1193,6 +1197,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);
+            rv[0].gloc[3] = 1.0f;
             mul_v4d_m4v4d(rv[0].fbcoord, vp, rv[0].gloc);
 
             sub_v3_v3v3_db(vv1, rt->v[1]->gloc, cam_pos);
@@ -1201,6 +1206,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);
+            rv[1].gloc[3] = 1.0f;
             mul_v4d_m4v4d(rv[1].fbcoord, vp, rv[1].gloc);
 
             BLI_remlink(&rb->all_render_lines, (void *)rt->rl[0]);
@@ -1262,6 +1268,7 @@ static void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             dot2 = dot_v3v3_db(vv2,  view_dir);
             a = dot2 / (dot1 + dot2);
             interp_v3_v3v3_db(rv[0].gloc, rt->v[0]->gloc, rt->v[1]->gloc, a);
+            rv[0].gloc[3] = 1.0f;
             mul_v4d_m4v4d(rv[0].fbcoord, vp, rv[0].gloc);
 
             sub_v3_v3v3_db(vv1, rt->v[2]->gloc, cam_pos);
@@ -1270,6 +1277,7 @@ static void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             dot2 = dot_v3v3_db(vv2,  view_dir);
             a = dot2 / (dot1 + dot2);
             interp_v3_v3v3_db(rv[1].gloc, rt->v[0]->gloc, rt->v[2]->gloc, a);
+            rv[1].gloc[3] = 1.0f;
             mul_v4d_m4v4d(rv[1].fbcoord, vp, rv[1].gloc);
 
             BLI_remlink(&rb->all_render_lines, (void *)rt->rl[0]);
@@ -1345,6 +1353,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);
+            rv[0].gloc[3] = 1.0f;
             mul_v4d_m4v4d(rv[0].fbcoord, vp, rv[0].gloc);
 
             sub_v3_v3v3_db(vv1, rt->v[1]->gloc, cam_pos);
@@ -1353,6 +1362,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);
+            rv[1].gloc[3] = 1.0f;
             mul_v4d_m4v4d(rv[1].fbcoord, vp, rv[1].gloc);
 
             BLI_remlink(&rb->all_render_lines, (void *)rt->rl[0]);
@@ -1428,6 +1438,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);
+            rv[0].gloc[3] = 1.0f;
             mul_v4d_m4v4d(rv[0].fbcoord, vp, rv[0].gloc);
 
             sub_v3_v3v3_db(v

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list