[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