Commit: 5361fc2c33253a7673c3352ae98070c9cf49165f Author: Jeroen Bakker Date: Tue Jun 4 14:31:00 2019 +0200 Branches: master https://developer.blender.org/rB5361fc2c33253a7673c3352ae98070c9cf49165f
GPU: High Definition Color Buffer For offscreen rendering a high definition color buffer is needed. Without it there are banding issues when doing multi-sampling viewport rendering. Reviewed By: fclem Maniphest Tasks: T65287 Differential Revision: https://developer.blender.org/D5009 =================================================================== M source/blender/draw/modes/overlay_mode.c M source/blender/gpu/intern/gpu_viewport.c =================================================================== diff --git a/source/blender/draw/modes/overlay_mode.c b/source/blender/draw/modes/overlay_mode.c index 3c5cb7cb5aa..fe989dbe8cd 100644 --- a/source/blender/draw/modes/overlay_mode.c +++ b/source/blender/draw/modes/overlay_mode.c @@ -482,7 +482,7 @@ static void overlay_draw_scene(void *vedata) /* This is replaced by the next code block */ // MULTISAMPLE_SYNC_ENABLE(dfbl, dtxl); - if (dfbl->multisample_fb != NULL) { + if (dfbl->multisample_fb != NULL && DRW_state_is_fbo()) { DRW_stats_query_start("Multisample Blit"); GPU_framebuffer_bind(dfbl->multisample_fb); GPU_framebuffer_clear_color(dfbl->multisample_fb, (const float[4]){0.0f}); diff --git a/source/blender/gpu/intern/gpu_viewport.c b/source/blender/gpu/intern/gpu_viewport.c index 4fd439f4203..e3c13b0ec14 100644 --- a/source/blender/gpu/intern/gpu_viewport.c +++ b/source/blender/gpu/intern/gpu_viewport.c @@ -95,7 +95,7 @@ static void gpu_viewport_buffers_free(FramebufferList *fbl, static void gpu_viewport_storage_free(StorageList *stl, int stl_len); static void gpu_viewport_passes_free(PassList *psl, int psl_len); static void gpu_viewport_texture_pool_free(GPUViewport *viewport); -static void gpu_viewport_default_fb_create(GPUViewport *viewport); +static void gpu_viewport_default_fb_create(GPUViewport *viewport, const bool high_bitdepth); void GPU_viewport_tag_update(GPUViewport *viewport) { @@ -135,7 +135,7 @@ GPUViewport *GPU_viewport_create_from_offscreen(struct GPUOffScreen *ofs) viewport->txl->multisample_color = color; viewport->txl->multisample_depth = depth; viewport->fbl->multisample_fb = fb; - gpu_viewport_default_fb_create(viewport); + gpu_viewport_default_fb_create(viewport, true); } else { viewport->fbl->default_fb = fb; @@ -384,14 +384,15 @@ void GPU_viewport_cache_release(GPUViewport *viewport) } } -static void gpu_viewport_default_fb_create(GPUViewport *viewport) +static void gpu_viewport_default_fb_create(GPUViewport *viewport, const bool high_bitdepth) { DefaultFramebufferList *dfbl = viewport->fbl; DefaultTextureList *dtxl = viewport->txl; int *size = viewport->size; bool ok = true; - dtxl->color = GPU_texture_create_2d(size[0], size[1], GPU_RGBA8, NULL, NULL); + dtxl->color = GPU_texture_create_2d( + size[0], size[1], high_bitdepth ? GPU_RGBA16F : GPU_RGBA8, NULL, NULL); dtxl->depth = GPU_texture_create_2d(size[0], size[1], GPU_DEPTH24_STENCIL8, NULL, NULL); if (!(dtxl->depth && dtxl->color)) { @@ -500,7 +501,7 @@ void GPU_viewport_bind(GPUViewport *viewport, const rcti *rect) } if (!dfbl->default_fb) { - gpu_viewport_default_fb_create(viewport); + gpu_viewport_default_fb_create(viewport, false); } } _______________________________________________ Bf-blender-cvs mailing list [email protected] https://lists.blender.org/mailman/listinfo/bf-blender-cvs
