[Bf-blender-cvs] [d3ba4b35354] soc-2018-npr: depth behave weird, fixed multisample on snake result.

Nick Wu noreply at git.blender.org
Mon Jun 11 12:25:11 CEST 2018


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. @@



More information about the Bf-blender-cvs mailing list