[Bf-blender-cvs] [43150b02a00] master: Workbench: Opti: Only request OIT buffers if needed

Clément Foucault noreply at git.blender.org
Tue Jan 29 20:35:14 CET 2019


Commit: 43150b02a0067a7bc5c1e39797815cd2d907be8f
Author: Clément Foucault
Date:   Tue Jan 29 19:57:12 2019 +0100
Branches: master
https://developer.blender.org/rB43150b02a0067a7bc5c1e39797815cd2d907be8f

Workbench: Opti: Only request OIT buffers if needed

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

M	source/blender/draw/engines/workbench/workbench_deferred.c

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

diff --git a/source/blender/draw/engines/workbench/workbench_deferred.c b/source/blender/draw/engines/workbench/workbench_deferred.c
index 3f8a29a20a5..4e0ec0259c2 100644
--- a/source/blender/draw/engines/workbench/workbench_deferred.c
+++ b/source/blender/draw/engines/workbench/workbench_deferred.c
@@ -339,6 +339,19 @@ static void workbench_init_object_data(DrawData *dd)
 	data->shadow_bbox_dirty = true;
 }
 
+static void workbench_init_oit_framebuffer(WORKBENCH_FramebufferList *fbl, DefaultTextureList *dtxl)
+{
+	const float *size = DRW_viewport_size_get();
+	e_data.oit_accum_tx = DRW_texture_pool_query_2D(size[0], size[1], GPU_RGBA16F, &draw_engine_workbench_solid);
+	e_data.oit_revealage_tx = DRW_texture_pool_query_2D(size[0], size[1], GPU_R16F, &draw_engine_workbench_solid);
+
+	GPU_framebuffer_ensure_config(&fbl->transparent_accum_fb, {
+		GPU_ATTACHMENT_TEXTURE(dtxl->depth),
+		GPU_ATTACHMENT_TEXTURE(e_data.oit_accum_tx),
+		GPU_ATTACHMENT_TEXTURE(e_data.oit_revealage_tx),
+	});
+}
+
 void workbench_deferred_engine_init(WORKBENCH_Data *vedata)
 {
 	WORKBENCH_FramebufferList *fbl = vedata->fbl;
@@ -460,10 +473,6 @@ void workbench_deferred_engine_init(WORKBENCH_Data *vedata)
 		if (CAVITY_ENABLED(wpd)) {
 			e_data.cavity_buffer_tx = DRW_texture_pool_query_2D(size[0], size[1], GPU_R16, &draw_engine_workbench_solid);
 		}
-		if (OIT_ENABLED(wpd)) {
-			e_data.oit_accum_tx = DRW_texture_pool_query_2D(size[0], size[1], GPU_RGBA16F, &draw_engine_workbench_solid);
-			e_data.oit_revealage_tx = DRW_texture_pool_query_2D(size[0], size[1], GPU_R16F, &draw_engine_workbench_solid);
-		}
 
 		GPU_framebuffer_ensure_config(&fbl->prepass_fb, {
 			GPU_ATTACHMENT_TEXTURE(dtxl->depth),
@@ -499,13 +508,6 @@ void workbench_deferred_engine_init(WORKBENCH_Data *vedata)
 				GPU_ATTACHMENT_TEXTURE(e_data.object_id_tx),
 			});
 		}
-		if (OIT_ENABLED(wpd)) {
-			GPU_framebuffer_ensure_config(&fbl->transparent_accum_fb, {
-				GPU_ATTACHMENT_TEXTURE(dtxl->depth),
-				GPU_ATTACHMENT_TEXTURE(e_data.oit_accum_tx),
-				GPU_ATTACHMENT_TEXTURE(e_data.oit_revealage_tx),
-			});
-		}
 	}
 
 	{
@@ -1180,7 +1182,11 @@ void workbench_deferred_draw_scene(WORKBENCH_Data *vedata)
 	GPU_framebuffer_bind(fbl->composite_fb);
 	DRW_draw_pass(psl->background_pass);
 
-	if (OIT_ENABLED(wpd)) {
+	if (OIT_ENABLED(wpd) && !DRW_pass_is_empty(psl->transparent_accum_pass)) {
+		DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+		/* meh, late init to not request buffers we won't use. */
+		workbench_init_oit_framebuffer(fbl, dtxl);
+
 		const float clear_color[4] = {0.0f, 0.0f, 0.0f, 1.0f};
 		GPU_framebuffer_bind(fbl->transparent_accum_fb);
 		GPU_framebuffer_clear_color(fbl->transparent_accum_fb, clear_color);



More information about the Bf-blender-cvs mailing list