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-25 10:06:39 +0300
committerJeroen Bakker <j.bakker@atmind.nl>2018-06-26 17:35:47 +0300
commitcf8a0597693de8fbf3dccf607d81e6e1f2c0d2aa (patch)
treeeea2c1b0fbe0313d196e41ace1cd42b9ade50469 /source/blender/draw/engines/workbench/workbench_forward.c
parentc07f2bc89196ea449a2875634eb85efa45733fb5 (diff)
Workbench: Tempural Anti Aliasing
- FXAA is now also done in the workbench_forward engine. - User can enable TAA8 in the userpref by setting their max viewport AA to TAA8. FXAA will still be used when navigating
Diffstat (limited to 'source/blender/draw/engines/workbench/workbench_forward.c')
-rw-r--r--source/blender/draw/engines/workbench/workbench_forward.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/source/blender/draw/engines/workbench/workbench_forward.c b/source/blender/draw/engines/workbench/workbench_forward.c
index 9f23cd5b43b..dd57bec05f6 100644
--- a/source/blender/draw/engines/workbench/workbench_forward.c
+++ b/source/blender/draw/engines/workbench/workbench_forward.c
@@ -58,12 +58,15 @@ static struct {
struct GPUTexture *transparent_accum_tx; /* ref only, not alloced */
struct GPUTexture *transparent_revealage_tx; /* ref only, not alloced */
struct GPUTexture *composite_buffer_tx; /* ref only, not alloced */
+ struct GPUTexture *effect_buffer_tx; /* ref only, not alloced */
+
int next_object_id;
float normal_world_matrix[3][3];
} e_data = {{NULL}};
/* Shaders */
extern char datatoc_common_hair_lib_glsl[];
+
extern char datatoc_workbench_forward_composite_frag_glsl[];
extern char datatoc_workbench_forward_depth_frag_glsl[];
extern char datatoc_workbench_forward_transparent_accum_frag_glsl[];
@@ -259,6 +262,10 @@ void workbench_forward_engine_init(WORKBENCH_Data *vedata)
/* Alloc transient pointers */
stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
}
+ if (!stl->effects) {
+ stl->effects = MEM_mallocN(sizeof(*stl->effects), __func__);
+ workbench_effect_info_init(stl->effects);
+ }
WORKBENCH_PrivateData *wpd = stl->g_data;
workbench_private_data_init(wpd);
float light_direction[3];
@@ -280,6 +287,8 @@ void workbench_forward_engine_init(WORKBENCH_Data *vedata)
forward_vert, NULL,
forward_depth_frag, defines_hair);
+ workbench_fxaa_engine_init();
+
e_data.checker_depth_sh = DRW_shader_create_fullscreen(
datatoc_workbench_checkerboard_depth_frag_glsl, NULL);
MEM_freeN(forward_vert);
@@ -300,6 +309,8 @@ void workbench_forward_engine_init(WORKBENCH_Data *vedata)
size[0], size[1], GPU_R16F, &draw_engine_workbench_transparent);
e_data.composite_buffer_tx = DRW_texture_pool_query_2D(
size[0], size[1], GPU_R11F_G11F_B10F, &draw_engine_workbench_transparent);
+ e_data.effect_buffer_tx = DRW_texture_pool_query_2D(
+ size[0], size[1], GPU_RGBA16F, &draw_engine_workbench_solid);
GPU_framebuffer_ensure_config(&fbl->object_outline_fb, {
GPU_ATTACHMENT_TEXTURE(dtxl->depth),
@@ -316,6 +327,10 @@ void workbench_forward_engine_init(WORKBENCH_Data *vedata)
GPU_ATTACHMENT_NONE,
GPU_ATTACHMENT_TEXTURE(e_data.composite_buffer_tx),
});
+ GPU_framebuffer_ensure_config(&fbl->effect_fb, {
+ GPU_ATTACHMENT_NONE,
+ GPU_ATTACHMENT_TEXTURE(e_data.effect_buffer_tx),
+ });
/* Transparency Accum */
{
@@ -342,6 +357,11 @@ void workbench_forward_engine_init(WORKBENCH_Data *vedata)
DRW_shgroup_uniform_vec2(grp, "invertedViewportSize", DRW_viewport_invert_size_get(), 1);
DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL);
}
+
+ {
+ psl->effect_aa_pass = workbench_fxaa_create_pass(&e_data.effect_buffer_tx);
+ }
+
/* Checker Depth */
{
int state = DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_ALWAYS;
@@ -361,6 +381,8 @@ void workbench_forward_engine_free()
DRW_SHADER_FREE_SAFE(e_data.object_outline_sh);
DRW_SHADER_FREE_SAFE(e_data.object_outline_hair_sh);
DRW_SHADER_FREE_SAFE(e_data.checker_depth_sh);
+
+ workbench_fxaa_engine_free();
}
void workbench_forward_cache_init(WORKBENCH_Data *UNUSED(vedata))
@@ -585,9 +607,9 @@ void workbench_forward_draw_scene(WORKBENCH_Data *vedata)
DRW_draw_pass(psl->composite_pass);
/* Color correct */
- GPU_framebuffer_bind(dfbl->color_only_fb);
- DRW_transform_to_display(e_data.composite_buffer_tx);
+ workbench_fxaa_draw_pass(wpd, fbl->effect_fb, e_data.composite_buffer_tx, psl->effect_aa_pass);
+ /* Apply checker pattern */
GPU_framebuffer_bind(dfbl->depth_only_fb);
DRW_draw_pass(psl->checker_depth_pass);