[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