[Bf-blender-cvs] [a04dafceffb] soc-2019-npr: LANPR: CPU mode shaders now follow viewport zoom/pan values.

YimingWu noreply at git.blender.org
Mon Jul 8 11:30:19 CEST 2019


Commit: a04dafceffbaf3891f240f25afd61a5380e278aa
Author: YimingWu
Date:   Mon Jul 8 17:29:42 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rBa04dafceffbaf3891f240f25afd61a5380e278aa

LANPR: CPU mode shaders now follow viewport zoom/pan values.

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

M	source/blender/draw/engines/lanpr/lanpr_ops.c
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 740866cf9ec..efd46b71de6 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -22,6 +22,7 @@
 #include "BKE_camera.h"
 #include "BKE_collection.h"
 #include "BKE_report.h"
+#include "BKE_screen.h"
 #include "GPU_draw.h"
 
 #include "GPU_batch.h"
@@ -4099,6 +4100,7 @@ void lanpr_software_draw_scene(void *vedata, GPUFrameBuffer *dfb, int is_render)
   float indentity_mat[4][4];
   static float normal_object_direction[3] = {0, 0, 1};
   float use_background_color[4]={0.0f ,0.0f,0.0f,1.0f};
+  static float camdx,camdy,camzoom;
 
   if (is_render) {
     lanpr_rebuild_all_command(lanpr);
@@ -4144,6 +4146,17 @@ void lanpr_software_draw_scene(void *vedata, GPUFrameBuffer *dfb, int is_render)
     DRW_view_default_set(view);
     DRW_view_set_active(view);
 
+    RegionView3D* rv3d = v3d?draw_ctx->rv3d:NULL;
+    if(rv3d){
+      camdx = rv3d->camdx;
+      camdy = rv3d->camdy;
+      camzoom = BKE_screen_view3d_zoom_to_fac(rv3d->camzoom);
+      printf("%f %f %f", camdx,camdy,camzoom);
+    }else{
+      camdx = camdy = 0.0f;
+      camzoom = 1.0f;
+    }
+
     if (lanpr->enable_chaining && lanpr_share.render_buffer_shared->chain_draw_batch) {
       for (ll = lanpr->line_layers.last; ll; ll = ll->prev) {
         LANPR_RenderBuffer *rb;
@@ -4156,6 +4169,10 @@ void lanpr_software_draw_scene(void *vedata, GPUFrameBuffer *dfb, int is_render)
 
         lanpr_calculate_normal_object_vector(ll, normal_object_direction);
 
+        DRW_shgroup_uniform_float(rb->ChainShgrp, "camdx", &camdx, 1);
+        DRW_shgroup_uniform_float(rb->ChainShgrp, "camdy", &camdy, 1);
+        DRW_shgroup_uniform_float(rb->ChainShgrp, "camzoom", &camzoom, 1);
+
         DRW_shgroup_uniform_vec4(rb->ChainShgrp,
                                  "contour_color",
                                  ll->use_same_style ? ll->color : ll->contour_color,
@@ -4255,6 +4272,10 @@ void lanpr_software_draw_scene(void *vedata, GPUFrameBuffer *dfb, int is_render)
 
           lanpr_calculate_normal_object_vector(ll, normal_object_direction);
 
+          DRW_shgroup_uniform_float(ll->shgrp, "camdx", &camdx, 1);
+          DRW_shgroup_uniform_float(ll->shgrp, "camdy", &camdy, 1);
+          DRW_shgroup_uniform_float(ll->shgrp, "camzoom", &camzoom, 1);
+
           DRW_shgroup_uniform_vec4(
               ll->shgrp, "contour_color", ll->use_same_style ? ll->color : ll->contour_color, 1);
           DRW_shgroup_uniform_vec4(
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 514a0d0be14..5a401456fea 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
@@ -53,6 +53,10 @@ uniform float taper_r_strength;
 uniform vec4 output_viewport;
 uniform vec4 preview_viewport;
 
+uniform float camdx;
+uniform float camdy;
+uniform float camzoom;
+
 out vec4 out_color;
 
 float use_thickness;
@@ -221,6 +225,14 @@ void decide_line_style(int component_id)
   }
 }
 
+vec4 correct_camera_scale(vec4 p){
+  
+  p.x-=camdx*4;
+  p.y-=camdy*4;
+  p.xy*=camzoom;
+  return p;
+}
+
 void main()
 {
   int level = gLevel[1];
@@ -240,6 +252,11 @@ void main()
   R.x *= x_scale;
   RR.x *= x_scale;
 
+  LL = correct_camera_scale(LL);
+  L = correct_camera_scale(L);
+  R = correct_camera_scale(R);
+  RR = correct_camera_scale(RR);
+
   int type = gType[1];
 
   decide_line_style(type);
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 30f88593e66..424461c1a51 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
@@ -35,6 +35,10 @@ uniform vec4 intersection_color;
 uniform vec4 output_viewport;
 uniform vec4 preview_viewport;
 
+uniform float camdx;
+uniform float camdy;
+uniform float camzoom;
+
 out vec4 out_color;
 
 float use_thickness;
@@ -128,6 +132,14 @@ void decide_color_and_thickness(float component_id)
   }
 }
 
+vec4 correct_camera_scale(vec4 p){
+  
+  p.x-=camdx*4;
+  p.y-=camdy*4;
+  p.xy*=camzoom;
+  return p;
+}
+
 void main()
 {
 
@@ -141,6 +153,9 @@ void main()
   p1.x *= x_scale;
   p2.x *= x_scale;
 
+  p1 = correct_camera_scale(p1);
+  p2 = correct_camera_scale(p2);
+
   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 60c39ea399e..e802bcbc582 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
@@ -4,9 +4,6 @@ in vec3 normal;
 in int type;
 in int level;
 
-uniform vec4 output_viewport;
-uniform vec4 preview_viewport;
-
 out vec2 gOffset;
 out int gType;
 out int gLevel;
@@ -15,10 +12,6 @@ out vec3 gNormal;
 void main()
 {
   vec4 p = pos;
-  // 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