[Bf-blender-cvs] [7d25c746152] draw-colormanagement: DRW: Remove DrawEngineType draw_background function
Clément Foucault
noreply at git.blender.org
Thu Jan 23 00:16:55 CET 2020
Commit: 7d25c74615225ffa4875332059351090e178fb51
Author: Clément Foucault
Date: Thu Jan 23 00:16:40 2020 +0100
Branches: draw-colormanagement
https://developer.blender.org/rB7d25c74615225ffa4875332059351090e178fb51
DRW: Remove DrawEngineType draw_background function
This moves all background duties to the overlay engine which does alpha
under drawing (sort of).
This means keeping transparency info through the whole pipeline.
For now I just updated workbench which surely still need some cleanups.
Only Solid background is reimplemented.
===================================================================
M source/blender/draw/CMakeLists.txt
M source/blender/draw/engines/basic/basic_engine.c
M source/blender/draw/engines/eevee/eevee_engine.c
M source/blender/draw/engines/eevee/eevee_temporal_sampling.c
M source/blender/draw/engines/external/external_engine.c
M source/blender/draw/engines/gpencil/gpencil_engine.c
A source/blender/draw/engines/overlay/overlay_background.c
M source/blender/draw/engines/overlay/overlay_engine.c
M source/blender/draw/engines/overlay/overlay_private.h
M source/blender/draw/engines/overlay/overlay_shader.c
A source/blender/draw/engines/overlay/shaders/background_frag.glsl
M source/blender/draw/engines/select/select_engine.c
M source/blender/draw/engines/workbench/shaders/workbench_deferred_background_frag.glsl
M source/blender/draw/engines/workbench/shaders/workbench_forward_composite_frag.glsl
M source/blender/draw/engines/workbench/solid_mode.c
M source/blender/draw/engines/workbench/transparent_mode.c
M source/blender/draw/engines/workbench/workbench_deferred.c
M source/blender/draw/engines/workbench/workbench_forward.c
M source/blender/draw/engines/workbench/workbench_private.h
M source/blender/draw/engines/workbench/workbench_render.c
M source/blender/draw/intern/DRW_render.h
M source/blender/draw/intern/draw_manager.c
===================================================================
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 6c55fa7ce30..544ca85880b 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -121,6 +121,7 @@ set(SRC
engines/select/select_engine.c
engines/overlay/overlay_antialiasing.c
engines/overlay/overlay_armature.c
+ engines/overlay/overlay_background.c
engines/overlay/overlay_edit_curve.c
engines/overlay/overlay_edit_mesh.c
engines/overlay/overlay_edit_text.c
@@ -325,6 +326,7 @@ data_to_c_simple(engines/overlay/shaders/armature_stick_frag.glsl SRC)
data_to_c_simple(engines/overlay/shaders/armature_stick_vert.glsl SRC)
data_to_c_simple(engines/overlay/shaders/armature_wire_frag.glsl SRC)
data_to_c_simple(engines/overlay/shaders/armature_wire_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/background_frag.glsl SRC)
data_to_c_simple(engines/overlay/shaders/depth_only_vert.glsl SRC)
data_to_c_simple(engines/overlay/shaders/edit_curve_handle_geom.glsl SRC)
data_to_c_simple(engines/overlay/shaders/edit_curve_handle_vert.glsl SRC)
diff --git a/source/blender/draw/engines/basic/basic_engine.c b/source/blender/draw/engines/basic/basic_engine.c
index fcbe227ca1b..44bbf690eaf 100644
--- a/source/blender/draw/engines/basic/basic_engine.c
+++ b/source/blender/draw/engines/basic/basic_engine.c
@@ -212,7 +212,6 @@ DrawEngineType draw_engine_basic_type = {
&basic_cache_init,
&basic_cache_populate,
&basic_cache_finish,
- NULL,
&basic_draw_scene,
NULL,
NULL,
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index 4ad9409a02a..c3537eec96a 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -182,7 +182,7 @@ static void eevee_cache_finish(void *vedata)
* 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)
+static void eevee_draw_scene(void *vedata)
{
EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
@@ -454,8 +454,7 @@ DrawEngineType draw_engine_eevee_type = {
&eevee_cache_init,
&EEVEE_cache_populate,
&eevee_cache_finish,
- &eevee_draw_background,
- NULL, /* Everything is drawn in the background pass (see comment on function) */
+ &eevee_draw_scene,
&eevee_view_update,
&eevee_id_update,
&eevee_render_to_image,
diff --git a/source/blender/draw/engines/eevee/eevee_temporal_sampling.c b/source/blender/draw/engines/eevee/eevee_temporal_sampling.c
index 0f0b4a3e0a9..093a4780a97 100644
--- a/source/blender/draw/engines/eevee/eevee_temporal_sampling.c
+++ b/source/blender/draw/engines/eevee/eevee_temporal_sampling.c
@@ -198,7 +198,7 @@ int EEVEE_temporal_sampling_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data
/**
* Reset for each "redraw". When rendering using ogl render,
- * we accumulate the redraw inside the drawing loop in eevee_draw_background().
+ * we accumulate the redraw inside the drawing loop in eevee_draw_scene().
**/
effects->taa_render_sample = 1;
effects->taa_view = NULL;
@@ -251,7 +251,7 @@ int EEVEE_temporal_sampling_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data
(effects->taa_current_sample < effects->taa_total_sample)) ||
DRW_state_is_image_render()) {
if (view_is_valid) {
- /* Viewport rendering updates the matrices in `eevee_draw_background` */
+ /* Viewport rendering updates the matrices in `eevee_draw_scene` */
if (!DRW_state_is_image_render()) {
effects->taa_current_sample += 1;
repro_flag = 0;
diff --git a/source/blender/draw/engines/external/external_engine.c b/source/blender/draw/engines/external/external_engine.c
index 704e16b2907..9ccf95f8fb9 100644
--- a/source/blender/draw/engines/external/external_engine.c
+++ b/source/blender/draw/engines/external/external_engine.c
@@ -275,7 +275,6 @@ static DrawEngineType draw_engine_external_type = {
&external_cache_init,
&external_cache_populate,
&external_cache_finish,
- NULL,
&external_draw_scene,
NULL,
NULL,
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c
index a1a1f7cc389..579031fec83 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -1180,7 +1180,6 @@ DrawEngineType draw_engine_gpencil_type = {
&GPENCIL_cache_init,
&GPENCIL_cache_populate,
&GPENCIL_cache_finish,
- NULL,
&GPENCIL_draw_scene,
NULL,
NULL,
diff --git a/source/blender/draw/engines/overlay/overlay_background.c b/source/blender/draw/engines/overlay/overlay_background.c
new file mode 100644
index 00000000000..f55ed6505d3
--- /dev/null
+++ b/source/blender/draw/engines/overlay/overlay_background.c
@@ -0,0 +1,49 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Copyright 2020, Blender Foundation.
+ */
+
+/** \file
+ * \ingroup draw_engine
+ */
+
+#include "DRW_render.h"
+
+#include "overlay_private.h"
+
+void OVERLAY_background_cache_init(OVERLAY_Data *vedata)
+{
+ OVERLAY_PassList *psl = vedata->psl;
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+
+ DRWState state = DRW_STATE_WRITE_COLOR;
+ DRW_PASS_CREATE(psl->background_ps, state);
+
+ GPUShader *sh = OVERLAY_shader_background();
+ DRWShadingGroup *grp = DRW_shgroup_create(sh, psl->background_ps);
+ DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
+ DRW_shgroup_uniform_texture_ref(grp, "colorBuf", &dtxl->color);
+ DRW_shgroup_call_procedural_triangles(grp, NULL, 1);
+}
+
+void OVERLAY_background_draw(OVERLAY_Data *vedata)
+{
+ OVERLAY_PassList *psl = vedata->psl;
+
+ if (DRW_state_is_fbo()) {
+ DRW_draw_pass(psl->background_ps);
+ }
+}
diff --git a/source/blender/draw/engines/overlay/overlay_engine.c b/source/blender/draw/engines/overlay/overlay_engine.c
index 59a03d10fbe..b89de7fc96c 100644
--- a/source/blender/draw/engines/overlay/overlay_engine.c
+++ b/source/blender/draw/engines/overlay/overlay_engine.c
@@ -144,6 +144,7 @@ static void OVERLAY_cache_init(void *vedata)
}
OVERLAY_antialiasing_cache_init(vedata);
OVERLAY_armature_cache_init(vedata);
+ OVERLAY_background_cache_init(vedata);
OVERLAY_extra_cache_init(vedata);
OVERLAY_facing_cache_init(vedata);
OVERLAY_grid_cache_init(vedata);
@@ -400,6 +401,7 @@ static void OVERLAY_draw_scene(void *vedata)
GPU_framebuffer_bind(fbl->overlay_default_fb);
}
+ OVERLAY_background_draw(vedata);
OVERLAY_image_draw(vedata);
OVERLAY_facing_draw(vedata);
OVERLAY_extra_blend_draw(vedata);
@@ -503,7 +505,6 @@ DrawEngineType draw_engine_overlay_type = {
&OVERLAY_cache_init,
&OVERLAY_cache_populate,
&OVERLAY_cache_finish,
- NULL,
&OVERLAY_draw_scene,
NULL,
NULL,
diff --git a/source/blender/draw/engines/overlay/overlay_private.h b/source/blender/draw/engines/overlay/overlay_private.h
index 996ee845799..2c3d697c03a 100644
--- a/source/blender/draw/engines/overlay/overlay_private.h
+++ b/source/blender/draw/engines/overlay/overlay_private.h
@@ -55,6 +55,7 @@ typedef struct OVERLAY_PassList {
DRWPass *armature_ps[2];
DRWPass *armature_bone_select_ps;
DRWPass *armature_transp_ps;
+ DRWPass *background_ps;
DRWPass *edit_curve_wire_ps[2];
DRWPass *edit_curve_handle_ps;
DRWPass *edit_lattice_ps;
@@ -395,6 +396,9 @@ void OVERLAY_armature_in_front_draw(OVERLAY_Data *vedata);
void OVERLAY_pose_cache_populate(OVERLAY_Data *vedata, Object *ob);
void OVERLAY_pose_draw(OVERLAY_Data *vedata);
+void OVERLAY_background_cache_init(OVERLAY_Data *vedata);
+void OVERLAY_background_draw(OVERLAY_Data *vedata);
+
void OVERLAY_bone_instance_data_set_color_hint(BoneInstanceData *data, const float hint_color[4]);
void OVERLAY_bone_instance_data_set_color(BoneInstanceData *data, const float bone_color[4]);
@@ -525,6 +529,7 @@ GPUShader *OVERLAY_shader_armature_shape_wire(void);
GPUShader *OVERLAY_shader_armature_sphere(bool use_outline);
GPUShader *OVERLAY_shader_armature_stick(void);
GPUShader *OVERLAY_shader_armature_wire(void);
+GPUShader *OVERLAY_shader_background(void);
GPUShader *OVERLAY_shader_depth_only(void);
GPUShader *OVERLAY_shader_edit_curve_handle(void);
GPUShader *OVERLAY_shader_edit_curve_point(void);
diff --git a/source/blender/draw/engines/overlay/overlay_shader.c b/source/blender/draw/engines/overlay/overlay_shader.c
index 7bd3cf4a067..9d61f0125de 100644
--- a/source/blender/draw/engines/overlay/overlay_shader.c
+++ b/source/blender/draw/engines/overlay/overlay_shader.c
@@ -47,6 +47,7 @@ extern char datatoc_armature_stick_frag_glsl[];
extern char datatoc_armature_stick_vert_glsl[];
extern char datatoc_armature_wire_frag_glsl[];
extern char datatoc_armature_wire_vert_glsl[];
+extern char datatoc_background_frag_glsl[];
extern char datatoc_depth_only_vert_glsl[];
extern char datatoc_edit_curve_handle_geom_glsl[];
extern char datatoc_edit_curve_handle_vert_glsl[];
@@ -129,6 +130,7 @@ typedef struct OVERLAY_Shaders {
GPUShader *armature_sphere_solid;
GPUShader *armature_stick;
GPUShader *armature_wire;
+ GPUShader *background;
GPUShader *depth_only;
GPUShader *edit_curve_handle;
GPUShader *edit_curve_point;
@@ -198,6 +200,19 @@ GPUShader *O
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list