From fd48ff1296f45b32bffeca2c60dca2a12bb84229 Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Thu, 19 Mar 2020 08:06:49 +0100 Subject: Fix T73931: Stereo Viewport Color Management Stereoscopic viewport didn't support Color Manangement due recent changes in the color management pipeline. In order to solve the issue we will migrate the strereo rendering into the GPUViewport. This will share some textures and reduce required GPU memory. Reviewed By: fclem, dfelinto Differential Revision: https://developer.blender.org/D6922 --- source/blender/draw/DRW_engine_types.h | 3 +++ source/blender/draw/intern/draw_manager.c | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) (limited to 'source/blender/draw') diff --git a/source/blender/draw/DRW_engine_types.h b/source/blender/draw/DRW_engine_types.h index dd56f87182c..d31bab5a1b5 100644 --- a/source/blender/draw/DRW_engine_types.h +++ b/source/blender/draw/DRW_engine_types.h @@ -35,11 +35,14 @@ typedef struct DefaultFramebufferList { struct GPUFrameBuffer *color_only_fb; struct GPUFrameBuffer *depth_only_fb; struct GPUFrameBuffer *overlay_only_fb; + struct GPUFrameBuffer *stereo_comp_fb; } DefaultFramebufferList; typedef struct DefaultTextureList { struct GPUTexture *color; struct GPUTexture *color_overlay; + struct GPUTexture *color_stereo; + struct GPUTexture *color_overlay_stereo; struct GPUTexture *depth; struct GPUTexture *depth_in_front; } DefaultTextureList; diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index df3a1e3da79..0c049e030b1 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -1218,7 +1218,7 @@ void DRW_notify_view_update(const DRWUpdateContext *update_ctx) /* Separate update for each stereo view. */ for (int view = 0; view < 2; view++) { - GPUViewport *viewport = WM_draw_region_get_viewport(region, view); + GPUViewport *viewport = WM_draw_region_get_viewport(region); if (!viewport) { continue; } @@ -1232,6 +1232,7 @@ void DRW_notify_view_update(const DRWUpdateContext *update_ctx) drw_state_prepare_clean_for_draw(&DST); DST.viewport = viewport; + GPU_viewport_active_view_set(viewport, view); DST.draw_ctx = (DRWContextState){ .region = region, .rv3d = rv3d, @@ -1416,7 +1417,6 @@ void DRW_draw_render_loop_ex(struct Depsgraph *depsgraph, DST.draw_ctx.evil_C = evil_C; DST.viewport = viewport; - /* Setup viewport */ DST.draw_ctx = (DRWContextState){ .region = region, @@ -2374,7 +2374,7 @@ void DRW_draw_select_id(Depsgraph *depsgraph, ARegion *region, View3D *v3d, cons drw_context_state_init(); /* Setup viewport */ - DST.viewport = WM_draw_region_get_viewport(region, 0); + DST.viewport = WM_draw_region_get_viewport(region); drw_viewport_var_init(); /* Update ubos */ -- cgit v1.2.3