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); } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs