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;
+}

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to