[Bf-blender-cvs] [6b2989ae752] blender2.8: DRW: Fix small changes to transparent background.

Clément Foucault noreply at git.blender.org
Thu Jan 4 10:53:34 CET 2018


Commit: 6b2989ae7524f6728aa4cdfd2134fbf3dcd31315
Author: Clément Foucault
Date:   Tue Jan 2 14:15:33 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB6b2989ae7524f6728aa4cdfd2134fbf3dcd31315

DRW: Fix small changes to transparent background.

Fix changes introduced e3ef782af5d5

Eevee is in charge of rendering so it should be its task to have it's buffer initialized

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

M	source/blender/draw/engines/eevee/eevee_engine.c
M	source/blender/draw/intern/draw_manager.c

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

diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index 31ce5d4174d..b5dfe8aef90 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -158,7 +158,12 @@ static void eevee_cache_finish(void *vedata)
 	EEVEE_lightprobes_cache_finish(sldata, vedata);
 }
 
-static void eevee_draw_scene(void *vedata)
+/* As renders in an HDR offscreen buffer, we need draw everything once
+ * during the background pass. This way the other drawing callback between
+ * the background and the scene pass are visible.
+ * Note: we could break it up in two passes using some depth test
+ * to reduce the fillrate */
+static void eevee_draw_background(void *vedata)
 {
 	EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
 	EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
@@ -207,7 +212,14 @@ static void eevee_draw_scene(void *vedata)
 		DRW_framebuffer_texture_detach(dtxl->depth);
 		DRW_framebuffer_texture_attach(fbl->main, dtxl->depth, 0, 0);
 		DRW_framebuffer_bind(fbl->main);
-		DRW_framebuffer_clear(false, true, true, NULL, 1.0f);
+		if (DRW_state_draw_background()) {
+			DRW_framebuffer_clear(false, true, true, NULL, 1.0f);
+		}
+		else {
+			/* We need to clear the alpha chanel in this case. */
+			float clear_col[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+			DRW_framebuffer_clear(true, true, true, clear_col, 1.0f);
+		}
 
 		if (((stl->effects->enabled_effects & EFFECT_TAA) != 0) && stl->effects->taa_current_sample > 1) {
 			DRW_viewport_matrix_override_set(stl->effects->overide_persmat, DRW_MAT_PERS);
@@ -418,8 +430,8 @@ DrawEngineType draw_engine_eevee_type = {
 	&eevee_cache_init,
 	&eevee_cache_populate,
 	&eevee_cache_finish,
-	NULL,
-	&eevee_draw_scene,
+	&eevee_draw_background,
+	NULL, /* Everything is drawn in the background pass (see comment on function) */
 	&eevee_view_update,
 	&eevee_id_update,
 };
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 76a92be98d9..19535847160 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -2899,7 +2899,9 @@ static void drw_engines_draw_background(void)
 	}
 
 	/* No draw_background found, doing default background */
-	DRW_draw_background();
+	if (DRW_state_draw_background()) {
+		DRW_draw_background();
+	}
 }
 
 static void drw_engines_draw_scene(void)
@@ -3429,9 +3431,7 @@ void DRW_draw_render_loop_ex(
 	/* Start Drawing */
 	DRW_state_reset();
 
-	if (DRW_state_draw_background()) {
-		drw_engines_draw_background();
-	}
+	drw_engines_draw_background();
 
 	/* WIP, single image drawn over the camera view (replace) */
 	bool do_bg_image = false;



More information about the Bf-blender-cvs mailing list