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