[Bf-blender-cvs] [7f4daea0c08] soc-2018-npr: Fixed line width incorrect variations under different aspect ratios. commented weird code in culling.
Nick Wu
noreply at git.blender.org
Thu Sep 6 03:54:39 CEST 2018
Commit: 7f4daea0c088ab13b8d46d4b6f68763379161e57
Author: Nick Wu
Date: Thu Sep 6 09:48:04 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB7f4daea0c088ab13b8d46d4b6f68763379161e57
Fixed line width incorrect variations under different aspect ratios. commented weird code in culling.
===================================================================
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_software_chain_geom.glsl
M source/blender/draw/engines/lanpr/shaders/lanpr_software_line_chain_geom.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 2fad625aa9e..ddc55eb411b 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -1106,11 +1106,11 @@ void lanpr_cull_triangles(LANPR_RenderBuffer *rb) {
t_count = 0;
}
- if ((!rt->RL[0]->Item.pNext && !rt->RL[0]->Item.pPrev) ||
- (!rt->RL[1]->Item.pNext && !rt->RL[1]->Item.pPrev) ||
- (!rt->RL[2]->Item.pNext && !rt->RL[2]->Item.pPrev)) {
- printf("'"); // means this triangle is lonely????
- }
+ //if ((!rt->RL[0]->Item.pNext && !rt->RL[0]->Item.pPrev) ||
+ // (!rt->RL[1]->Item.pNext && !rt->RL[1]->Item.pPrev) ||
+ // (!rt->RL[2]->Item.pNext && !rt->RL[2]->Item.pPrev)) {
+ // printf("'"); // means this triangle is lonely????
+ //}
rv = &((LANPR_RenderVert *)veln->Pointer)[v_count];
rt1 = (void *)(((BYTE *)teln->Pointer) + rb->TriangleSize * t_count);
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 9405cad5fa0..5591cc6aa5f 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
@@ -69,6 +69,10 @@ void draw_line(vec4 p1, vec4 p2, int is_crease){
vec4 a, b, c, d;
vec4 offset = Normal * use_thickness * 0.001;
+
+ //correct thickness
+ offset.x *= viewport.w/viewport.z;
+
a = p1 + offset;
b = p1 - offset;
c = p2 + offset;
diff --git a/source/blender/draw/engines/lanpr/shaders/lanpr_software_chain_geom.glsl b/source/blender/draw/engines/lanpr/shaders/lanpr_software_chain_geom.glsl
index 65f9b3bf1c8..3c7945ed834 100644
--- a/source/blender/draw/engines/lanpr/shaders/lanpr_software_chain_geom.glsl
+++ b/source/blender/draw/engines/lanpr/shaders/lanpr_software_chain_geom.glsl
@@ -48,6 +48,10 @@ uniform float taper_r_dist;
uniform float taper_l_strength;
uniform float taper_r_strength;
+// for line width correction
+uniform vec4 output_viewport;
+uniform vec4 preview_viewport;
+
out vec4 out_color;
float use_thickness;
@@ -96,6 +100,8 @@ void draw_line(vec4 LL, vec4 L, vec4 R, vec4 RR){
float lim = use_thickness * 0.002;
+ float x_scale = preview_viewport.w / preview_viewport.z;
+
if (LL.x < 3e20) {
vec4 avg = normalize(L - LL) + normalize(R - L);
if (length(avg) > 0.001) {
@@ -103,6 +109,7 @@ void draw_line(vec4 LL, vec4 L, vec4 R, vec4 RR){
vec4 Minter = normalize(vec4(-Tangent.y, Tangent.x, 0, 0));
float length = use_thickness / (dot(Minter, Normal)) * 0.001;
if (length < 4 * lim) {
+ Minter.x *= x_scale;
a = L - length * Minter;
b = L + length * Minter;
}
@@ -116,6 +123,7 @@ void draw_line(vec4 LL, vec4 L, vec4 R, vec4 RR){
vec4 Minter = normalize(vec4(-Tangent.y, Tangent.x, 0, 0));
float length = use_thickness / (dot(Minter, Normal)) * 0.001;
if (length < 4 * lim) {
+ Minter.x *= x_scale;
c = R - length * Minter;
d = R + length * Minter;
}
@@ -135,7 +143,7 @@ void draw_line(vec4 LL, vec4 L, vec4 R, vec4 RR){
a.w = 1;
b.w = 1;
c.w = 1;
- d.w = 1;
+ d.w = 1;
gl_Position = a;
EmitVertex();
@@ -188,10 +196,19 @@ void main() {
if (occlusion_level_begin > level || occlusion_level_end < level) return;
+ float asp1 = output_viewport.z / output_viewport.w;
+ float asp2 = preview_viewport.z / preview_viewport.w;
+ float x_scale = asp1 / asp2;
+
vec4 LL = vec4(gl_in[0].gl_Position.xy, 0, 1),
L = vec4(gl_in[1].gl_Position.xy, 0, 1),
R = vec4(gl_in[2].gl_Position.xy, 0, 1),
RR = vec4(gl_in[3].gl_Position.xy, 0, 1);
+
+ LL.x *= x_scale;
+ L.x *= x_scale;
+ R.x *= x_scale;
+ RR.x *= x_scale;
int type = gType[1];
diff --git a/source/blender/draw/engines/lanpr/shaders/lanpr_software_line_chain_geom.glsl b/source/blender/draw/engines/lanpr/shaders/lanpr_software_line_chain_geom.glsl
index 38254a7f992..262ab8b271b 100644
--- a/source/blender/draw/engines/lanpr/shaders/lanpr_software_line_chain_geom.glsl
+++ b/source/blender/draw/engines/lanpr/shaders/lanpr_software_line_chain_geom.glsl
@@ -30,6 +30,10 @@ uniform vec4 material_color;
uniform vec4 edge_mark_color;
uniform vec4 intersection_color;
+// for line width correction
+uniform vec4 output_viewport;
+uniform vec4 preview_viewport;
+
out vec4 out_color;
float use_thickness;
@@ -41,6 +45,8 @@ void draw_line(vec4 p1, vec4 p2){
vec4 a, b, c, d;
+ float x_scale = preview_viewport.w / preview_viewport.z;
+ Normal.x *= x_scale;
vec4 offset = Normal * use_thickness * 0.001;
a = p1 + offset;
@@ -89,9 +95,17 @@ void decide_color_and_thickness(float component_id){
}
void main() {
+
+ float asp1 = output_viewport.z / output_viewport.w;
+ float asp2 = preview_viewport.z / preview_viewport.w;
+ float x_scale = asp1 / asp2;
+
vec4 p1 = vec4(gl_in[0].gl_Position.xy, 0, 1);
vec4 p2 = vec4(gl_in[1].gl_Position.xy, 0, 1);
+ p1.x *= x_scale;
+ p2.x *= x_scale;
+
decide_color_and_thickness(gl_in[0].gl_Position.z);
draw_line(p1, p2);
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 49717648a64..b2ca775be80 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
@@ -14,9 +14,10 @@ out vec3 gNormal;
void main(){
vec4 p = pos;
- float asp1 = output_viewport.z / output_viewport.w;
- float asp2 = preview_viewport.z / preview_viewport.w;
- p.x = pos.x / asp2 * asp1;
+ // move to geo shader
+ //float asp1 = output_viewport.z / output_viewport.w;
+ //float asp2 = preview_viewport.z / preview_viewport.w;
+ //p.x = pos.x / asp2 * asp1;
gOffset = uvs;
gType = type;
More information about the Bf-blender-cvs
mailing list