Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/eevee/eevee_occlusion.c
| Show First 20 Lines • Show All 54 Lines • ▼ Show 20 Lines | static void eevee_create_shader_occlusion(void) | ||||
| BLI_dynstr_free(ds_frag); | BLI_dynstr_free(ds_frag); | ||||
| e_data.gtao_sh = DRW_shader_create_fullscreen(frag_str, NULL); | e_data.gtao_sh = DRW_shader_create_fullscreen(frag_str, NULL); | ||||
| e_data.gtao_debug_sh = DRW_shader_create_fullscreen(frag_str, "#define DEBUG_AO\n"); | e_data.gtao_debug_sh = DRW_shader_create_fullscreen(frag_str, "#define DEBUG_AO\n"); | ||||
| MEM_freeN(frag_str); | MEM_freeN(frag_str); | ||||
| } | } | ||||
| int EEVEE_occlusion_init(EEVEE_SceneLayerData *UNUSED(sldata), EEVEE_Data *vedata) | int EEVEE_occlusion_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata) | ||||
| { | { | ||||
| EEVEE_StorageList *stl = vedata->stl; | EEVEE_StorageList *stl = vedata->stl; | ||||
| EEVEE_FramebufferList *fbl = vedata->fbl; | EEVEE_FramebufferList *fbl = vedata->fbl; | ||||
| EEVEE_TextureList *txl = vedata->txl; | EEVEE_TextureList *txl = vedata->txl; | ||||
| 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(); | ||||
| SceneLayer *scene_layer = draw_ctx->scene_layer; | ViewLayer *view_layer = draw_ctx->view_layer; | ||||
| IDProperty *props = BKE_scene_layer_engine_evaluated_get(scene_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE); | IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE); | ||||
| if (BKE_collection_engine_property_value_get_bool(props, "gtao_enable")) { | if (BKE_collection_engine_property_value_get_bool(props, "gtao_enable")) { | ||||
| const float *viewport_size = DRW_viewport_size_get(); | const float *viewport_size = DRW_viewport_size_get(); | ||||
| /* Shaders */ | /* Shaders */ | ||||
| if (!e_data.gtao_sh) { | if (!e_data.gtao_sh) { | ||||
| eevee_create_shader_occlusion(); | eevee_create_shader_occlusion(); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 56 Lines • ▼ Show 20 Lines | int EEVEE_occlusion_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata) | ||||
| /* Cleanup */ | /* Cleanup */ | ||||
| DRW_TEXTURE_FREE_SAFE(txl->gtao_horizons); | DRW_TEXTURE_FREE_SAFE(txl->gtao_horizons); | ||||
| DRW_FRAMEBUFFER_FREE_SAFE(fbl->gtao_fb); | DRW_FRAMEBUFFER_FREE_SAFE(fbl->gtao_fb); | ||||
| effects->ao_settings = 0.0f; | effects->ao_settings = 0.0f; | ||||
| return 0; | return 0; | ||||
| } | } | ||||
| void EEVEE_occlusion_cache_init(EEVEE_SceneLayerData *UNUSED(sldata), EEVEE_Data *vedata) | void EEVEE_occlusion_cache_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata) | ||||
| { | { | ||||
| EEVEE_PassList *psl = vedata->psl; | EEVEE_PassList *psl = vedata->psl; | ||||
| EEVEE_StorageList *stl = vedata->stl; | EEVEE_StorageList *stl = vedata->stl; | ||||
| EEVEE_TextureList *txl = vedata->txl; | EEVEE_TextureList *txl = vedata->txl; | ||||
| EEVEE_EffectsInfo *effects = stl->effects; | EEVEE_EffectsInfo *effects = stl->effects; | ||||
| DefaultTextureList *dtxl = DRW_viewport_texture_list_get(); | DefaultTextureList *dtxl = DRW_viewport_texture_list_get(); | ||||
| struct Gwn_Batch *quad = DRW_cache_fullscreen_quad_get(); | struct Gwn_Batch *quad = DRW_cache_fullscreen_quad_get(); | ||||
| Show All 34 Lines | if (G.debug_value == 6) { | ||||
| DRW_shgroup_uniform_vec4(grp, "aoParameters[0]", &stl->effects->ao_dist, 2); | DRW_shgroup_uniform_vec4(grp, "aoParameters[0]", &stl->effects->ao_dist, 2); | ||||
| DRW_shgroup_uniform_ivec2(grp, "aoHorizonTexSize", (int *)stl->effects->ao_texsize, 1); | DRW_shgroup_uniform_ivec2(grp, "aoHorizonTexSize", (int *)stl->effects->ao_texsize, 1); | ||||
| DRW_shgroup_uniform_texture(grp, "utilTex", EEVEE_materials_get_util_tex()); | DRW_shgroup_uniform_texture(grp, "utilTex", EEVEE_materials_get_util_tex()); | ||||
| DRW_shgroup_call_add(grp, quad, NULL); | DRW_shgroup_call_add(grp, quad, NULL); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| void EEVEE_occlusion_compute(EEVEE_SceneLayerData *UNUSED(sldata), EEVEE_Data *vedata) | void EEVEE_occlusion_compute(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata) | ||||
| { | { | ||||
| EEVEE_PassList *psl = vedata->psl; | EEVEE_PassList *psl = vedata->psl; | ||||
| EEVEE_TextureList *txl = vedata->txl; | EEVEE_TextureList *txl = vedata->txl; | ||||
| 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; | ||||
| if ((effects->enabled_effects & EFFECT_GTAO) != 0) { | if ((effects->enabled_effects & EFFECT_GTAO) != 0) { | ||||
| Show All 11 Lines | if ((effects->enabled_effects & EFFECT_GTAO) != 0) { | ||||
| /* Restore */ | /* Restore */ | ||||
| DRW_framebuffer_bind(fbl->main); | DRW_framebuffer_bind(fbl->main); | ||||
| DRW_stats_group_end(); | DRW_stats_group_end(); | ||||
| } | } | ||||
| } | } | ||||
| void EEVEE_occlusion_draw_debug(EEVEE_SceneLayerData *UNUSED(sldata), EEVEE_Data *vedata) | void EEVEE_occlusion_draw_debug(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata) | ||||
| { | { | ||||
| EEVEE_PassList *psl = vedata->psl; | EEVEE_PassList *psl = vedata->psl; | ||||
| 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; | ||||
| if (((effects->enabled_effects & EFFECT_GTAO) != 0) && (G.debug_value == 6)) { | if (((effects->enabled_effects & EFFECT_GTAO) != 0) && (G.debug_value == 6)) { | ||||
| DRW_stats_group_start("GTAO Debug"); | DRW_stats_group_start("GTAO Debug"); | ||||
| Show All 19 Lines | |||||