Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/eevee/eevee_occlusion.c
| Show First 20 Lines • Show All 71 Lines • ▼ Show 20 Lines | int EEVEE_occlusion_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) | ||||
| EEVEE_FramebufferList *fbl = vedata->fbl; | EEVEE_FramebufferList *fbl = vedata->fbl; | ||||
| EEVEE_StorageList *stl = vedata->stl; | EEVEE_StorageList *stl = vedata->stl; | ||||
| EEVEE_EffectsInfo *effects = stl->effects; | EEVEE_EffectsInfo *effects = stl->effects; | ||||
| const DRWContextState *draw_ctx = DRW_context_state_get(); | const DRWContextState *draw_ctx = DRW_context_state_get(); | ||||
| const Scene *scene_eval = DEG_get_evaluated_scene(draw_ctx->depsgraph); | const Scene *scene_eval = DEG_get_evaluated_scene(draw_ctx->depsgraph); | ||||
| if (scene_eval->eevee.flag & SCE_EEVEE_GTAO_ENABLED) { | if (scene_eval->eevee.flag & SCE_EEVEE_GTAO_ENABLED) { | ||||
| const float *viewport_size = DRW_viewport_size_get(); | const float *viewport_size = DRW_viewport_render_size_get(); | ||||
| const int fs_size[2] = {(int)viewport_size[0], (int)viewport_size[1]}; | const int fs_size[2] = {(int)viewport_size[0], (int)viewport_size[1]}; | ||||
| /* Shaders */ | /* Shaders */ | ||||
| if (!e_data.gtao_sh) { | if (!e_data.gtao_sh) { | ||||
| eevee_create_shader_occlusion(); | eevee_create_shader_occlusion(); | ||||
| } | } | ||||
| common_data->ao_dist = scene_eval->eevee.gtao_distance; | common_data->ao_dist = scene_eval->eevee.gtao_distance; | ||||
| ▲ Show 20 Lines • Show All 50 Lines • ▼ Show 20 Lines | void EEVEE_occlusion_output_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) | ||||
| const DRWContextState *draw_ctx = DRW_context_state_get(); | const DRWContextState *draw_ctx = DRW_context_state_get(); | ||||
| const Scene *scene_eval = DEG_get_evaluated_scene(draw_ctx->depsgraph); | const Scene *scene_eval = DEG_get_evaluated_scene(draw_ctx->depsgraph); | ||||
| if (scene_eval->eevee.flag & SCE_EEVEE_GTAO_ENABLED) { | if (scene_eval->eevee.flag & SCE_EEVEE_GTAO_ENABLED) { | ||||
| DefaultTextureList *dtxl = DRW_viewport_texture_list_get(); | DefaultTextureList *dtxl = DRW_viewport_texture_list_get(); | ||||
| float clear[4] = {0.0f, 0.0f, 0.0f, 0.0f}; | float clear[4] = {0.0f, 0.0f, 0.0f, 0.0f}; | ||||
| DRW_texture_ensure_fullscreen_2d(&txl->ao_accum, GPU_R32F, 0); /* Should be enough precision for many samples. */ | DRW_texture_ensure_render_fullscreen_2d(&txl->ao_accum, GPU_R32F, 0); /* Should be enough precision for many samples. */ | ||||
| GPU_framebuffer_ensure_config(&fbl->ao_accum_fb, { | GPU_framebuffer_ensure_config(&fbl->ao_accum_fb, { | ||||
| GPU_ATTACHMENT_NONE, | GPU_ATTACHMENT_NONE, | ||||
| GPU_ATTACHMENT_TEXTURE(txl->ao_accum) | GPU_ATTACHMENT_TEXTURE(txl->ao_accum) | ||||
| }); | }); | ||||
| /* Clear texture. */ | /* Clear texture. */ | ||||
| GPU_framebuffer_bind(fbl->ao_accum_fb); | GPU_framebuffer_bind(fbl->ao_accum_fb); | ||||
| GPU_framebuffer_clear_color(fbl->ao_accum_fb, clear); | GPU_framebuffer_clear_color(fbl->ao_accum_fb, clear); | ||||
| /* Accumulation pass */ | /* Accumulation pass */ | ||||
| DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_ADDITIVE; | DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_ADDITIVE; | ||||
| psl->ao_accum_ps = DRW_pass_create("AO Accum", state); | psl->ao_accum_ps = DRW_pass_create("AO Accum", state); | ||||
| DRWShadingGroup *grp = DRW_shgroup_create(e_data.gtao_debug_sh, psl->ao_accum_ps); | DRWShadingGroup *grp = DRW_shgroup_create(e_data.gtao_debug_sh, psl->ao_accum_ps); | ||||
| DRW_shgroup_uniform_texture(grp, "utilTex", EEVEE_materials_get_util_tex()); | DRW_shgroup_uniform_texture(grp, "utilTex", EEVEE_materials_get_util_tex()); | ||||
| DRW_shgroup_uniform_texture_ref(grp, "maxzBuffer", &txl->maxzbuffer); | DRW_shgroup_uniform_texture_ref(grp, "maxzBuffer", &txl->maxzbuffer); | ||||
| DRW_shgroup_uniform_texture_ref(grp, "depthBuffer", &dtxl->depth); | DRW_shgroup_uniform_texture_ref(grp, "depthBuffer", txl->depth ? &txl->depth : &dtxl->depth); | ||||
| DRW_shgroup_uniform_texture_ref(grp, "normalBuffer", &effects->ssr_normal_input); | DRW_shgroup_uniform_texture_ref(grp, "normalBuffer", &effects->ssr_normal_input); | ||||
| DRW_shgroup_uniform_texture_ref(grp, "horizonBuffer", &effects->gtao_horizons); | DRW_shgroup_uniform_texture_ref(grp, "horizonBuffer", &effects->gtao_horizons); | ||||
| DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo); | DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo); | ||||
| DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL); | DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL); | ||||
| } | } | ||||
| else { | else { | ||||
| /* Cleanup to release memory */ | /* Cleanup to release memory */ | ||||
| DRW_TEXTURE_FREE_SAFE(txl->ao_accum); | DRW_TEXTURE_FREE_SAFE(txl->ao_accum); | ||||
| Show All 40 Lines | if ((effects->enabled_effects & EFFECT_GTAO) != 0) { | ||||
| DRW_shgroup_uniform_int(grp, "layer", &stl->effects->ao_depth_layer, 1); | DRW_shgroup_uniform_int(grp, "layer", &stl->effects->ao_depth_layer, 1); | ||||
| DRW_shgroup_call_add(grp, quad, NULL); | DRW_shgroup_call_add(grp, quad, NULL); | ||||
| if (G.debug_value == 6) { | if (G.debug_value == 6) { | ||||
| psl->ao_horizon_debug = DRW_pass_create("GTAO Horizon Debug", DRW_STATE_WRITE_COLOR); | psl->ao_horizon_debug = DRW_pass_create("GTAO Horizon Debug", DRW_STATE_WRITE_COLOR); | ||||
| grp = DRW_shgroup_create(e_data.gtao_debug_sh, psl->ao_horizon_debug); | grp = DRW_shgroup_create(e_data.gtao_debug_sh, psl->ao_horizon_debug); | ||||
| DRW_shgroup_uniform_texture(grp, "utilTex", EEVEE_materials_get_util_tex()); | DRW_shgroup_uniform_texture(grp, "utilTex", EEVEE_materials_get_util_tex()); | ||||
| DRW_shgroup_uniform_texture_ref(grp, "maxzBuffer", &txl->maxzbuffer); | DRW_shgroup_uniform_texture_ref(grp, "maxzBuffer", &txl->maxzbuffer); | ||||
| DRW_shgroup_uniform_texture_ref(grp, "depthBuffer", &dtxl->depth); | DRW_shgroup_uniform_texture_ref(grp, "depthBuffer", txl->depth ? &txl->depth : &dtxl->depth); | ||||
| DRW_shgroup_uniform_texture_ref(grp, "normalBuffer", &effects->ssr_normal_input); | DRW_shgroup_uniform_texture_ref(grp, "normalBuffer", &effects->ssr_normal_input); | ||||
| DRW_shgroup_uniform_texture_ref(grp, "horizonBuffer", &effects->gtao_horizons); | DRW_shgroup_uniform_texture_ref(grp, "horizonBuffer", &effects->gtao_horizons); | ||||
| DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo); | DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo); | ||||
| DRW_shgroup_call_add(grp, quad, NULL); | DRW_shgroup_call_add(grp, quad, NULL); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 82 Lines • Show Last 20 Lines | |||||