[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