Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/eevee/eevee_lookdev.c
| Context not available. | |||||
| Scene *scene = draw_ctx->scene; | Scene *scene = draw_ctx->scene; | ||||
| if (LOOK_DEV_OVERLAY_ENABLED(v3d)) { | if (LOOK_DEV_OVERLAY_ENABLED(v3d)) { | ||||
| /* Viewport / Ball size. */ | /* Viewport / Spheres size. */ | ||||
| rcti rect; | rcti rect; | ||||
| ED_region_visible_rect(draw_ctx->ar, &rect); | ED_region_visible_rect(draw_ctx->ar, &rect); | ||||
| /* Make the viewport width scale the lookdev balls a bit. | /* Make the viewport width scale the lookdev spheres a bit. | ||||
| * Scale between 1000px and 2000px. */ | * Scale between 1000px and 2000px. */ | ||||
| const float viewport_scale = clamp_f( | const float viewport_scale = clamp_f( | ||||
| BLI_rcti_size_x(&rect) / (2000.0f * U.dpi_fac), 0.5f, 1.0f); | BLI_rcti_size_x(&rect) / (2000.0f * U.dpi_fac), 0.5f, 1.0f); | ||||
| const int ball_size = U.lookdev_ball_size * U.dpi_fac * viewport_scale; | const int spheres_size = U.lookdev_spheres_size * U.dpi_fac * viewport_scale; | ||||
| if (ball_size != effects->ball_size || rect.xmax != effects->anchor[0] || | if (spheres_size != effects->spheres_size || rect.xmax != effects->anchor[0] || | ||||
| rect.ymin != effects->anchor[1]) { | rect.ymin != effects->anchor[1]) { | ||||
| /* If ball size or anchor point moves, reset TAA to avoid ghosting issue. | /* If spheres size or anchor point moves, reset TAA to avoid ghosting issue. | ||||
| * This needs to happen early because we are changing taa_current_sample. */ | * This needs to happen early because we are changing taa_current_sample. */ | ||||
| effects->ball_size = ball_size; | effects->spheres_size = spheres_size; | ||||
| effects->anchor[0] = rect.xmax; | effects->anchor[0] = rect.xmax; | ||||
| effects->anchor[1] = rect.ymin; | effects->anchor[1] = rect.ymin; | ||||
| EEVEE_temporal_sampling_reset(vedata); | EEVEE_temporal_sampling_reset(vedata); | ||||
| Context not available. | |||||
| } | } | ||||
| static void eevee_lookdev_apply_taa(const EEVEE_EffectsInfo *effects, | static void eevee_lookdev_apply_taa(const EEVEE_EffectsInfo *effects, | ||||
| int ball_size, | int spheres_size, | ||||
| float winmat[4][4]) | float winmat[4][4]) | ||||
| { | { | ||||
| if (DRW_state_is_image_render() || ((effects->enabled_effects & EFFECT_TAA) != 0)) { | if (DRW_state_is_image_render() || ((effects->enabled_effects & EFFECT_TAA) != 0)) { | ||||
| Context not available. | |||||
| BLI_halton_2d(ht_primes, ht_offset, effects->taa_current_sample, ht_point); | BLI_halton_2d(ht_primes, ht_offset, effects->taa_current_sample, ht_point); | ||||
| EEVEE_temporal_sampling_offset_calc(ht_point, 1.5f, ofs); | EEVEE_temporal_sampling_offset_calc(ht_point, 1.5f, ofs); | ||||
| winmat[3][0] += ofs[0] / ball_size; | winmat[3][0] += ofs[0] / spheres_size; | ||||
| winmat[3][1] += ofs[1] / ball_size; | winmat[3][1] += ofs[1] / spheres_size; | ||||
| } | } | ||||
| } | } | ||||
| Context not available. | |||||
| DRWMatrixState matstate; | DRWMatrixState matstate; | ||||
| unit_m4(matstate.winmat); | unit_m4(matstate.winmat); | ||||
| eevee_lookdev_apply_taa(effects, effects->ball_size, matstate.winmat); | eevee_lookdev_apply_taa(effects, effects->spheres_size, matstate.winmat); | ||||
| /* "Remove" view matrix location. Leaving only rotation. */ | /* "Remove" view matrix location. Leaving only rotation. */ | ||||
| DRW_viewport_matrix_get(matstate.viewmat, DRW_MAT_VIEW); | DRW_viewport_matrix_get(matstate.viewmat, DRW_MAT_VIEW); | ||||
| Context not available. | |||||
| GPU_framebuffer_bind(fb); | GPU_framebuffer_bind(fb); | ||||
| const int ball_margin = effects->ball_size / 6.0f; | const int spheres_margin = effects->spheres_size / 6.0f; | ||||
| float offset[2] = {0.0f, ball_margin}; | float offset[2] = {0.0f, spheres_margin}; | ||||
| offset[0] = effects->ball_size + ball_margin; | offset[0] = effects->spheres_size + spheres_margin; | ||||
| GPU_framebuffer_viewport_set(fb, | GPU_framebuffer_viewport_set(fb, | ||||
| effects->anchor[0] - offset[0], | effects->anchor[0] - offset[0], | ||||
| effects->anchor[1] + offset[1], | effects->anchor[1] + offset[1], | ||||
| effects->ball_size, | effects->spheres_size, | ||||
| effects->ball_size); | effects->spheres_size); | ||||
| DRW_draw_pass(psl->lookdev_diffuse_pass); | DRW_draw_pass(psl->lookdev_diffuse_pass); | ||||
| offset[0] = (effects->ball_size + ball_margin) + | offset[0] = (effects->spheres_size + spheres_margin) + | ||||
| (ball_margin + effects->ball_size + ball_margin); | (spheres_margin + effects->spheres_size + spheres_margin); | ||||
| GPU_framebuffer_viewport_set(fb, | GPU_framebuffer_viewport_set(fb, | ||||
| effects->anchor[0] - offset[0], | effects->anchor[0] - offset[0], | ||||
| effects->anchor[1] + offset[1], | effects->anchor[1] + offset[1], | ||||
| effects->ball_size, | effects->spheres_size, | ||||
| effects->ball_size); | effects->spheres_size); | ||||
| DRW_draw_pass(psl->lookdev_glossy_pass); | DRW_draw_pass(psl->lookdev_glossy_pass); | ||||
| Context not available. | |||||