Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2017-07-31 16:15:42 +0300
committerClément Foucault <foucault.clem@gmail.com>2017-07-31 16:18:38 +0300
commit1be1600c325eb1a52e405fa06fb23f5dca156b17 (patch)
treee88d8935cc175dd3bb78d2e25fb6edee79b31c1c /source/blender/draw
parent683e31fd80d36cffe4c65cfc0e973bb191889eee (diff)
Eevee: Draw background after depth prepass.
Reduce overdraw. 0.4ms goes to 0.01ms if background is completely occluded.
Diffstat (limited to 'source/blender/draw')
-rw-r--r--source/blender/draw/engines/eevee/eevee_engine.c5
-rw-r--r--source/blender/draw/engines/eevee/eevee_lightprobes.c13
-rw-r--r--source/blender/draw/engines/eevee/eevee_materials.c7
3 files changed, 13 insertions, 12 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index 4272e344119..ea72569b4d0 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -165,15 +165,14 @@ static void EEVEE_draw_scene(void *vedata)
DRW_framebuffer_bind(fbl->main);
DRW_framebuffer_clear(false, true, false, NULL, 1.0f);
- /* TODO move background after depth pass to cut some overdraw */
- DRW_draw_pass(psl->background_pass);
-
/* Depth prepass */
DRW_stats_group_start("Prepass");
DRW_draw_pass(psl->depth_pass);
DRW_draw_pass(psl->depth_pass_cull);
DRW_stats_group_end();
+ DRW_draw_pass(psl->background_pass);
+
/* Create minmax texture */
DRW_stats_group_start("Main MinMax buffer");
EEVEE_create_minmax_buffer(vedata, dtxl->depth, -1);
diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c
index 7f593c2cc61..7a446d221fa 100644
--- a/source/blender/draw/engines/eevee/eevee_lightprobes.c
+++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c
@@ -334,7 +334,7 @@ void EEVEE_lightprobes_cache_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *veda
memset(pinfo->probes_planar_ref, 0, sizeof(pinfo->probes_planar_ref));
{
- psl->probe_background = DRW_pass_create("World Probe Background Pass", DRW_STATE_WRITE_COLOR);
+ psl->probe_background = DRW_pass_create("World Probe Background Pass", DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL);
struct Gwn_Batch *geom = DRW_cache_fullscreen_quad_get();
DRWShadingGroup *grp = NULL;
@@ -1011,12 +1011,12 @@ static void render_scene_to_probe(
DRW_viewport_matrix_override_set(viewinv, DRW_MAT_VIEWINV);
DRW_viewport_matrix_override_set(winmat, DRW_MAT_WIN);
- DRW_draw_pass(psl->probe_background);
-
/* Depth prepass */
DRW_draw_pass(psl->depth_pass);
DRW_draw_pass(psl->depth_pass_cull);
+ DRW_draw_pass(psl->probe_background);
+
// EEVEE_create_minmax_buffer(vedata, e_data.cube_face_depth);
/* Rebind Planar FB */
@@ -1069,6 +1069,7 @@ static void render_scene_to_planar(
DRW_framebuffer_clear(false, true, false, NULL, 1.0);
/* Turn off ssr to avoid black specular */
+ /* TODO : Enable SSR in planar reflections? (Would be very heavy) */
sldata->probes->ssr_toggle = false;
/* Avoid using the texture attached to framebuffer when rendering. */
@@ -1083,9 +1084,6 @@ static void render_scene_to_planar(
DRW_viewport_matrix_override_set(viewmat, DRW_MAT_VIEW);
DRW_viewport_matrix_override_set(viewinv, DRW_MAT_VIEWINV);
- /* Background */
- DRW_draw_pass(psl->probe_background);
-
/* Since we are rendering with an inverted view matrix, we need
* to invert the facing for backface culling to be the same. */
DRW_state_invert_facing();
@@ -1095,6 +1093,9 @@ static void render_scene_to_planar(
DRW_draw_pass(psl->depth_pass_clip);
DRW_draw_pass(psl->depth_pass_clip_cull);
+ /* Background */
+ DRW_draw_pass(psl->probe_background);
+
EEVEE_create_minmax_buffer(vedata, tmp_planar_depth, layer);
/* Rebind Planar FB */
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index c1112eedf0d..8cd9dd4829d 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -343,8 +343,9 @@ void EEVEE_materials_init(EEVEE_StorageList *stl)
frag_str = BLI_dynstr_get_cstring(ds_frag);
BLI_dynstr_free(ds_frag);
- e_data.default_background = DRW_shader_create_fullscreen(
- datatoc_default_world_frag_glsl, NULL);
+ e_data.default_background = DRW_shader_create(
+ datatoc_background_vert_glsl, NULL, datatoc_default_world_frag_glsl,
+ NULL);
e_data.default_prepass_sh = DRW_shader_create(
datatoc_prepass_vert_glsl, NULL, datatoc_prepass_frag_glsl,
@@ -668,7 +669,7 @@ void EEVEE_materials_cache_init(EEVEE_Data *vedata)
}
{
- psl->background_pass = DRW_pass_create("Background Pass", DRW_STATE_WRITE_DEPTH | DRW_STATE_WRITE_COLOR);
+ psl->background_pass = DRW_pass_create("Background Pass", DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL);
struct Gwn_Batch *geom = DRW_cache_fullscreen_quad_get();
DRWShadingGroup *grp = NULL;