From 6fd557e2c289bd37e46f855c4ec5b96ec8c30291 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Fri, 7 Oct 2022 12:21:30 +0200 Subject: DRW: Remove viewport_size from DRWView This is part of the effor to simplify the View struct in order to implement multiview rendering. --- source/blender/draw/intern/draw_debug.cc | 3 +++ source/blender/draw/intern/draw_manager_exec.c | 14 +++----------- source/blender/draw/intern/draw_shader_shared.h | 3 --- source/blender/draw/intern/draw_view.cc | 12 ------------ source/blender/draw/intern/shaders/draw_debug_info.hh | 1 + .../draw/intern/shaders/draw_debug_print_display_vert.glsl | 3 +-- 6 files changed, 8 insertions(+), 28 deletions(-) diff --git a/source/blender/draw/intern/draw_debug.cc b/source/blender/draw/intern/draw_debug.cc index 681ca8e36d1..9e0be3d96ae 100644 --- a/source/blender/draw/intern/draw_debug.cc +++ b/source/blender/draw/intern/draw_debug.cc @@ -556,6 +556,9 @@ void DebugDraw::display_prints() GPUShader *shader = DRW_shader_debug_print_display_get(); GPU_batch_set_shader(batch, shader); int slot = GPU_shader_get_builtin_ssbo(shader, GPU_STORAGE_BUFFER_DEBUG_PRINT); + float f_viewport[4]; + GPU_viewport_size_get_f(f_viewport); + GPU_shader_uniform_4fv(shader, "viewport_size", f_viewport); if (gpu_print_buf_used) { GPU_debug_group_begin("GPU"); diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c index 1660239735b..3627b0fbf10 100644 --- a/source/blender/draw/intern/draw_manager_exec.c +++ b/source/blender/draw/intern/draw_manager_exec.c @@ -1146,13 +1146,8 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state) } } -static void drw_update_view(const float viewport_size[2]) +static void drw_update_view(void) { - ViewInfos *storage = &DST.view_active->storage; - copy_v2_v2(storage->viewport_size, viewport_size); - copy_v2_v2(storage->viewport_size_inverse, viewport_size); - invert_v2(storage->viewport_size_inverse); - /* TODO(fclem): update a big UBO and only bind ranges here. */ GPU_uniformbuf_update(G_draw.view_ubo, &DST.view_active->storage); GPU_uniformbuf_update(G_draw.clipping_ubo, &DST.view_active->clip_planes); @@ -1181,11 +1176,8 @@ static void drw_draw_pass_ex(DRWPass *pass, BLI_assert(DST.buffer_finish_called && "DRW_render_instance_buffer_finish had not been called before drawing"); - float viewport[4]; - GPU_viewport_size_get_f(viewport); - if (DST.view_previous != DST.view_active || DST.view_active->is_dirty || - !equals_v2v2(DST.view_active->storage.viewport_size, &viewport[2])) { - drw_update_view(&viewport[2]); + if (DST.view_previous != DST.view_active || DST.view_active->is_dirty) { + drw_update_view(); DST.view_active->is_dirty = false; DST.view_previous = DST.view_active; } diff --git a/source/blender/draw/intern/draw_shader_shared.h b/source/blender/draw/intern/draw_shader_shared.h index 3a5c5db8da3..3d41cbc8511 100644 --- a/source/blender/draw/intern/draw_shader_shared.h +++ b/source/blender/draw/intern/draw_shader_shared.h @@ -67,9 +67,6 @@ struct ViewInfos { float4x4 winmat; float4x4 wininv; - float2 viewport_size; - float2 viewport_size_inverse; - /** For debugging purpose */ /* Mouse pixel. */ int2 mouse_pixel; diff --git a/source/blender/draw/intern/draw_view.cc b/source/blender/draw/intern/draw_view.cc index aa32549de56..89a8826e628 100644 --- a/source/blender/draw/intern/draw_view.cc +++ b/source/blender/draw/intern/draw_view.cc @@ -203,20 +203,8 @@ void View::frustum_culling_sphere_calc(const BoundBox &bbox, BoundSphere &bspher } } -void View::update_viewport_size() -{ - float4 viewport; - GPU_viewport_size_get_f(viewport); - float2 viewport_size = float2(viewport.z, viewport.w); - if (assign_if_different(data_.viewport_size, viewport_size)) { - dirty_ = true; - } -} - void View::bind() { - update_viewport_size(); - if (dirty_) { dirty_ = false; data_.push_update(); diff --git a/source/blender/draw/intern/shaders/draw_debug_info.hh b/source/blender/draw/intern/shaders/draw_debug_info.hh index ce450bb1210..4b5590824ba 100644 --- a/source/blender/draw/intern/shaders/draw_debug_info.hh +++ b/source/blender/draw/intern/shaders/draw_debug_info.hh @@ -21,6 +21,7 @@ GPU_SHADER_CREATE_INFO(draw_debug_print_display) .storage_buf(7, Qualifier::READ, "uint", "drw_debug_print_buf[]") .vertex_out(draw_debug_print_display_iface) .fragment_out(0, Type::VEC4, "out_color") + .push_constant(Type::VEC2, "viewport_size") .vertex_source("draw_debug_print_display_vert.glsl") .fragment_source("draw_debug_print_display_frag.glsl") .additional_info("draw_view"); diff --git a/source/blender/draw/intern/shaders/draw_debug_print_display_vert.glsl b/source/blender/draw/intern/shaders/draw_debug_print_display_vert.glsl index cb379056e2b..57f293cc6e8 100644 --- a/source/blender/draw/intern/shaders/draw_debug_print_display_vert.glsl +++ b/source/blender/draw/intern/shaders/draw_debug_print_display_vert.glsl @@ -23,7 +23,6 @@ void main() float char_size = 16.0; /* Change anchor point to the top left. */ vec2 pos_on_screen = char_size * vec2(col, row) + char_size * 4; - gl_Position = vec4( - pos_on_screen * drw_view.viewport_size_inverse * vec2(2.0, -2.0) - vec2(1.0, -1.0), 0, 1); + gl_Position = vec4((pos_on_screen / viewport_size) * vec2(2.0, -2.0) - vec2(1.0, -1.0), 0, 1); gl_PointSize = char_size; } -- cgit v1.2.3