[Bf-blender-cvs] [b6b0d986bb5] soc-2018-npr: Fixed contour priority. Fixed software mode line type shader.

Nick Wu noreply at git.blender.org
Thu Sep 6 06:01:44 CEST 2018


Commit: b6b0d986bb538e20eafb809069c3dfc8e724387f
Author: Nick Wu
Date:   Thu Sep 6 10:49:22 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rBb6b0d986bb538e20eafb809069c3dfc8e724387f

Fixed contour priority. Fixed software mode line type shader.

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

M	source/blender/draw/engines/lanpr/lanpr_ops.c
M	source/blender/draw/engines/lanpr/shaders/lanpr_dpix_preview_geom.glsl
M	source/blender/draw/engines/lanpr/shaders/lanpr_dpix_project_clip_frag.glsl
M	source/blender/draw/engines/lanpr/shaders/lanpr_software_passthrough_vert.glsl

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

diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index ddc55eb411b..394c87db01b 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -2075,8 +2075,8 @@ int lanpr_triangle_line_imagespace_intersection_v2(SpinLock *spl, LANPR_RenderTr
 	//printf("%f %f %f   %f %f\n", FBC0[2], FBC1[2], FBC2[2], LFBC[2], RFBC[2]);
 
 	//bound box.
-	if (MIN3(FBC0[2], FBC1[2], FBC2[2]) > MAX2(LFBC[2], RFBC[2]))
-		return 0;
+	//if (MIN3(FBC0[2], FBC1[2], FBC2[2]) > MAX2(LFBC[2], RFBC[2]))
+	//	return 0;
 	if (MAX3(FBC0[0], FBC1[0], FBC2[0]) < MIN2(LFBC[0], RFBC[0])) return 0;
 	if (MIN3(FBC0[0], FBC1[0], FBC2[0]) > MAX2(LFBC[0], RFBC[0])) return 0;
 	if (MAX3(FBC0[1], FBC1[1], FBC2[1]) < MIN2(LFBC[1], RFBC[1])) return 0;
diff --git a/source/blender/draw/engines/lanpr/shaders/lanpr_dpix_preview_geom.glsl b/source/blender/draw/engines/lanpr/shaders/lanpr_dpix_preview_geom.glsl
index 5591cc6aa5f..79ccbe12b63 100644
--- a/source/blender/draw/engines/lanpr/shaders/lanpr_dpix_preview_geom.glsl
+++ b/source/blender/draw/engines/lanpr/shaders/lanpr_dpix_preview_geom.glsl
@@ -104,10 +104,11 @@ void main() {
 
 	int is_crease = 0;
 
-	if (edge_mask.g > 0)      { use_color = edge_mark_color;     use_thickness = line_thickness * line_thickness_edge_mark; }
+	if (p1.w>0)               { use_color = color;               use_thickness = line_thickness; } // contour override
+	else if (edge_mask.g > 0) { use_color = edge_mark_color;     use_thickness = line_thickness * line_thickness_edge_mark; }
 	else if (edge_mask.r > 0) { use_color = material_color;      use_thickness = line_thickness * line_thickness_material;  }
 	else if (edge_mask.b > 0) { use_color = intersection_color;  use_thickness = line_thickness * line_thickness_intersection;  }
-	else if (p1.w != p2.w)    { use_color = crease_color;        use_thickness = line_thickness * line_thickness_crease; is_crease = 1; }
+	else if (p2.w>0)          { use_color = crease_color;        use_thickness = line_thickness * line_thickness_crease; is_crease = 1; }
 
 	draw_line(p1, p2, is_crease);
 }
\ No newline at end of file
diff --git a/source/blender/draw/engines/lanpr/shaders/lanpr_dpix_project_clip_frag.glsl b/source/blender/draw/engines/lanpr/shaders/lanpr_dpix_project_clip_frag.glsl
index 1fbd4e6f0cc..f5fff375e7d 100644
--- a/source/blender/draw/engines/lanpr/shaders/lanpr_dpix_project_clip_frag.glsl
+++ b/source/blender/draw/engines/lanpr/shaders/lanpr_dpix_project_clip_frag.glsl
@@ -337,7 +337,8 @@ bool pointBeyondNear(vec3 p)
 	return beyond;
 }
 
-bool testProfileEdge(ivec2 texcoord, vec3 world_position)
+// 1 for contour 2 for others
+int testProfileEdge(ivec2 texcoord, vec3 world_position)
 {
 	// This should really be the inverse transpose of the modelview matrix, but
 	// that only matters if the camera has a weird anisotropic scale or skew.
@@ -362,12 +363,12 @@ bool testProfileEdge(ivec2 texcoord, vec3 world_position)
 	                  ((dot2 - crease_threshold) / (crease_fade_threshold - crease_threshold) / 2) : 0;
 	// use 0 to 0.5 to repesent the range, because 1 will represent another meaning
 
-	return contour ||
-	       ((enable_crease > 0) && (is_crease > 0)) ||
+	if(contour) return 1;
+	else if(((enable_crease > 0) && (is_crease > 0)) ||
 	       ((enable_material > 0) && (edge_mask.r > 0)) ||
 	       ((enable_edge_mark > 0) && (edge_mask.g > 0)) ||
 	       ((enable_intersection > 0) && (edge_mask.b > 0)) ||
-	       false;
+	       false) return 2;
 }
 
 void main(){
@@ -427,8 +428,8 @@ void main(){
 	// If this segment is a profile edge, test to see if it should be turned on.
 	//if (v1_world_pos.w > 0.5)
 	//{
-	bool profile_on = testProfileEdge(texcoord, v0_clipped_near);
-	if (!profile_on)
+	int profile_on = testProfileEdge(texcoord, v0_clipped_near);
+	if (profile_on==0)
 	{
 		// Profile edge should be off.
 		gl_FragData[0] = vec4(0.0, 1.0, 0.5, 0.0);
@@ -510,9 +511,8 @@ void main(){
 	//if(v0_clipped_pre_div == v1_clipped_pre_div)gl_FragData[0] =vec4(1);
 	//else gl_FragData[0] = vec4(v0_clipped_pre_div.xyz,1);
 
-
-	gl_FragData[0] = vec4(v0_clipped_pre_div.xyz, 1);//v0_clipped_pre_div;
-	gl_FragData[1] = vec4(v1_clipped_pre_div.xyz, is_crease > 0 ? crease_strength : 1);//v1_clipped_pre_div;
+	gl_FragData[0] = vec4(v0_clipped_pre_div.xyz, profile_on==1 ? 1 : 0);//contour has priority
+	gl_FragData[1] = vec4(v1_clipped_pre_div.xyz, is_crease > 0 ? crease_strength : 1);
 	//gl_FragData[2] = packOffsetTexel(num_samples, segment_screen_length,
 	//num_samples, segment_screen_length);
 	//num_samples + total_padding, segment_screen_length);
diff --git a/source/blender/draw/engines/lanpr/shaders/lanpr_software_passthrough_vert.glsl b/source/blender/draw/engines/lanpr/shaders/lanpr_software_passthrough_vert.glsl
index b2ca775be80..358c0480ec9 100644
--- a/source/blender/draw/engines/lanpr/shaders/lanpr_software_passthrough_vert.glsl
+++ b/source/blender/draw/engines/lanpr/shaders/lanpr_software_passthrough_vert.glsl
@@ -23,5 +23,5 @@ void main(){
 	gType = type;
 	gLevel = level;
 	gNormal = normal;
-	gl_Position = vec4(vec2(p), 0, 1);
+	gl_Position = vec4(vec3(p), 1);
 }



More information about the Bf-blender-cvs mailing list