[Bf-blender-cvs] [7c17e76e0e5] tmp-overlay-engine: Overlay Engine: Improve In Front pass ordering
Clément Foucault
noreply at git.blender.org
Sun Nov 24 02:03:02 CET 2019
Commit: 7c17e76e0e5cf894a92afbc021e86d72ca225025
Author: Clément Foucault
Date: Fri Nov 22 16:26:27 2019 +0100
Branches: tmp-overlay-engine
https://developer.blender.org/rB7c17e76e0e5cf894a92afbc021e86d72ca225025
Overlay Engine: Improve In Front pass ordering
This does not fix all the issues. For instance extra's are always drawn
occluded.
===================================================================
M source/blender/draw/engines/overlay/overlay_armature.c
M source/blender/draw/engines/overlay/overlay_engine.c
M source/blender/draw/engines/overlay/overlay_extra.c
M source/blender/draw/engines/overlay/overlay_image.c
M source/blender/draw/engines/overlay/overlay_private.h
M source/blender/draw/engines/overlay/overlay_wireframe.c
===================================================================
diff --git a/source/blender/draw/engines/overlay/overlay_armature.c b/source/blender/draw/engines/overlay/overlay_armature.c
index 0b76fe325fd..46347b57993 100644
--- a/source/blender/draw/engines/overlay/overlay_armature.c
+++ b/source/blender/draw/engines/overlay/overlay_armature.c
@@ -2297,6 +2297,12 @@ void OVERLAY_armature_draw(OVERLAY_Data *vedata)
DRW_draw_pass(psl->armature_transp_ps);
DRW_draw_pass(psl->armature_ps[0]);
+}
+
+void OVERLAY_armature_in_front_draw(OVERLAY_Data *vedata)
+{
+ OVERLAY_PassList *psl = vedata->psl;
+
if (psl->armature_bone_select_ps == NULL) {
DRW_draw_pass(psl->armature_ps[1]);
}
diff --git a/source/blender/draw/engines/overlay/overlay_engine.c b/source/blender/draw/engines/overlay/overlay_engine.c
index 47cc89d39b3..2107e318c87 100644
--- a/source/blender/draw/engines/overlay/overlay_engine.c
+++ b/source/blender/draw/engines/overlay/overlay_engine.c
@@ -58,8 +58,9 @@ static void OVERLAY_engine_init(void *vedata)
/* Nothing to do. */
break;
}
- OVERLAY_grid_init(vedata);
OVERLAY_facing_init(vedata);
+ OVERLAY_grid_init(vedata);
+ OVERLAY_image_init(vedata);
OVERLAY_outline_init(vedata);
OVERLAY_wireframe_init(vedata);
}
@@ -331,17 +332,25 @@ static void OVERLAY_draw_scene(void *vedata)
OVERLAY_image_draw(vedata);
OVERLAY_facing_draw(vedata);
OVERLAY_wireframe_draw(vedata);
- OVERLAY_extra_draw(vedata);
+ OVERLAY_armature_draw(vedata);
OVERLAY_particle_draw(vedata);
OVERLAY_metaball_draw(vedata);
- OVERLAY_armature_draw(vedata);
+ OVERLAY_extra_draw(vedata);
+
OVERLAY_grid_draw(vedata);
- OVERLAY_motion_path_draw(vedata);
OVERLAY_outline_draw(vedata);
+ OVERLAY_wireframe_in_front_draw(vedata);
+ OVERLAY_armature_in_front_draw(vedata);
+ OVERLAY_extra_in_front_draw(vedata);
+ OVERLAY_image_in_front_draw(vedata);
+
+ OVERLAY_motion_path_draw(vedata);
+ OVERLAY_extra_centers_draw(vedata);
+
switch (pd->ctx_mode) {
case CTX_MODE_EDIT_MESH:
- OVERLAY_edit_mesh_draw(vedata);
+ OVERLAY_edit_mesh_draw(vedata); /* Clear depth for xray */
break;
case CTX_MODE_EDIT_SURFACE:
case CTX_MODE_EDIT_CURVE:
@@ -355,7 +364,7 @@ static void OVERLAY_draw_scene(void *vedata)
break;
case CTX_MODE_POSE:
OVERLAY_paint_draw(vedata);
- OVERLAY_pose_draw(vedata);
+ OVERLAY_pose_draw(vedata); /* Clear depth for xray */
break;
case CTX_MODE_PAINT_WEIGHT:
case CTX_MODE_PAINT_VERTEX:
diff --git a/source/blender/draw/engines/overlay/overlay_extra.c b/source/blender/draw/engines/overlay/overlay_extra.c
index ea7cca3cf9c..e32fdc20e34 100644
--- a/source/blender/draw/engines/overlay/overlay_extra.c
+++ b/source/blender/draw/engines/overlay/overlay_extra.c
@@ -1605,8 +1605,20 @@ void OVERLAY_extra_draw(OVERLAY_Data *vedata)
DRW_draw_pass(psl->extra_blend_ps);
DRW_draw_pass(psl->extra_ps[0]);
+}
+
+void OVERLAY_extra_in_front_draw(OVERLAY_Data *vedata)
+{
+ OVERLAY_PassList *psl = vedata->psl;
+
DRW_draw_pass(psl->extra_ps[1]);
- DRW_draw_pass(psl->extra_centers_ps);
OVERLAY_volume_free_smoke_textures(vedata);
}
+
+void OVERLAY_extra_centers_draw(OVERLAY_Data *vedata)
+{
+ OVERLAY_PassList *psl = vedata->psl;
+
+ DRW_draw_pass(psl->extra_centers_ps);
+}
diff --git a/source/blender/draw/engines/overlay/overlay_image.c b/source/blender/draw/engines/overlay/overlay_image.c
index 4945594dae0..fb7e701ca23 100644
--- a/source/blender/draw/engines/overlay/overlay_image.c
+++ b/source/blender/draw/engines/overlay/overlay_image.c
@@ -38,6 +38,14 @@
#include "overlay_private.h"
+void OVERLAY_image_init(OVERLAY_Data *vedata)
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ OVERLAY_PrivateData *pd = vedata->stl->pd;
+
+ pd->view_reference_images = DRW_view_create_with_zoffset(draw_ctx->rv3d, -1.0f);
+}
+
void OVERLAY_image_cache_init(OVERLAY_Data *vedata)
{
OVERLAY_PassList *psl = vedata->psl;
@@ -431,7 +439,10 @@ void OVERLAY_image_cache_finish(OVERLAY_Data *vedata)
void OVERLAY_image_draw(OVERLAY_Data *vedata)
{
OVERLAY_PassList *psl = vedata->psl;
- /* TODO better ordering with other passes. */
+ OVERLAY_PrivateData *pd = vedata->stl->pd;
+
+ DRW_view_set_active(pd->view_reference_images);
+
DRW_draw_pass(psl->image_background_over_ps);
DRW_draw_pass(psl->image_background_under_ps);
DRW_draw_pass(psl->image_empties_back_ps);
@@ -439,8 +450,20 @@ void OVERLAY_image_draw(OVERLAY_Data *vedata)
DRW_draw_pass(psl->image_empties_ps);
DRW_draw_pass(psl->image_empties_blend_ps);
+ DRW_view_set_active(NULL);
+}
+
+void OVERLAY_image_in_front_draw(OVERLAY_Data *vedata)
+{
+ OVERLAY_PassList *psl = vedata->psl;
+ OVERLAY_PrivateData *pd = vedata->stl->pd;
+
+ DRW_view_set_active(pd->view_reference_images);
+
DRW_draw_pass(psl->image_empties_front_ps);
DRW_draw_pass(psl->image_foreground_ps);
+ DRW_view_set_active(NULL);
+
OVERLAY_image_free_movieclips_textures(vedata);
}
diff --git a/source/blender/draw/engines/overlay/overlay_private.h b/source/blender/draw/engines/overlay/overlay_private.h
index 7663193d3b8..03e89f01bba 100644
--- a/source/blender/draw/engines/overlay/overlay_private.h
+++ b/source/blender/draw/engines/overlay/overlay_private.h
@@ -246,6 +246,7 @@ typedef struct OVERLAY_PrivateData {
DRWView *view_edit_faces_cage;
DRWView *view_edit_edges;
DRWView *view_edit_verts;
+ DRWView *view_reference_images;
/** TODO get rid of this. */
ListBase smoke_domains;
@@ -355,6 +356,7 @@ void OVERLAY_edit_armature_cache_populate(OVERLAY_Data *vedata, Object *ob);
void OVERLAY_pose_armature_cache_populate(OVERLAY_Data *vedata, Object *ob);
void OVERLAY_armature_cache_finish(OVERLAY_Data *vedata);
void OVERLAY_armature_draw(OVERLAY_Data *vedata);
+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);
@@ -388,6 +390,8 @@ void OVERLAY_edit_particle_draw(OVERLAY_Data *vedata);
void OVERLAY_extra_cache_init(OVERLAY_Data *vedata);
void OVERLAY_extra_cache_populate(OVERLAY_Data *vedata, Object *ob);
void OVERLAY_extra_draw(OVERLAY_Data *vedata);
+void OVERLAY_extra_in_front_draw(OVERLAY_Data *vedata);
+void OVERLAY_extra_centers_draw(OVERLAY_Data *vedata);
void OVERLAY_camera_cache_populate(OVERLAY_Data *vedata, Object *ob);
void OVERLAY_empty_cache_populate(OVERLAY_Data *vedata, Object *ob);
@@ -428,11 +432,13 @@ void OVERLAY_grid_init(OVERLAY_Data *vedata);
void OVERLAY_grid_cache_init(OVERLAY_Data *vedata);
void OVERLAY_grid_draw(OVERLAY_Data *vedata);
+void OVERLAY_image_init(OVERLAY_Data *vedata);
void OVERLAY_image_cache_init(OVERLAY_Data *vedata);
void OVERLAY_image_camera_cache_populate(OVERLAY_Data *vedata, Object *ob);
void OVERLAY_image_empty_cache_populate(OVERLAY_Data *vedata, Object *ob);
void OVERLAY_image_cache_finish(OVERLAY_Data *vedata);
void OVERLAY_image_draw(OVERLAY_Data *vedata);
+void OVERLAY_image_in_front_draw(OVERLAY_Data *vedata);
void OVERLAY_metaball_cache_init(OVERLAY_Data *vedata);
void OVERLAY_edit_metaball_cache_populate(OVERLAY_Data *vedata, Object *ob);
@@ -472,6 +478,7 @@ void OVERLAY_wireframe_cache_populate(OVERLAY_Data *vedata,
OVERLAY_DupliData *dupli,
bool init_dupli);
void OVERLAY_wireframe_draw(OVERLAY_Data *vedata);
+void OVERLAY_wireframe_in_front_draw(OVERLAY_Data *vedata);
GPUShader *OVERLAY_shader_armature_degrees_of_freedom(void);
GPUShader *OVERLAY_shader_armature_envelope(bool use_outline);
diff --git a/source/blender/draw/engines/overlay/overlay_wireframe.c b/source/blender/draw/engines/overlay/overlay_wireframe.c
index 38cf1cb6682..35d83f7dea3 100644
--- a/source/blender/draw/engines/overlay/overlay_wireframe.c
+++ b/source/blender/draw/engines/overlay/overlay_wireframe.c
@@ -111,8 +111,7 @@ void OVERLAY_wireframe_cache_populate(OVERLAY_Data *vedata,
bool init_dupli)
{
OVERLAY_Data *data = vedata;
- OVERLAY_StorageList *stl = data->stl;
- OVERLAY_PrivateData *pd = stl->pd;
+ OVERLAY_PrivateData *pd = data->stl->pd;
const DRWContextState *draw_ctx = DRW_context_state_get();
const bool all_wires = (ob->dtx & OB_DRAW_ALL_EDGES) != 0;
const bool is_xray = (ob->dtx & OB_DRAWXRAY) != 0;
@@ -203,11 +202,21 @@ void OVERLAY_wireframe_cache_populate(OVERLAY_Data *vedata,
void OVERLAY_wireframe_draw(OVERLAY_Data *data)
{
OVERLAY_PassList *psl = data->psl;
- OVERLAY_StorageList *stl = data->stl;
+ OVERLAY_PrivateData *pd = data->stl->pd;
- DRW_view_set_active(stl->pd->view_wires);
+ DRW_view_set_active(pd->view_wires);
DRW_draw_pass(psl->wireframe_ps);
+ DRW_view_set_active(NULL);
+}
+
+void OVERLAY_wireframe_in_front_draw(OVERLAY_Data *data)
+{
+ OVERLAY_PassList *psl = data->psl;
+ OVERLAY_PrivateData *pd = data->stl->pd;
+
+ DRW_view_set_active(pd->view_wires);
+
/* First lower the depth where there is no xray object (and set the stencil to xray value). */
DRW_draw_pass(psl->wireframe_xray_ps);
More information about the Bf-blender-cvs
mailing list