Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2022-10-07 13:21:30 +0300
committerClément Foucault <foucault.clem@gmail.com>2022-10-07 13:43:10 +0300
commit6fd557e2c289bd37e46f855c4ec5b96ec8c30291 (patch)
tree9fcdd84a32d98a473ea1aa3079011076e11442a4
parentf8384485fcd80aefbb0c2806639f14b1d2cb7a5c (diff)
DRW: Remove viewport_size from DRWView
This is part of the effor to simplify the View struct in order to implement multiview rendering.
-rw-r--r--source/blender/draw/intern/draw_debug.cc3
-rw-r--r--source/blender/draw/intern/draw_manager_exec.c14
-rw-r--r--source/blender/draw/intern/draw_shader_shared.h3
-rw-r--r--source/blender/draw/intern/draw_view.cc12
-rw-r--r--source/blender/draw/intern/shaders/draw_debug_info.hh1
-rw-r--r--source/blender/draw/intern/shaders/draw_debug_print_display_vert.glsl3
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;
}