[Bf-blender-cvs] [ec2ccc7d602] soc-2018-npr: software method preview now in correct aspect ratio
Nick Wu
noreply at git.blender.org
Thu Jul 5 08:53:27 CEST 2018
Commit: ec2ccc7d602a33efb055dd52ff3e49366f761f29
Author: Nick Wu
Date: Thu Jul 5 14:53:01 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rBec2ccc7d602a33efb055dd52ff3e49366f761f29
software method preview now in correct aspect ratio
===================================================================
M source/blender/draw/CMakeLists.txt
M source/blender/draw/engines/lanpr/lanpr_all.h
M source/blender/draw/engines/lanpr/lanpr_engine.c
A source/blender/draw/engines/lanpr/shaders/lanpr_software_scale_compensate.vertex
===================================================================
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 08ad65ca3ee..b6eb53aaf0f 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -244,6 +244,7 @@ data_to_c_simple(engines/lanpr/shaders/lanpr_line_connection.fragment SRC)
data_to_c_simple(engines/lanpr/shaders/lanpr_snake_edge.fragment SRC)
data_to_c_simple(engines/lanpr/shaders/lanpr_snake_multichannel.fragment SRC)
data_to_c_simple(engines/lanpr/shaders/lanpr_software_line_width.geometry SRC)
+data_to_c_simple(engines/lanpr/shaders/lanpr_software_scale_compensate.vertex SRC)
data_to_c_simple(modes/shaders/common_globals_lib.glsl SRC)
data_to_c_simple(modes/shaders/common_hair_lib.glsl SRC)
diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h b/source/blender/draw/engines/lanpr/lanpr_all.h
index 512b69184ee..8e8f22088b2 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -201,6 +201,7 @@ typedef struct LANPR_PrivateData {
int dpix_sample_step;
int dpix_is_perspective;
float dpix_viewport[4];
+ float output_viewport[4];
int dpix_buffer_width;
float dpix_depth_offset;
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index 4358870665b..2b3e3a2d782 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -38,6 +38,7 @@ extern char datatoc_lanpr_line_connection_geometry[];
extern char datatoc_lanpr_software_line_width_geometry[];
extern char datatoc_lanpr_atlas_project_passthrough_vertex[];
extern char datatoc_lanpr_atlas_preview_fragment[];
+extern char datatoc_lanpr_software_scale_compensate_vertex[];
@@ -170,7 +171,7 @@ static void lanpr_engine_init(void *ved){
if (!OneTime.software_shader) {
OneTime.software_shader =
GPU_shader_create(
- datatoc_lanpr_atlas_project_passthrough_vertex,
+ datatoc_lanpr_software_scale_compensate_vertex,
datatoc_lanpr_atlas_preview_fragment,
datatoc_lanpr_software_line_width_geometry,
NULL, NULL);
@@ -359,6 +360,8 @@ static void lanpr_cache_init(void *vedata){
DRW_shgroup_uniform_float(ll->shgrp, "thickness_material", &ll->thickness_material, 1);
DRW_shgroup_uniform_float(ll->shgrp, "thickness_edge_mark", &ll->thickness_edge_mark, 1);
DRW_shgroup_uniform_float(ll->shgrp, "thickness_intersection", &ll->thickness_intersection, 1);
+ DRW_shgroup_uniform_vec4(ll->shgrp, "preview_viewport", stl->g_data->dpix_viewport, 1);
+ DRW_shgroup_uniform_vec4(ll->shgrp, "output_viewport", stl->g_data->output_viewport, 1);
if(ll->batch) DRW_shgroup_call_add(ll->shgrp, ll->batch, NULL);
}
}
@@ -443,6 +446,7 @@ static void lanpr_draw_scene_exec(void *vedata, GPUFrameBuffer* dfb) {
LANPR_TextureList *txl = ((LANPR_Data *)vedata)->txl;
LANPR_StorageList *stl = ((LANPR_Data *)vedata)->stl;
LANPR_FramebufferList *fbl = ((LANPR_Data *)vedata)->fbl;
+ LANPR_PrivateData *pd = stl->g_data;
float clear_col[4] = { 1.0f, 0.0f, 0.0f, 1.0f };
float clear_depth = 1.0f;
@@ -479,9 +483,16 @@ static void lanpr_draw_scene_exec(void *vedata, GPUFrameBuffer* dfb) {
GPU_framebuffer_clear(fbl->software_ms, clear_bits, lanpr->background_color, clear_depth, clear_stencil);
- DRW_draw_pass(psl->color_pass);
- DRW_draw_pass(psl->color_pass);
- //DRW_draw_pass(psl->software_pass);
+ int texw = GPU_texture_width(txl->ms_resolve_color), texh = GPU_texture_height(txl->ms_resolve_color);;
+ pd->output_viewport[2] = scene->r.xsch;
+ pd->output_viewport[3] = scene->r.ysch;
+ pd->dpix_viewport[2] = texw;
+ pd->dpix_viewport[3] = texh;
+
+ // debug purpose
+ //DRW_draw_pass(psl->color_pass);
+ //DRW_draw_pass(psl->color_pass);
+ DRW_draw_pass(psl->software_pass);
GPU_framebuffer_blit(fbl->software_ms,0,dfb,0,GPU_COLOR_BIT);
diff --git a/source/blender/draw/engines/lanpr/shaders/lanpr_software_scale_compensate.vertex b/source/blender/draw/engines/lanpr/shaders/lanpr_software_scale_compensate.vertex
new file mode 100644
index 00000000000..43dcdb7827c
--- /dev/null
+++ b/source/blender/draw/engines/lanpr/shaders/lanpr_software_scale_compensate.vertex
@@ -0,0 +1,12 @@
+in vec4 pos;
+uniform vec4 output_viewport;
+uniform vec4 preview_viewport;
+
+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;
+
+ gl_Position = p;
+}
More information about the Bf-blender-cvs
mailing list