Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/eevee/eevee_renderpasses.c
| Show First 20 Lines • Show All 84 Lines • ▼ Show 20 Lines | void EEVEE_renderpasses_init(EEVEE_Data *vedata) | ||||
| EEVEE_StorageList *stl = vedata->stl; | EEVEE_StorageList *stl = vedata->stl; | ||||
| EEVEE_PrivateData *g_data = stl->g_data; | EEVEE_PrivateData *g_data = stl->g_data; | ||||
| ViewLayer *view_layer = draw_ctx->view_layer; | ViewLayer *view_layer = draw_ctx->view_layer; | ||||
| View3D *v3d = draw_ctx->v3d; | View3D *v3d = draw_ctx->v3d; | ||||
| if (v3d) { | if (v3d) { | ||||
| const Scene *scene = draw_ctx->scene; | const Scene *scene = draw_ctx->scene; | ||||
| eViewLayerEEVEEPassType render_pass = v3d->shading.render_pass; | eViewLayerEEVEEPassType render_pass = v3d->shading.render_pass; | ||||
| if (render_pass == EEVEE_RENDER_PASS_AO && | if (render_pass == EEVEE_RENDER_PASS_BLOOM && | ||||
| ((scene->eevee.flag & SCE_EEVEE_GTAO_ENABLED) == 0)) { | |||||
| render_pass = EEVEE_RENDER_PASS_COMBINED; | |||||
| } | |||||
| else if (render_pass == EEVEE_RENDER_PASS_BLOOM && | |||||
| ((scene->eevee.flag & SCE_EEVEE_BLOOM_ENABLED) == 0)) { | ((scene->eevee.flag & SCE_EEVEE_BLOOM_ENABLED) == 0)) { | ||||
| render_pass = EEVEE_RENDER_PASS_COMBINED; | render_pass = EEVEE_RENDER_PASS_COMBINED; | ||||
| } | } | ||||
| g_data->render_passes = render_pass; | g_data->render_passes = render_pass; | ||||
| } | } | ||||
| else { | else { | ||||
| eViewLayerEEVEEPassType enabled_render_passes = view_layer->eevee.render_passes; | eViewLayerEEVEEPassType enabled_render_passes = view_layer->eevee.render_passes; | ||||
| #define ENABLE_FROM_LEGACY(name_legacy, name_eevee) \ | #define ENABLE_FROM_LEGACY(name_legacy, name_eevee) \ | ||||
| ▲ Show 20 Lines • Show All 280 Lines • ▼ Show 20 Lines | void EEVEE_renderpasses_draw(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) | ||||
| DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get(); | DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get(); | ||||
| /* We can only draw a single renderpass. Lightpasses also select their color pass (a second | /* We can only draw a single renderpass. Lightpasses also select their color pass (a second | ||||
| pass). We mask the light pass when a light pass is selected. */ | pass). We mask the light pass when a light pass is selected. */ | ||||
| const eViewLayerEEVEEPassType render_pass = | const eViewLayerEEVEEPassType render_pass = | ||||
| ((stl->g_data->render_passes & EEVEE_RENDERPASSES_LIGHT_PASS) != 0) ? | ((stl->g_data->render_passes & EEVEE_RENDERPASSES_LIGHT_PASS) != 0) ? | ||||
| (stl->g_data->render_passes & EEVEE_RENDERPASSES_LIGHT_PASS) : | (stl->g_data->render_passes & EEVEE_RENDERPASSES_LIGHT_PASS) : | ||||
| stl->g_data->render_passes; | stl->g_data->render_passes; | ||||
| const DRWContextState *draw_ctx = DRW_context_state_get(); | |||||
| const Scene *scene_eval = DEG_get_evaluated_scene(draw_ctx->depsgraph); | |||||
| bool is_valid = (render_pass & EEVEE_RENDERPASSES_ALL) > 0; | bool is_valid = (render_pass & EEVEE_RENDERPASSES_ALL) > 0; | ||||
| bool needs_color_transfer = (render_pass & EEVEE_RENDERPASSES_COLOR_PASS) > 0 && | bool needs_color_transfer = (render_pass & EEVEE_RENDERPASSES_COLOR_PASS) > 0 && | ||||
| DRW_state_is_opengl_render(); | DRW_state_is_opengl_render(); | ||||
| UNUSED_VARS(needs_color_transfer); | UNUSED_VARS(needs_color_transfer); | ||||
| if ((render_pass & EEVEE_RENDER_PASS_BLOOM) != 0 && | if ((render_pass & EEVEE_RENDER_PASS_BLOOM) != 0 && | ||||
| (effects->enabled_effects & EFFECT_BLOOM) == 0) { | (effects->enabled_effects & EFFECT_BLOOM) == 0) { | ||||
| is_valid = false; | is_valid = false; | ||||
| } | } | ||||
| /* When SSS isn't available, but the pass is requested, we mark it as invalid */ | |||||
| if ((render_pass & EEVEE_RENDER_PASS_AO) != 0 && | |||||
| (scene_eval->eevee.flag & SCE_EEVEE_GTAO_ENABLED) == 0) { | |||||
| is_valid = false; | |||||
| } | |||||
| const int current_sample = stl->effects->taa_current_sample; | const int current_sample = stl->effects->taa_current_sample; | ||||
| const int total_samples = stl->effects->taa_total_sample; | const int total_samples = stl->effects->taa_total_sample; | ||||
| if ((render_pass & EEVEE_RENDERPASSES_POST_PROCESS_ON_FIRST_SAMPLE) && | if ((render_pass & EEVEE_RENDERPASSES_POST_PROCESS_ON_FIRST_SAMPLE) && | ||||
| (current_sample > 1 && total_samples != 1)) { | (current_sample > 1 && total_samples != 1)) { | ||||
| return; | return; | ||||
| } | } | ||||
| if (is_valid) { | if (is_valid) { | ||||
| Show All 35 Lines | case 3: | ||||
| break; | break; | ||||
| case 4: | case 4: | ||||
| tx = effects->ssr_specrough_input; | tx = effects->ssr_specrough_input; | ||||
| break; | break; | ||||
| case 5: | case 5: | ||||
| tx = txl->color_double_buffer; | tx = txl->color_double_buffer; | ||||
| break; | break; | ||||
| case 6: | case 6: | ||||
| tx = effects->gtao_horizons; | tx = effects->gtao_horizons_renderpass; | ||||
| break; | break; | ||||
| case 7: | case 7: | ||||
| tx = effects->gtao_horizons; | tx = effects->gtao_horizons_renderpass; | ||||
| break; | break; | ||||
| case 8: | case 8: | ||||
| tx = effects->sss_irradiance; | tx = effects->sss_irradiance; | ||||
| break; | break; | ||||
| case 9: | case 9: | ||||
| tx = effects->sss_radius; | tx = effects->sss_radius; | ||||
| break; | break; | ||||
| case 10: | case 10: | ||||
| Show All 13 Lines | |||||