[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