[Bf-blender-cvs] [3530ee2949b] blender2.8: GPUViewport: Fix offscreen multisample syncing.

Clément Foucault noreply at git.blender.org
Wed Mar 14 12:50:53 CET 2018


Commit: 3530ee2949bf9d95e1e40cc06086ed4ff755299d
Author: Clément Foucault
Date:   Wed Mar 14 12:55:19 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB3530ee2949bf9d95e1e40cc06086ed4ff755299d

GPUViewport: Fix offscreen multisample syncing.

===================================================================

M	source/blender/draw/engines/eevee/eevee_engine.c
M	source/blender/gpu/intern/gpu_viewport.c

===================================================================

diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index b1bfc45037d..6cfecd0a226 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -334,10 +334,6 @@ static void eevee_draw_background(void *vedata)
 
 	EEVEE_volumes_free_smoke_textures();
 
-	if (DRW_state_is_image_render()) {
-		MULTISAMPLE_SYNC_ENABLE(dfbl);
-	}
-
 	stl->g_data->view_updated = false;
 }
 
diff --git a/source/blender/gpu/intern/gpu_viewport.c b/source/blender/gpu/intern/gpu_viewport.c
index 42dfe59389d..d123368f6ff 100644
--- a/source/blender/gpu/intern/gpu_viewport.c
+++ b/source/blender/gpu/intern/gpu_viewport.c
@@ -153,15 +153,22 @@ GPUViewport *GPU_viewport_create_from_offscreen(struct GPUOffScreen *ofs)
  */
 void GPU_viewport_clear_from_offscreen(GPUViewport *viewport)
 {
-	if (viewport->fbl->multisample_fb) {
-		viewport->fbl->multisample_fb = NULL;
-		viewport->txl->multisample_color = NULL;
-		viewport->txl->multisample_depth = NULL;
+	DefaultFramebufferList *dfbl = viewport->fbl;
+	DefaultTextureList *dtxl = viewport->txl;
+
+	if (dfbl->multisample_fb) {
+		/* GPUViewport expect the final result to be in default_fb but
+		 * GPUOffscreen wants it in its multisample_fb, so we sync it back. */
+		GPU_framebuffer_blit(dfbl->default_fb, 0, dfbl->multisample_fb, 0, false, false);
+		GPU_framebuffer_blit(dfbl->default_fb, 0, dfbl->multisample_fb, 0, true, false);
+		dfbl->multisample_fb = NULL;
+		dtxl->multisample_color = NULL;
+		dtxl->multisample_depth = NULL;
 	}
 	else {
 		viewport->fbl->default_fb = NULL;
-		viewport->txl->color = NULL;
-		viewport->txl->depth = NULL;
+		dtxl->color = NULL;
+		dtxl->depth = NULL;
 	}
 }



More information about the Bf-blender-cvs mailing list