Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen Bakker <j.bakker@atmind.nl>2018-06-29 10:22:50 +0300
committerJeroen Bakker <j.bakker@atmind.nl>2018-06-29 10:26:58 +0300
commit3169160a9741ff399059ce9900ac8cd503707b2f (patch)
tree88c1ebad37b81cc22d14f3e8102f8631cf7daf9e /source/blender/draw/engines/workbench/workbench_effect_taa.c
parent18d87e79e92e0cb4792ba3cb42c4ea84fcd29d90 (diff)
Workbench: TAA optimalization
First frame of the TAA is just a regular copy of the previous buffer. so we write directly to the final buffer and skip the taa shader. We do init the history buffer via blit so it will be initialized for the other iterations.
Diffstat (limited to 'source/blender/draw/engines/workbench/workbench_effect_taa.c')
-rw-r--r--source/blender/draw/engines/workbench/workbench_effect_taa.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/source/blender/draw/engines/workbench/workbench_effect_taa.c b/source/blender/draw/engines/workbench/workbench_effect_taa.c
index 43dfbd235b6..0b4cc0a4e5b 100644
--- a/source/blender/draw/engines/workbench/workbench_effect_taa.c
+++ b/source/blender/draw/engines/workbench/workbench_effect_taa.c
@@ -56,6 +56,7 @@ static void workbench_taa_jitter_init_order(float (*table)[2], int num)
/* move jitter table so that closest sample is in center */
for (int index = 0; index < num; index++) {
sub_v2_v2(table[index], table[closest_index]);
+ mul_v2_fl(table[index], 2.0f);
}
/* swap center sample to the start of the table */
@@ -104,7 +105,8 @@ int workbench_taa_calculate_num_iterations(WORKBENCH_Data *vedata)
{
result = 16;
}
- else {
+ else
+ {
result = 32;
}
}
@@ -203,11 +205,12 @@ void workbench_taa_draw_scene_start(WORKBENCH_Data *vedata)
WORKBENCH_EffectInfo *effect_info = stl->effects;
const float *viewport_size = DRW_viewport_size_get();
int num_samples = 8;
- float (*samples)[2] = e_data.jitter_8;
+ float (*samples)[2];
float mix_factor;
num_samples = workbench_taa_calculate_num_iterations(vedata);
switch (num_samples) {
+ default:
case 8:
samples = e_data.jitter_8;
break;
@@ -215,7 +218,6 @@ void workbench_taa_draw_scene_start(WORKBENCH_Data *vedata)
samples = e_data.jitter_16;
break;
case 32:
- default:
samples = e_data.jitter_32;
break;
}
@@ -262,9 +264,9 @@ void workbench_taa_draw_scene_end(WORKBENCH_Data *vedata)
* default depth buffer
*/
const WORKBENCH_StorageList *stl = vedata->stl;
- const WORKBENCH_EffectInfo *effect_info = stl->effects;
const WORKBENCH_FramebufferList *fbl = vedata->fbl;
const DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
+ WORKBENCH_EffectInfo *effect_info = stl->effects;
if (effect_info->jitter_index == 1) {
GPU_framebuffer_blit(dfbl->depth_only_fb, 0, fbl->depth_buffer_fb, 0, GPU_DEPTH_BIT);
@@ -276,11 +278,6 @@ void workbench_taa_draw_scene_end(WORKBENCH_Data *vedata)
GPU_framebuffer_blit(dfbl->color_only_fb, 0, fbl->effect_taa_fb, 0, GPU_COLOR_BIT);
DRW_viewport_matrix_override_unset_all();
-}
-
-void workbench_taa_draw_pass(WORKBENCH_EffectInfo *effect_info, DRWPass *pass)
-{
- DRW_draw_pass(pass);
copy_m4_m4(effect_info->last_mat, effect_info->curr_mat);
if (effect_info->jitter_index != 0) {