[Bf-blender-cvs] [638590078c7] blender2.8: Outlines: Make outlines in xray mode not occluded.

Clément Foucault noreply at git.blender.org
Mon Jun 11 18:04:07 CEST 2018


Commit: 638590078c716c65ed0e9c4a0cbcff60c46a98e2
Author: Clément Foucault
Date:   Mon Jun 11 17:26:41 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB638590078c716c65ed0e9c4a0cbcff60c46a98e2

Outlines: Make outlines in xray mode not occluded.

This is visually too distracting (flickering). Until we have a better
solution, just disable occlusion fading.

===================================================================

M	source/blender/draw/modes/object_mode.c

===================================================================

diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
index 0b90b9276b4..0c8c4664f70 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -864,6 +864,7 @@ static void OBJECT_cache_init(void *vedata)
 	DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
 	OBJECT_PrivateData *g_data;
 	const DRWContextState *draw_ctx = DRW_context_state_get();
+	const bool xray_enabled = ((draw_ctx->v3d->shading.flag & V3D_SHADING_XRAY) != 0);
 	/* TODO : use dpi setting for enabling the second pass */
 	const bool do_outline_expand = false;
 
@@ -880,7 +881,7 @@ static void OBJECT_cache_init(void *vedata)
 
 		GPUShader *sh = e_data.outline_prepass_sh;
 
-		if (draw_ctx->v3d->shading.flag & V3D_SHADING_XRAY) {
+		if (xray_enabled) {
 			sh = e_data.outline_prepass_wire_sh;
 		}
 
@@ -917,7 +918,8 @@ static void OBJECT_cache_init(void *vedata)
 	{
 		DRWState state = DRW_STATE_WRITE_COLOR;
 		struct Gwn_Batch *quad = DRW_cache_fullscreen_quad_get();
-		static float alphaOcclu = 0.35f;
+		/* Don't occlude the "outline" detection pass if in xray mode (too much flickering). */
+		float alphaOcclu = (xray_enabled) ? 1.0f : 0.35f;
 		/* Reminder : bool uniforms need to be 4 bytes. */
 		static const int bTrue = true;
 		static const int bFalse = false;
@@ -929,7 +931,7 @@ static void OBJECT_cache_init(void *vedata)
 		DRW_shgroup_uniform_texture_ref(grp, "outlineDepth", &e_data.outlines_depth_tx);
 		DRW_shgroup_uniform_texture_ref(grp, "sceneDepth", &dtxl->depth);
 		DRW_shgroup_uniform_block(grp, "globalsBlock", globals_ubo);
-		DRW_shgroup_uniform_float(grp, "alphaOcclu", &alphaOcclu, 1);
+		DRW_shgroup_uniform_float_copy(grp, "alphaOcclu", alphaOcclu);
 		DRW_shgroup_uniform_int(grp, "idOffsets", &stl->g_data->id_ofs_active, 3);
 		DRW_shgroup_call_add(grp, quad, NULL);



More information about the Bf-blender-cvs mailing list