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:
authorDalai Felinto <dfelinto@gmail.com>2018-02-20 16:14:23 +0300
committerDalai Felinto <dfelinto@gmail.com>2018-02-20 17:03:26 +0300
commitc14925bddf9bb446e4b8435d2fa0530b2d0b31b8 (patch)
treef39d05a047f0ba816e9975c469c7171539d50e63 /source/blender/draw/engines/eevee/eevee_render.c
parenta16c0ebc59033b0b26b8e1d832a28739cfbd9ecd (diff)
Proper implementation of compositor support for Draw Manager
We need to move the render result logic outside the render engine code. It makes no sense for Eevee/Clay/... to have to re-implement the render resilt creation logic. Beside the original implementation really got it wrong, by ignoring the different render layers needed for the final render. Finally, there is no need to re-create the logic for views. So this was also fixed. Note 1: This will break still if the depsgraph of the needed view layers is not updated / created. We need to address this separately. For now if users want to test this, just show each view layer in the viewport at least once. Note 2: We are still getting depsgraph from scene and creating if needed. `BKE_scene_get_depsgraph(scene, view_layer, true);` according to Sergey we need to move the render depsgraph for the Render struct instead. I will do it separately as well.
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_render.c')
-rw-r--r--source/blender/draw/engines/eevee/eevee_render.c42
1 files changed, 14 insertions, 28 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_render.c b/source/blender/draw/engines/eevee/eevee_render.c
index eb7f722f3a8..f2db27f812f 100644
--- a/source/blender/draw/engines/eevee/eevee_render.c
+++ b/source/blender/draw/engines/eevee/eevee_render.c
@@ -152,10 +152,9 @@ void EEVEE_render_cache(
}
static void eevee_render_result_combined(
- RenderResult *rr, const char *viewname,
+ RenderResult *rr, RenderLayer *rl, const char *viewname,
EEVEE_Data *vedata, EEVEE_ViewLayerData *UNUSED(sldata))
{
- RenderLayer *rl = rr->layers.first;
RenderPass *rp = RE_pass_find_by_name(rl, RE_PASSNAME_COMBINED, viewname);
DRW_framebuffer_bind(vedata->stl->effects->final_fb);
@@ -163,7 +162,7 @@ static void eevee_render_result_combined(
}
static void eevee_render_result_subsurface(
- RenderResult *rr, const char *viewname,
+ RenderResult *rr, RenderLayer *rl, const char *viewname,
EEVEE_Data *vedata, EEVEE_ViewLayerData *UNUSED(sldata))
{
const DRWContextState *draw_ctx = DRW_context_state_get();
@@ -175,7 +174,6 @@ static void eevee_render_result_subsurface(
}
if ((view_layer->passflag & SCE_PASS_SUBSURFACE_COLOR) != 0) {
- RenderLayer *rl = rr->layers.first;
RenderPass *rp = RE_pass_find_by_name(rl, RE_PASSNAME_SUBSURFACE_COLOR, viewname);
IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
@@ -191,7 +189,6 @@ static void eevee_render_result_subsurface(
}
if ((view_layer->passflag & SCE_PASS_SUBSURFACE_DIRECT) != 0) {
- RenderLayer *rl = rr->layers.first;
RenderPass *rp = RE_pass_find_by_name(rl, RE_PASSNAME_SUBSURFACE_DIRECT, viewname);
IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
@@ -213,7 +210,7 @@ static void eevee_render_result_subsurface(
}
static void eevee_render_result_normal(
- RenderResult *rr, const char *viewname,
+ RenderResult *rr, RenderLayer *rl, const char *viewname,
EEVEE_Data *vedata, EEVEE_ViewLayerData *UNUSED(sldata))
{
const DRWContextState *draw_ctx = DRW_context_state_get();
@@ -226,7 +223,6 @@ static void eevee_render_result_normal(
return;
if ((view_layer->passflag & SCE_PASS_NORMAL) != 0) {
- RenderLayer *rl = rr->layers.first;
RenderPass *rp = RE_pass_find_by_name(rl, RE_PASSNAME_NORMAL, viewname);
DRW_framebuffer_read_data(rr->xof, rr->yof, rr->rectx, rr->recty, 3, 1, rp->rect);
@@ -255,7 +251,7 @@ static void eevee_render_result_normal(
}
static void eevee_render_result_z(
- RenderResult *rr, const char *viewname,
+ RenderResult *rr, RenderLayer *rl, const char *viewname,
EEVEE_Data *vedata, EEVEE_ViewLayerData *sldata)
{
const DRWContextState *draw_ctx = DRW_context_state_get();
@@ -269,7 +265,6 @@ static void eevee_render_result_z(
return;
if ((view_layer->passflag & SCE_PASS_Z) != 0) {
- RenderLayer *rl = rr->layers.first;
RenderPass *rp = RE_pass_find_by_name(rl, RE_PASSNAME_Z, viewname);
DRW_framebuffer_read_depth(rr->xof, rr->yof, rr->rectx, rr->recty, rp->rect);
@@ -295,14 +290,13 @@ static void eevee_render_result_z(
}
static void eevee_render_result_mist(
- RenderResult *rr, const char *viewname,
+ RenderResult *rr, RenderLayer *rl, const char *viewname,
EEVEE_Data *vedata, EEVEE_ViewLayerData *UNUSED(sldata))
{
const DRWContextState *draw_ctx = DRW_context_state_get();
ViewLayer *view_layer = draw_ctx->view_layer;
if ((view_layer->passflag & SCE_PASS_MIST) != 0) {
- RenderLayer *rl = rr->layers.first;
RenderPass *rp = RE_pass_find_by_name(rl, RE_PASSNAME_MIST, viewname);
IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
@@ -319,7 +313,7 @@ static void eevee_render_result_mist(
}
static void eevee_render_result_occlusion(
- RenderResult *rr, const char *viewname,
+ RenderResult *rr, RenderLayer *rl, const char *viewname,
EEVEE_Data *vedata, EEVEE_ViewLayerData *UNUSED(sldata))
{
const DRWContextState *draw_ctx = DRW_context_state_get();
@@ -331,7 +325,6 @@ static void eevee_render_result_occlusion(
}
if ((view_layer->passflag & SCE_PASS_AO) != 0) {
- RenderLayer *rl = rr->layers.first;
RenderPass *rp = RE_pass_find_by_name(rl, RE_PASSNAME_AO, viewname);
IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
@@ -375,10 +368,11 @@ static void eevee_render_draw_background(EEVEE_Data *vedata)
DRW_framebuffer_bind(fbl->main);
}
-void EEVEE_render_draw(EEVEE_Data *vedata, struct RenderEngine *engine, struct Depsgraph *UNUSED(depsgraph))
+void EEVEE_render_draw(EEVEE_Data *vedata, RenderEngine *engine, RenderResult *rr, RenderLayer *rl)
{
const DRWContextState *draw_ctx = DRW_context_state_get();
ViewLayer *view_layer = draw_ctx->view_layer;
+ const char *viewname = RE_GetActiveRenderView(engine->re);
EEVEE_PassList *psl = vedata->psl;
EEVEE_StorageList *stl = vedata->stl;
EEVEE_FramebufferList *fbl = vedata->fbl;
@@ -412,12 +406,6 @@ void EEVEE_render_draw(EEVEE_Data *vedata, struct RenderEngine *engine, struct D
EEVEE_occlusion_output_init(sldata, vedata);
}
- /* Init render result. */
- const char *viewname = RE_GetActiveRenderView(engine->re);
- const float *render_size = DRW_viewport_size_get();
-
- RenderResult *rr = RE_engine_begin_result(engine, 0, 0, (int)render_size[0], (int)render_size[1], NULL, viewname);
-
IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
unsigned int render_samples = BKE_collection_engine_property_value_get_int(props, "taa_render_samples");
@@ -482,7 +470,7 @@ void EEVEE_render_draw(EEVEE_Data *vedata, struct RenderEngine *engine, struct D
/* Occlusion output */
EEVEE_occlusion_output_accumulate(sldata, vedata);
/* Result NORMAL */
- eevee_render_result_normal(rr, viewname, vedata, sldata);
+ eevee_render_result_normal(rr, rl, viewname, vedata, sldata);
/* Volumetrics Resolve Opaque */
EEVEE_volumes_resolve(sldata, vedata);
/* Mist output */
@@ -490,17 +478,15 @@ void EEVEE_render_draw(EEVEE_Data *vedata, struct RenderEngine *engine, struct D
/* Transparent */
DRW_draw_pass(psl->transparent_pass);
/* Result Z */
- eevee_render_result_z(rr, viewname, vedata, sldata);
+ eevee_render_result_z(rr, rl, viewname, vedata, sldata);
/* Post Process */
EEVEE_draw_effects(sldata, vedata);
}
- eevee_render_result_combined(rr, viewname, vedata, sldata);
- eevee_render_result_subsurface(rr, viewname, vedata, sldata);
- eevee_render_result_mist(rr, viewname, vedata, sldata);
- eevee_render_result_occlusion(rr, viewname, vedata, sldata);
-
- RE_engine_end_result(engine, rr, false, false, false);
+ eevee_render_result_combined(rr, rl, viewname, vedata, sldata);
+ eevee_render_result_subsurface(rr, rl, viewname, vedata, sldata);
+ eevee_render_result_mist(rr, rl, viewname, vedata, sldata);
+ eevee_render_result_occlusion(rr, rl, viewname, vedata, sldata);
}
void EEVEE_render_update_passes(RenderEngine *engine, Scene *scene, ViewLayer *view_layer)