From beee7db425cbd1b1dfbdf362b52be76d19dab712 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Wed, 22 Nov 2023 18:08:46 +0100 Subject: [PATCH] Cleanup: EEVEE-Next: Remove use of deprecated DRWView API --- .../draw/engines/eevee_next/eevee_film.cc | 6 +- .../draw/engines/eevee_next/eevee_film.hh | 2 +- .../draw/engines/eevee_next/eevee_view.cc | 78 +++++++------------ .../draw/engines/eevee_next/eevee_view.hh | 11 ++- 4 files changed, 37 insertions(+), 60 deletions(-) diff --git a/source/blender/draw/engines/eevee_next/eevee_film.cc b/source/blender/draw/engines/eevee_next/eevee_film.cc index da4b67adf0c..6f1db2a0809 100644 --- a/source/blender/draw/engines/eevee_next/eevee_film.cc +++ b/source/blender/draw/engines/eevee_next/eevee_film.cc @@ -632,7 +632,7 @@ void Film::update_sample_table() } } -void Film::accumulate(const DRWView *view, GPUTexture *combined_final_tx) +void Film::accumulate(View &view, GPUTexture *combined_final_tx) { if (inst_.is_viewport()) { DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get(); @@ -653,9 +653,7 @@ void Film::accumulate(const DRWView *view, GPUTexture *combined_final_tx) data_.display_only = false; inst_.push_uniform_data(); - draw::View drw_view("MainView", view); - - inst_.manager->submit(accumulate_ps_, drw_view); + inst_.manager->submit(accumulate_ps_, view); combined_tx_.swap(); weight_tx_.swap(); diff --git a/source/blender/draw/engines/eevee_next/eevee_film.hh b/source/blender/draw/engines/eevee_next/eevee_film.hh index 80a49552601..25e80b0bb21 100644 --- a/source/blender/draw/engines/eevee_next/eevee_film.hh +++ b/source/blender/draw/engines/eevee_next/eevee_film.hh @@ -90,7 +90,7 @@ class Film { void end_sync(); /** Accumulate the newly rendered sample contained in #RenderBuffers and blit to display. */ - void accumulate(const DRWView *view, GPUTexture *combined_final_tx); + void accumulate(View &view, GPUTexture *combined_final_tx); /** Sort and normalize cryptomatte samples. */ void cryptomatte_sort(); diff --git a/source/blender/draw/engines/eevee_next/eevee_view.cc b/source/blender/draw/engines/eevee_next/eevee_view.cc index 379befbb212..a7490733496 100644 --- a/source/blender/draw/engines/eevee_next/eevee_view.cc +++ b/source/blender/draw/engines/eevee_next/eevee_view.cc @@ -28,11 +28,7 @@ namespace blender::eevee { /** \name ShadingView * \{ */ -void ShadingView::init() -{ - // dof_.init(); - // mb_.init(); -} +void ShadingView::init() {} void ShadingView::sync() { @@ -59,31 +55,21 @@ void ShadingView::sync() const CameraData &cam = inst_.camera.data_get(); float4x4 viewmat, winmat; - const float(*viewmat_p)[4] = viewmat.ptr(), (*winmat_p)[4] = winmat.ptr(); if (false /* inst_.camera.is_panoramic() */) { /* TODO(@fclem) Over-scans. */ /* For now a mandatory 5% over-scan for DoF. */ float side = cam.clip_near * 1.05f; float near = cam.clip_near; float far = cam.clip_far; - perspective_m4(winmat.ptr(), -side, side, -side, side, near, far); + winmat = math::projection::perspective(-side, side, -side, side, near, far); viewmat = face_matrix_ * cam.viewmat; } else { - viewmat_p = cam.viewmat.ptr(); - winmat_p = cam.winmat.ptr(); + viewmat = cam.viewmat; + winmat = cam.winmat; } - main_view_ = DRW_view_create(viewmat_p, winmat_p, nullptr, nullptr, nullptr); - sub_view_ = DRW_view_create_sub(main_view_, viewmat_p, winmat_p); - render_view_ = DRW_view_create_sub(main_view_, viewmat_p, winmat_p); - - // dof_.sync(winmat_p, extent_); - // rt_buffer_opaque_.sync(extent_); - // rt_buffer_refract_.sync(extent_); - // inst_.hiz_back.view_sync(extent_); - // inst_.hiz_front.view_sync(extent_); - // inst_.gbuffer.view_sync(extent_); + main_view_.sync(viewmat, winmat); } void ShadingView::render() @@ -103,9 +89,8 @@ void ShadingView::render() update_view(); DRW_stats_group_start(name_); - DRW_view_set_active(render_view_); - inst_.planar_probes.set_view(render_view_new_, extent_); + inst_.planar_probes.set_view(render_view_, extent_); /* If camera has any motion, compute motion vector in the film pass. Otherwise, we avoid float * precision issue by setting the motion of all static geometry to 0. */ @@ -121,44 +106,42 @@ void ShadingView::render() inst_.hiz_buffer.set_source(&inst_.render_buffers.depth_tx); inst_.hiz_buffer.set_dirty(); - inst_.pipelines.background.render(render_view_new_); + inst_.pipelines.background.render(render_view_); /* TODO(fclem): Move it after the first prepass (and hiz update) once pipeline is stabilized. */ - inst_.lights.set_view(render_view_new_, extent_); - inst_.reflection_probes.set_view(render_view_new_); + inst_.lights.set_view(render_view_, extent_); + inst_.reflection_probes.set_view(render_view_); - inst_.volume.draw_prepass(render_view_new_); + inst_.volume.draw_prepass(render_view_); - /* TODO: cleanup. */ - View main_view_new("MainView", main_view_); /* TODO(Miguel Pozo): Deferred and forward prepass should happen before the GBuffer pass. */ - inst_.pipelines.deferred.render(main_view_new, - render_view_new_, + inst_.pipelines.deferred.render(main_view_, + render_view_, prepass_fb_, combined_fb_, extent_, rt_buffer_opaque_, rt_buffer_refract_); - inst_.volume.draw_compute(render_view_new_); + inst_.volume.draw_compute(render_view_); // inst_.lookdev.render_overlay(view_fb_); - inst_.pipelines.forward.render(render_view_new_, prepass_fb_, combined_fb_); + inst_.pipelines.forward.render(render_view_, prepass_fb_, combined_fb_); render_transparent_pass(rbufs); - inst_.lights.debug_draw(render_view_new_, combined_fb_); - inst_.hiz_buffer.debug_draw(render_view_new_, combined_fb_); - inst_.shadows.debug_draw(render_view_new_, combined_fb_); - inst_.irradiance_cache.viewport_draw(render_view_new_, combined_fb_); - inst_.reflection_probes.viewport_draw(render_view_new_, combined_fb_); - inst_.planar_probes.viewport_draw(render_view_new_, combined_fb_); + inst_.lights.debug_draw(render_view_, combined_fb_); + inst_.hiz_buffer.debug_draw(render_view_, combined_fb_); + inst_.shadows.debug_draw(render_view_, combined_fb_); + inst_.irradiance_cache.viewport_draw(render_view_, combined_fb_); + inst_.reflection_probes.viewport_draw(render_view_, combined_fb_); + inst_.planar_probes.viewport_draw(render_view_, combined_fb_); - inst_.ambient_occlusion.render_pass(render_view_new_); + inst_.ambient_occlusion.render_pass(render_view_); GPUTexture *combined_final_tx = render_postfx(rbufs.combined_tx); - inst_.film.accumulate(sub_view_, combined_final_tx); + inst_.film.accumulate(jitter_view_, combined_final_tx); rbufs.release(); postfx_tx_.release(); @@ -176,7 +159,7 @@ void ShadingView::render_transparent_pass(RenderBuffers &rbufs) float4 clear_color = {0.0f, 0.0f, 0.0f, 1.0f}; GPU_framebuffer_bind(transparent_fb_); GPU_framebuffer_clear_color(transparent_fb_, clear_color); - inst_.pipelines.forward.render(render_view_new_, prepass_fb_, transparent_fb_); + inst_.pipelines.forward.render(render_view_, prepass_fb_, transparent_fb_); } } @@ -190,17 +173,16 @@ GPUTexture *ShadingView::render_postfx(GPUTexture *input_tx) GPUTexture *output_tx = postfx_tx_; /* Swapping is done internally. Actual output is set to the next input. */ - inst_.depth_of_field.render(render_view_new_, &input_tx, &output_tx, dof_buffer_); - inst_.motion_blur.render(render_view_new_, &input_tx, &output_tx); + inst_.depth_of_field.render(render_view_, &input_tx, &output_tx, dof_buffer_); + inst_.motion_blur.render(render_view_, &input_tx, &output_tx); return input_tx; } void ShadingView::update_view() { - float4x4 viewmat, winmat; - DRW_view_viewmat_get(main_view_, viewmat.ptr(), false); - DRW_view_winmat_get(main_view_, winmat.ptr(), false); + float4x4 viewmat = main_view_.viewmat(); + float4x4 winmat = main_view_.winmat(); /* TODO(fclem): Mixed-resolution rendering: We need to make sure we render with exactly the same * distances between pixels to line up render samples and target pixels. @@ -213,14 +195,12 @@ void ShadingView::update_view() jitter *= 2.0f; window_translate_m4(winmat.ptr(), winmat.ptr(), UNPACK2(jitter)); - DRW_view_update_sub(sub_view_, viewmat.ptr(), winmat.ptr()); + jitter_view_.sync(winmat, winmat); /* FIXME(fclem): The offset may be noticeably large and the culling might make object pop * out of the blurring radius. To fix this, use custom enlarged culling matrix. */ inst_.depth_of_field.jitter_apply(winmat, viewmat); - DRW_view_update_sub(render_view_, viewmat.ptr(), winmat.ptr()); - - render_view_new_.sync(viewmat, winmat); + render_view_.sync(viewmat, winmat); } /** \} */ diff --git a/source/blender/draw/engines/eevee_next/eevee_view.hh b/source/blender/draw/engines/eevee_next/eevee_view.hh index 5305f9753e6..c45151c90f1 100644 --- a/source/blender/draw/engines/eevee_next/eevee_view.hh +++ b/source/blender/draw/engines/eevee_next/eevee_view.hh @@ -52,13 +52,12 @@ class ShadingView { TextureFromPool postfx_tx_; /** Main views is created from the camera (or is from the viewport). It is not jittered. */ - DRWView *main_view_ = nullptr; + View main_view_ = {"main_view"}; /** Sub views is jittered versions or the main views. This allows jitter updates without trashing * the visibility culling cache. */ - DRWView *sub_view_ = nullptr; - /** Same as sub_view_ but has Depth Of Field jitter applied. */ - DRWView *render_view_ = nullptr; - View render_view_new_; + View jitter_view_ = {"jitter_view"}; + /** Same as jitter_view_ but has Depth Of Field jitter applied. */ + View render_view_; /** Render size of the view. Can change between scene sample eval. */ int2 extent_ = {-1, -1}; @@ -67,7 +66,7 @@ class ShadingView { public: ShadingView(Instance &inst, const char *name, const float4x4 &face_matrix) - : inst_(inst), name_(name), face_matrix_(face_matrix), render_view_new_(name){}; + : inst_(inst), name_(name), face_matrix_(face_matrix), render_view_(name){}; ~ShadingView(){};