[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