[Bf-blender-cvs] [64892433323] blender2.8: DRW: Fix background image display

Clément Foucault noreply at git.blender.org
Wed Aug 22 13:51:18 CEST 2018


Commit: 648924333234a1fd0fee91851bb7ad8bc8639f3a
Author: Clément Foucault
Date:   Tue Aug 21 10:22:25 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB648924333234a1fd0fee91851bb7ad8bc8639f3a

DRW: Fix background image display

This make the workbench draw everything in the background routine just like
eevee. This is because the workbench uses floating point buffers too and
rendering background to this buffer makes it incorrect without proper
color management.

This could be improved because in xray the background is not blended but
dithered as it's drawn after the main pass.

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

M	source/blender/draw/engines/workbench/solid_mode.c
M	source/blender/draw/engines/workbench/transparent_mode.c
M	source/blender/draw/intern/draw_manager.c
M	source/blender/editors/space_view3d/view3d_draw_legacy.c
M	source/blender/gpu/shaders/gpu_shader_2D_image_vert.glsl

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

diff --git a/source/blender/draw/engines/workbench/solid_mode.c b/source/blender/draw/engines/workbench/solid_mode.c
index e4bf47810b0..19c8b4f18d1 100644
--- a/source/blender/draw/engines/workbench/solid_mode.c
+++ b/source/blender/draw/engines/workbench/solid_mode.c
@@ -65,11 +65,6 @@ static void workbench_solid_draw_background(void *vedata)
 {
 	WORKBENCH_Data *data = vedata;
 	workbench_deferred_draw_background(data);
-}
-
-static void workbench_solid_draw_scene(void *vedata)
-{
-	WORKBENCH_Data *data = vedata;
 	workbench_deferred_draw_scene(data);
 	workbench_deferred_draw_finish(data);
 }
@@ -113,7 +108,7 @@ DrawEngineType draw_engine_workbench_solid = {
 	&workbench_solid_cache_populate,
 	&workbench_solid_cache_finish,
 	&workbench_solid_draw_background,
-	&workbench_solid_draw_scene,
+	NULL,
 	&workbench_solid_view_update,
 	&workbench_solid_id_update,
 	&workbench_render_to_image,
diff --git a/source/blender/draw/engines/workbench/transparent_mode.c b/source/blender/draw/engines/workbench/transparent_mode.c
index 8d76da2763b..1d451a96419 100644
--- a/source/blender/draw/engines/workbench/transparent_mode.c
+++ b/source/blender/draw/engines/workbench/transparent_mode.c
@@ -63,11 +63,6 @@ static void workbench_transparent_draw_background(void *vedata)
 {
 	WORKBENCH_Data *data = vedata;
 	workbench_forward_draw_background(data);
-}
-
-static void workbench_transparent_draw_scene(void *vedata)
-{
-	WORKBENCH_Data *data = vedata;
 	workbench_forward_draw_scene(data);
 	workbench_forward_draw_finish(data);
 }
@@ -95,7 +90,7 @@ DrawEngineType draw_engine_workbench_transparent = {
 	&workbench_transparent_cache_populate,
 	&workbench_transparent_cache_finish,
 	&workbench_transparent_draw_background,
-	&workbench_transparent_draw_scene,
+	NULL,
 	&workbench_transparent_view_update,
 	NULL,
 	NULL,
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 70685ededae..85fc11c85b0 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -1458,10 +1458,10 @@ void DRW_draw_render_loop_ex(
 	}
 
 	if (do_bg_image) {
+		GPU_framebuffer_bind(DST.default_framebuffer);
 		ED_view3d_draw_bgpic_test(scene, depsgraph, ar, v3d, false, true);
 	}
 
-
 	DRW_draw_callbacks_pre_scene();
 	if (DST.draw_ctx.evil_C) {
 		ED_region_draw_cb_draw(DST.draw_ctx.evil_C, DST.draw_ctx.ar, REGION_DRAW_PRE_VIEW);
diff --git a/source/blender/editors/space_view3d/view3d_draw_legacy.c b/source/blender/editors/space_view3d/view3d_draw_legacy.c
index 558af718101..d0fc36a8a1e 100644
--- a/source/blender/editors/space_view3d/view3d_draw_legacy.c
+++ b/source/blender/editors/space_view3d/view3d_draw_legacy.c
@@ -679,7 +679,7 @@ static void view3d_draw_bgpic(Scene *scene, Depsgraph *depsgraph,
 					ibuf = ibuf->mipmap[mip - 1];
 			}
 
-			GPU_depth_test(false);
+			GPU_depth_test(!do_foreground);
 			glDepthMask(GL_FALSE);
 
 			GPU_blend(true);
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_image_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_image_vert.glsl
index 228f3f1da19..0881f2b150f 100644
--- a/source/blender/gpu/shaders/gpu_shader_2D_image_vert.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_2D_image_vert.glsl
@@ -9,5 +9,6 @@ out vec2 texCoord_interp;
 void main()
 {
 	gl_Position = ModelViewProjectionMatrix * vec4(pos.xy, 0.0f, 1.0f);
+	gl_Position.z = 1.0;
 	texCoord_interp = texCoord;
 }



More information about the Bf-blender-cvs mailing list