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>2017-12-20 20:28:12 +0300
committerDalai Felinto <dfelinto@gmail.com>2017-12-20 21:05:47 +0300
commite3ef782af5d5255093d00cdc261d93dd3d8a5c40 (patch)
tree8c5d79b7988e418fc9565dfdd7177488df4da26b
parent03a589125f95fe4a8e8b2bb915453e6b0a2446bb (diff)
Fix for T53599: OpenGL render with transparent background
I had to make Eevee draw its scene in the scene pass (before it was doing it in the background pass). This is not ideal since reference images require a separation between scene and background. But it's the best way to solve it now. Clay is working fine.
-rw-r--r--source/blender/draw/DRW_engine.h1
-rw-r--r--source/blender/draw/engines/eevee/eevee_engine.c4
-rw-r--r--source/blender/draw/intern/DRW_render.h1
-rw-r--r--source/blender/draw/intern/draw_manager.c20
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c2
5 files changed, 23 insertions, 5 deletions
diff --git a/source/blender/draw/DRW_engine.h b/source/blender/draw/DRW_engine.h
index ba0f8681f10..7efd9639874 100644
--- a/source/blender/draw/DRW_engine.h
+++ b/source/blender/draw/DRW_engine.h
@@ -95,6 +95,7 @@ void DRW_draw_render_loop_offscreen(
struct Depsgraph *graph,
struct RenderEngineType *engine_type,
struct ARegion *ar, struct View3D *v3d,
+ const bool draw_background,
struct GPUOffScreen *ofs);
void DRW_draw_select_loop(
struct Depsgraph *graph,
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index 1466ed6adb7..b5806c9f8af 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -56,7 +56,7 @@ static void eevee_engine_init(void *ved)
/* Alloc transient pointers */
stl->g_data = MEM_callocN(sizeof(*stl->g_data), __func__);
}
- stl->g_data->background_alpha = 1.0f;
+ stl->g_data->background_alpha = DRW_state_draw_background() ? 1.0f : 0.0f;
stl->g_data->valid_double_buffer = (txl->color_double_buffer != NULL);
DRWFboTexture tex = {&txl->color, DRW_TEX_RGBA_16, DRW_TEX_FILTER | DRW_TEX_MIPMAP};
@@ -414,8 +414,8 @@ DrawEngineType draw_engine_eevee_type = {
&eevee_cache_init,
&eevee_cache_populate,
&eevee_cache_finish,
+ NULL,
&eevee_draw_scene,
- NULL, //&EEVEE_draw_scene
&eevee_view_update,
&eevee_id_update,
};
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 0753dbc7a1a..868c9ed1ebf 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -431,6 +431,7 @@ bool DRW_state_is_image_render(void);
bool DRW_state_is_scene_render(void);
bool DRW_state_show_text(void);
bool DRW_state_draw_support(void);
+bool DRW_state_draw_background(void);
struct DRWTextStore *DRW_state_text_cache_get(void);
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index e17aef34d47..80e11c2ac8b 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -354,6 +354,7 @@ static struct DRWGlobalState {
unsigned int is_depth : 1;
unsigned int is_image_render : 1;
unsigned int is_scene_render : 1;
+ unsigned int draw_background : 1;
} options;
/* Current rendering context */
@@ -3416,7 +3417,10 @@ void DRW_draw_render_loop_ex(
/* Start Drawing */
DRW_state_reset();
- drw_engines_draw_background();
+
+ if (DRW_state_draw_background()) {
+ drw_engines_draw_background();
+ }
/* WIP, single image drawn over the camera view (replace) */
bool do_bg_image = false;
@@ -3503,7 +3507,7 @@ void DRW_draw_render_loop(
void DRW_draw_render_loop_offscreen(
struct Depsgraph *graph, RenderEngineType *engine_type,
- ARegion *ar, View3D *v3d, GPUOffScreen *ofs)
+ ARegion *ar, View3D *v3d, const bool draw_background, GPUOffScreen *ofs)
{
RegionView3D *rv3d = ar->regiondata;
@@ -3517,6 +3521,7 @@ void DRW_draw_render_loop_offscreen(
/* Reset before using it. */
memset(&DST, 0x0, sizeof(DST));
DST.options.is_image_render = true;
+ DST.options.draw_background = draw_background;
DRW_draw_render_loop_ex(graph, engine_type, ar, v3d, NULL);
/* restore */
@@ -3817,6 +3822,17 @@ bool DRW_state_draw_support(void)
((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0);
}
+/**
+ * Whether we should render the background
+ */
+bool DRW_state_draw_background(void)
+{
+ if (DRW_state_is_image_render() == false) {
+ return true;
+ }
+ return DST.options.draw_background;
+}
+
/** \} */
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 6ea2ff10af2..4a00329bd09 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -2060,7 +2060,7 @@ void ED_view3d_draw_offscreen(
/* XXX, should take depsgraph as arg */
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, false);
BLI_assert(depsgraph != NULL);
- DRW_draw_render_loop_offscreen(depsgraph, eval_ctx->engine_type, ar, v3d, ofs);
+ DRW_draw_render_loop_offscreen(depsgraph, eval_ctx->engine_type, ar, v3d, do_sky, ofs);
}
/* restore size */