Commit: d3ba4b35354d39c12fbfe6c53df844645a5d089c
Author: Nick Wu
Date:   Mon Jun 11 18:22:39 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rBd3ba4b35354d39c12fbfe6c53df844645a5d089c

depth behave weird, fixed multisample on snake result.

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

M       source/blender/draw/engines/lanpr/lanpr_all.h
M       source/blender/draw/engines/lanpr/lanpr_dpix.c
M       source/blender/draw/engines/lanpr/lanpr_engine.c
M       source/blender/draw/engines/lanpr/lanpr_snake.c
M       source/blender/draw/engines/lanpr/shaders/lanpr_line_connection.geometry
M       source/blender/draw/engines/lanpr/shaders/lanpr_snake_edge.fragment

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

diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h 
b/source/blender/draw/engines/lanpr/lanpr_all.h
index f299ccba0ee..af0a744749d 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -75,7 +75,6 @@ typedef struct LANPR_PassList {
        struct DRWPass *normal_pass;
        struct DRWPass *edge_intermediate;
        struct DRWPass *edge_thinning;
-       struct DRWPass *edge_thinning_2;
        struct DRWPass *snake_pass;
 
        /* DPIX */
@@ -119,7 +118,6 @@ typedef struct LANPR_PrivateData {
        DRWShadingGroup *multipass_shgrp;
        DRWShadingGroup *edge_detect_shgrp;
        DRWShadingGroup *edge_thinning_shgrp;
-       DRWShadingGroup *edge_thinning_shgrp_2;
     DRWShadingGroup *snake_shgrp;
        
        DRWShadingGroup *dpix_transform_shgrp;
diff --git a/source/blender/draw/engines/lanpr/lanpr_dpix.c 
b/source/blender/draw/engines/lanpr/lanpr_dpix.c
index 09cceec55a6..3f06f7a08dd 100644
--- a/source/blender/draw/engines/lanpr/lanpr_dpix.c
+++ b/source/blender/draw/engines/lanpr/lanpr_dpix.c
@@ -50,7 +50,6 @@ void lanpr_init_atlas_inputs(void *ved){
                DRW_texture_ensure_2D(&txl->dpix_in_pr, TNS_DPIX_TEXTURE_SIZE, 
TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
                DRW_texture_ensure_2D(&txl->dpix_in_nl, TNS_DPIX_TEXTURE_SIZE, 
TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
                DRW_texture_ensure_2D(&txl->dpix_in_nr, TNS_DPIX_TEXTURE_SIZE, 
TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
-
                DRW_texture_ensure_2D(&txl->dpix_out_pl, TNS_DPIX_TEXTURE_SIZE, 
TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
                DRW_texture_ensure_2D(&txl->dpix_out_pr, TNS_DPIX_TEXTURE_SIZE, 
TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
                DRW_texture_ensure_2D(&txl->dpix_out_length, 
TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
@@ -286,16 +285,17 @@ void lanpr_dpix_draw_scene(LANPR_TextureList* txl, 
LANPR_FramebufferList * fbl,
                //GPU_framebuffer_bind(fbl->edge_intermediate);
                //DRW_draw_pass(psl->color_pass);// use depth
 
-           //glEnable(GL_BLEND);
-        //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+        glEnable(GL_MULTISAMPLE);
 
                GPU_framebuffer_bind(fbl->dpix_preview);
                GPUFrameBufferBits clear_bits = GPU_COLOR_BIT;
                GPU_framebuffer_clear(fbl->dpix_preview, clear_bits, 
lanpr->background_color, clear_depth, clear_stencil);
                DRW_draw_pass(psl->dpix_preview_pass);
 
-               //glDisable(GL_BLEND);
+               glDisable(GL_MULTISAMPLE);
 
                GPU_framebuffer_bind(dfbl->default_fb);
-               DRW_transform_to_display(txl->color);
+               GPU_framebuffer_clear(dfbl->default_fb, clear_bits, 
lanpr->background_color, clear_depth, clear_stencil);
+               DRW_multisamples_resolve(txl->depth,txl->color);  
+               //DRW_transform_to_display(txl->color);
 }
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c 
b/source/blender/draw/engines/lanpr/lanpr_engine.c
index 3e8b76963a2..9f6f9f32931 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -86,10 +86,10 @@ static void lanpr_engine_init(void *ved){
 
 
        /* Main Buffer */
-       DRW_texture_ensure_fullscreen_2D(&txl->depth, GPU_DEPTH_COMPONENT32F, 
DRW_TEX_FILTER | DRW_TEX_MIPMAP);
-       DRW_texture_ensure_fullscreen_2D(&txl->color, GPU_RGBA16F, 
DRW_TEX_FILTER | DRW_TEX_MIPMAP);
-       DRW_texture_ensure_fullscreen_2D(&txl->normal, GPU_RGBA16F, 
DRW_TEX_FILTER | DRW_TEX_MIPMAP);
-    DRW_texture_ensure_fullscreen_2D(&txl->edge_intermediate, GPU_RGBA16F, 
DRW_TEX_FILTER | DRW_TEX_MIPMAP);
+       DRW_texture_ensure_fullscreen_2D_multisample(&txl->depth, 
GPU_DEPTH_COMPONENT32F, 8, 0);
+       DRW_texture_ensure_fullscreen_2D_multisample(&txl->color, GPU_RGBA32F, 
8, 0);
+       DRW_texture_ensure_fullscreen_2D_multisample(&txl->normal, GPU_RGBA32F, 
8, 0);
+    DRW_texture_ensure_fullscreen_2D_multisample(&txl->edge_intermediate, 
GPU_RGBA32F, 8, 0);
        
        GPU_framebuffer_ensure_config(&fbl->passes, {
                GPU_ATTACHMENT_TEXTURE(txl->depth),
@@ -112,7 +112,8 @@ static void lanpr_engine_init(void *ved){
        });
 
        GPU_framebuffer_ensure_config(&fbl->edge_thinning, {
-               GPU_ATTACHMENT_TEXTURE(txl->depth),
+               GPU_ATTACHMENT_LEAVE,
+               //GPU_ATTACHMENT_TEXTURE(txl->depth),
                GPU_ATTACHMENT_TEXTURE(txl->color),
                GPU_ATTACHMENT_LEAVE,
                GPU_ATTACHMENT_LEAVE,
@@ -195,6 +196,8 @@ static void lanpr_cache_init(void *vedata){
        LANPR_PassList *psl = ((LANPR_Data *)vedata)->psl;
        LANPR_StorageList *stl = ((LANPR_Data *)vedata)->stl;
        LANPR_TextureList *txl = ((LANPR_Data *)vedata)->txl;
+
+       DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
        
        if (!stl->g_data) {
                /* Alloc transient pointers */
@@ -235,15 +238,10 @@ static void lanpr_cache_init(void *vedata){
 
                psl->edge_thinning = DRW_pass_create("Edge Thinning Stage 1", 
DRW_STATE_WRITE_COLOR);
                stl->g_data->edge_thinning_shgrp = 
DRW_shgroup_create(OneTime.edge_thinning_shader, psl->edge_thinning);
-               
DRW_shgroup_uniform_texture_ref(stl->g_data->edge_thinning_shgrp, "TexSample0", 
&txl->edge_intermediate);
+               
DRW_shgroup_uniform_texture_ref(stl->g_data->edge_thinning_shgrp, "TexSample0", 
&dtxl->color);
                DRW_shgroup_uniform_int(stl->g_data->edge_thinning_shgrp, 
"Stage", &stl->g_data->stage, 1);
                DRW_shgroup_call_add(stl->g_data->edge_thinning_shgrp, quad, 
NULL);
 
-               psl->edge_thinning_2 = DRW_pass_create("Edge Thinning Stage 2", 
DRW_STATE_WRITE_COLOR);
-               stl->g_data->edge_thinning_shgrp_2 = 
DRW_shgroup_create(OneTime.edge_thinning_shader, psl->edge_thinning_2);
-               
DRW_shgroup_uniform_texture_ref(stl->g_data->edge_thinning_shgrp_2, 
"TexSample0", &txl->color);
-               DRW_shgroup_uniform_int(stl->g_data->edge_thinning_shgrp_2, 
"Stage", &stl->g_data->stage, 1);
-               DRW_shgroup_call_add(stl->g_data->edge_thinning_shgrp_2, quad, 
NULL);
        }else{
         psl->dpix_transform_pass = DRW_pass_create("DPIX Transform Stage", 
DRW_STATE_WRITE_COLOR);
                stl->g_data->dpix_transform_shgrp = 
DRW_shgroup_create(OneTime.dpix_transform_shader, psl->dpix_transform_pass);
diff --git a/source/blender/draw/engines/lanpr/lanpr_snake.c 
b/source/blender/draw/engines/lanpr/lanpr_snake.c
index fb21da08605..95cec3ed89f 100644
--- a/source/blender/draw/engines/lanpr/lanpr_snake.c
+++ b/source/blender/draw/engines/lanpr/lanpr_snake.c
@@ -307,7 +307,7 @@ Gwn_Batch *lanpr_get_snake_batch(LANPR_PrivateData* pd){
 }
 
 void lanpr_snake_draw_scene(LANPR_TextureList* txl, LANPR_FramebufferList * 
fbl, LANPR_PassList *psl, LANPR_PrivateData *pd, SceneLANPR *lanpr){
-    GPUFrameBufferBits clear_bits = GPU_COLOR_BIT;
+    GPUFrameBufferBits clear_bits = GPU_COLOR_BIT|GPU_DEPTH_BIT;
     float clear_col[4] = {0.0f, 0.0f, 0.0f, 0.0f};
        float clear_depth = 1.0f;
        uint clear_stencil = 0xFF;
@@ -332,35 +332,42 @@ void lanpr_snake_draw_scene(LANPR_TextureList* txl, 
LANPR_FramebufferList * fbl,
 
     if((!lanpr->enable_vector_trace) && (!lanpr->display_thinning_result)){
         GPU_framebuffer_bind(dfbl->default_fb);
-        DRW_transform_to_display(txl->edge_intermediate);
+               DRW_multisamples_resolve(txl->depth,txl->edge_intermediate);  
         return;
     }
 
     if(lanpr->display_thinning_result || lanpr->enable_vector_trace){
         pd->stage = 0;
+
+               GPU_framebuffer_bind(dfbl->default_fb);
+        DRW_multisamples_resolve(txl->depth, txl->edge_intermediate);
+
         GPU_framebuffer_bind(fbl->edge_thinning);
-        clear_bits = GPU_COLOR_BIT;
-        GPU_framebuffer_clear(fbl->edge_thinning, clear_bits, clear_col, 
clear_depth, clear_stencil);
         DRW_draw_pass(psl->edge_thinning);
+               GPU_framebuffer_bind(dfbl->default_fb);
+        DRW_multisamples_resolve(txl->depth, txl->color);
 
         pd->stage = 1;
-        GPU_framebuffer_bind(fbl->edge_intermediate);
-        //GPU_framebuffer_clear(fbl->edge_intermediate, clear_bits, clear_col, 
clear_depth, clear_stencil);
-        DRW_draw_pass(psl->edge_thinning_2);
+        GPU_framebuffer_bind(fbl->edge_thinning);
+        DRW_draw_pass(psl->edge_thinning);
+               GPU_framebuffer_bind(dfbl->default_fb);
+        DRW_multisamples_resolve(txl->depth, txl->color);
 
         pd->stage = 0;
         GPU_framebuffer_bind(fbl->edge_thinning);
-        GPU_framebuffer_clear(fbl->edge_thinning, clear_bits, clear_col, 
clear_depth, clear_stencil);
         DRW_draw_pass(psl->edge_thinning);
+               GPU_framebuffer_bind(dfbl->default_fb);
+        DRW_multisamples_resolve(txl->depth, txl->color);
 
         pd->stage = 1;
-        GPU_framebuffer_bind(fbl->edge_intermediate);
-        //GPU_framebuffer_clear(fbl->edge_intermediate, clear_bits, clear_col, 
clear_depth, clear_stencil);
-        DRW_draw_pass(psl->edge_thinning_2);
+        GPU_framebuffer_bind(fbl->edge_thinning);
+        DRW_draw_pass(psl->edge_thinning);
+               GPU_framebuffer_bind(dfbl->default_fb);
+        DRW_multisamples_resolve(txl->depth, txl->color);
 
         if(!lanpr->enable_vector_trace){
-            GPU_framebuffer_bind(dfbl->default_fb);
-            DRW_transform_to_display(txl->edge_intermediate);
+            //GPU_framebuffer_bind(dfbl->default_fb);
+                       //DRW_multisamples_resolve(txl->depth,txl->color);  
             return;
         }
     }
@@ -383,8 +390,10 @@ void lanpr_snake_draw_scene(LANPR_TextureList* txl, 
LANPR_FramebufferList * fbl,
         pd->width = texw;
         pd->height = texh;
     }
-
-    GPU_framebuffer_read_color(fbl->edge_intermediate,0,0,texw, texh,1,0, 
pd->line_result);
+    
+       GPU_framebuffer_bind(dfbl->default_fb);
+       //DRW_multisamples_resolve(txl->depth,txl->edge_intermediate);  
+    GPU_framebuffer_read_color(dfbl->default_fb,0,0,texw, texh,1,0, 
pd->line_result);
 
     float sample;
     int h, w;
@@ -427,15 +436,19 @@ void lanpr_snake_draw_scene(LANPR_TextureList* txl, 
LANPR_FramebufferList * fbl,
         //count++;
     }
 
-    //GPU_framebuffer_bind()
-    GPU_framebuffer_clear(fbl->edge_intermediate, clear_bits, 
lanpr->background_color, clear_depth, clear_stencil);
+       GPU_framebuffer_bind(dfbl->default_fb);
+       GPU_framebuffer_clear(dfbl->default_fb, clear_bits, 
lanpr->background_color, clear_depth, clear_stencil);
+
+       GPU_framebuffer_bind(fbl->edge_intermediate);
+    clear_bits = GPU_COLOR_BIT;
+       GPU_framebuffer_clear(fbl->edge_intermediate, clear_bits, 
lanpr->background_color, clear_depth, clear_stencil);
 
     float* tld = &lanpr->taper_left_distance, *tls = 
&lanpr->taper_left_strength,
         *trd = &lanpr->taper

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to