[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