From 126d485b837d317ead313c46bcd6545d03391020 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Fri, 7 Oct 2022 00:16:25 +0200 Subject: DRW: Remove screen_vecs These were only a normalized copy of the XY axes of the inverse viewmat. But since the viewmatrix is always normalized we can use it directly. --- source/blender/draw/engines/eevee/eevee_lightprobes.c | 2 -- .../engines/eevee/shaders/lightprobe_cube_display_vert.glsl | 4 ++-- .../engines/eevee/shaders/lightprobe_grid_display_vert.glsl | 4 ++-- .../overlay/shaders/overlay_edit_mesh_skin_root_vert.glsl | 4 ++-- .../engines/overlay/shaders/overlay_extra_groundline_vert.glsl | 2 +- .../draw/engines/overlay/shaders/overlay_extra_vert.glsl | 4 ++-- .../draw/engines/overlay/shaders/overlay_grid_frag.glsl | 4 ++-- .../draw/engines/overlay/shaders/overlay_particle_vert.glsl | 2 +- source/blender/draw/intern/DRW_render.h | 1 - source/blender/draw/intern/draw_common.c | 5 ----- source/blender/draw/intern/draw_common_shader_shared.h | 4 +--- source/blender/draw/intern/draw_manager.c | 10 ---------- source/blender/draw/intern/draw_manager.h | 1 - source/blender/draw/intern/shaders/common_globals_lib.glsl | 1 - 14 files changed, 13 insertions(+), 35 deletions(-) diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c index 6538821b671..942ab5502c7 100644 --- a/source/blender/draw/engines/eevee/eevee_lightprobes.c +++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c @@ -329,7 +329,6 @@ void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedat DRW_shgroup_uniform_texture_ref(grp, "probeCubes", &lcache->cube_tx.tex); DRW_shgroup_uniform_block(grp, "probe_block", sldata->probe_ubo); DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo); - DRW_shgroup_uniform_vec3(grp, "screen_vecs", DRW_viewport_screenvecs_get(), 2); DRW_shgroup_uniform_float_copy( grp, "sphere_size", scene_eval->eevee.gi_cubemap_draw_size * 0.5f); /* TODO(fclem): get rid of those UBO. */ @@ -353,7 +352,6 @@ void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedat DRW_shgroup_uniform_vec3(shgrp, "increment_x", egrid->increment_x, 1); DRW_shgroup_uniform_vec3(shgrp, "increment_y", egrid->increment_y, 1); DRW_shgroup_uniform_vec3(shgrp, "increment_z", egrid->increment_z, 1); - DRW_shgroup_uniform_vec3(shgrp, "screen_vecs", DRW_viewport_screenvecs_get(), 2); DRW_shgroup_uniform_texture_ref(shgrp, "irradianceGrid", &lcache->grid_tx.tex); DRW_shgroup_uniform_float_copy( shgrp, "sphere_size", scene_eval->eevee.gi_irradiance_draw_size * 0.5f); diff --git a/source/blender/draw/engines/eevee/shaders/lightprobe_cube_display_vert.glsl b/source/blender/draw/engines/eevee/shaders/lightprobe_cube_display_vert.glsl index 1c32a5975be..d1da9873228 100644 --- a/source/blender/draw/engines/eevee/shaders/lightprobe_cube_display_vert.glsl +++ b/source/blender/draw/engines/eevee/shaders/lightprobe_cube_display_vert.glsl @@ -15,7 +15,6 @@ layout(std140) uniform probe_block }; uniform float sphere_size; -uniform vec3 screen_vecs[2]; flat out int pid; out vec2 quadCoord; @@ -36,7 +35,8 @@ void main() quadCoord = pos[vert_id]; vec3 ws_location = probes_data[pid].position_type.xyz; - vec3 screen_pos = screen_vecs[0] * quadCoord.x + screen_vecs[1] * quadCoord.y; + vec3 screen_pos = ViewMatrixInverse[0].xyz * quadCoord.x + + ViewMatrixInverse[1].xyz * quadCoord.y; ws_location += screen_pos * sphere_size; gl_Position = ProjectionMatrix * (ViewMatrix * vec4(ws_location, 1.0)); diff --git a/source/blender/draw/engines/eevee/shaders/lightprobe_grid_display_vert.glsl b/source/blender/draw/engines/eevee/shaders/lightprobe_grid_display_vert.glsl index c296d901880..b22d63de29e 100644 --- a/source/blender/draw/engines/eevee/shaders/lightprobe_grid_display_vert.glsl +++ b/source/blender/draw/engines/eevee/shaders/lightprobe_grid_display_vert.glsl @@ -8,7 +8,6 @@ uniform vec3 corner; uniform vec3 increment_x; uniform vec3 increment_y; uniform vec3 increment_z; -uniform vec3 screen_vecs[2]; flat out int cellOffset; out vec2 quadCoord; @@ -39,7 +38,8 @@ void main() increment_z * ls_cell_location.z); quadCoord = pos[vert_id]; - vec3 screen_pos = screen_vecs[0] * quadCoord.x + screen_vecs[1] * quadCoord.y; + vec3 screen_pos = ViewMatrixInverse[0].xyz * quadCoord.x + + ViewMatrixInverse[1].xyz * quadCoord.y; ws_cell_location += screen_pos * sphere_size; gl_Position = ProjectionMatrix * (ViewMatrix * vec4(ws_cell_location, 1.0)); diff --git a/source/blender/draw/engines/overlay/shaders/overlay_edit_mesh_skin_root_vert.glsl b/source/blender/draw/engines/overlay/shaders/overlay_edit_mesh_skin_root_vert.glsl index caca123a0c2..ce1ee8ca448 100644 --- a/source/blender/draw/engines/overlay/shaders/overlay_edit_mesh_skin_root_vert.glsl +++ b/source/blender/draw/engines/overlay/shaders/overlay_edit_mesh_skin_root_vert.glsl @@ -5,8 +5,8 @@ void main() { mat3 imat = mat3(ModelMatrixInverse); - vec3 right = normalize(imat * screenVecs[0].xyz); - vec3 up = normalize(imat * screenVecs[1].xyz); + vec3 right = normalize(imat * ViewMatrixInverse[0].xyz); + vec3 up = normalize(imat * ViewMatrixInverse[1].xyz); vec3 screen_pos = (right * pos.x + up * pos.z) * size; vec4 pos_4d = ModelMatrix * vec4(local_pos + screen_pos, 1.0); gl_Position = drw_view.winmat * (drw_view.viewmat * pos_4d); diff --git a/source/blender/draw/engines/overlay/shaders/overlay_extra_groundline_vert.glsl b/source/blender/draw/engines/overlay/shaders/overlay_extra_groundline_vert.glsl index ff7aae523e7..bc8ba710d3b 100644 --- a/source/blender/draw/engines/overlay/shaders/overlay_extra_groundline_vert.glsl +++ b/source/blender/draw/engines/overlay/shaders/overlay_extra_groundline_vert.glsl @@ -7,7 +7,7 @@ void main() finalColor = colorLight; /* Relative to DPI scaling. Have constant screen size. */ - vec3 screen_pos = screenVecs[0].xyz * pos.x + screenVecs[1].xyz * pos.y; + vec3 screen_pos = ViewMatrixInverse[0].xyz * pos.x + ViewMatrixInverse[1].xyz * pos.y; vec3 p = inst_pos; p.z *= (pos.z == 0.0) ? 0.0 : 1.0; float screen_size = mul_project_m4_v3_zfac(p) * sizePixel; diff --git a/source/blender/draw/engines/overlay/shaders/overlay_extra_vert.glsl b/source/blender/draw/engines/overlay/shaders/overlay_extra_vert.glsl index acaf04219c0..269da0fd196 100644 --- a/source/blender/draw/engines/overlay/shaders/overlay_extra_vert.glsl +++ b/source/blender/draw/engines/overlay/shaders/overlay_extra_vert.glsl @@ -171,14 +171,14 @@ void main() vec3 world_pos; if ((vclass & VCLASS_SCREENSPACE) != 0) { /* Relative to DPI scaling. Have constant screen size. */ - vec3 screen_pos = screenVecs[0].xyz * vpos.x + screenVecs[1].xyz * vpos.y; + vec3 screen_pos = ViewMatrixInverse[0].xyz * vpos.x + ViewMatrixInverse[1].xyz * vpos.y; vec3 p = (obmat * vec4(vofs, 1.0)).xyz; float screen_size = mul_project_m4_v3_zfac(p) * sizePixel; world_pos = p + screen_pos * screen_size; } else if ((vclass & VCLASS_SCREENALIGNED) != 0) { /* World sized, camera facing geometry. */ - vec3 screen_pos = screenVecs[0].xyz * vpos.x + screenVecs[1].xyz * vpos.y; + vec3 screen_pos = ViewMatrixInverse[0].xyz * vpos.x + ViewMatrixInverse[1].xyz * vpos.y; world_pos = (obmat * vec4(vofs, 1.0)).xyz + screen_pos; } else { diff --git a/source/blender/draw/engines/overlay/shaders/overlay_grid_frag.glsl b/source/blender/draw/engines/overlay/shaders/overlay_grid_frag.glsl index 2c81966fe50..b401c3e7b2e 100644 --- a/source/blender/draw/engines/overlay/shaders/overlay_grid_frag.glsl +++ b/source/blender/draw/engines/overlay/shaders/overlay_grid_frag.glsl @@ -95,9 +95,9 @@ void main() } if (flag_test(grid_flag, SHOW_GRID)) { - /* Using `max(dot(dFdxPos, screenVecs[0]), dot(dFdyPos, screenVecs[1]))` + /* Using `max(dot(dFdxPos, ViewMatrixInverse[0]), dot(dFdyPos, ViewMatrixInverse[1]))` * would be more accurate, but not really necessary. */ - float grid_res = dot(dFdxPos, screenVecs[0].xyz); + float grid_res = dot(dFdxPos, ViewMatrixInverse[0].xyz); /* The grid begins to appear when it comprises 4 pixels. */ grid_res *= 4; diff --git a/source/blender/draw/engines/overlay/shaders/overlay_particle_vert.glsl b/source/blender/draw/engines/overlay/shaders/overlay_particle_vert.glsl index 48038d0ca17..2c2d3199e45 100644 --- a/source/blender/draw/engines/overlay/shaders/overlay_particle_vert.glsl +++ b/source/blender/draw/engines/overlay/shaders/overlay_particle_vert.glsl @@ -28,7 +28,7 @@ void main() if ((vclass & VCLASS_SCREENALIGNED) != 0) { /* World sized, camera facing geometry. */ - world_pos += (screenVecs[0].xyz * pos.x + screenVecs[1].xyz * pos.y) * draw_size; + world_pos += (ViewMatrixInverse[0].xyz * pos.x + ViewMatrixInverse[1].xyz * pos.y) * draw_size; } else { world_pos += rotate(pos, part_rot) * draw_size; diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h index c65938fd8ce..b9444c58191 100644 --- a/source/blender/draw/intern/DRW_render.h +++ b/source/blender/draw/intern/DRW_render.h @@ -738,7 +738,6 @@ void DRW_culling_frustum_planes_get(const DRWView *view, float planes[6][4]); const float *DRW_viewport_size_get(void); const float *DRW_viewport_invert_size_get(void); -const float *DRW_viewport_screenvecs_get(void); const float *DRW_viewport_pixelsize_get(void); struct DefaultFramebufferList *DRW_viewport_framebuffer_list_get(void); diff --git a/source/blender/draw/intern/draw_common.c b/source/blender/draw/intern/draw_common.c index c1b4c3c1f81..73a93a10582 100644 --- a/source/blender/draw/intern/draw_common.c +++ b/source/blender/draw/intern/draw_common.c @@ -178,11 +178,6 @@ void DRW_globals_update(void) gb->size_edge = U.pixelsize * (1.0f / 2.0f); /* TODO: Theme. */ gb->size_edge_fix = U.pixelsize * (0.5f + 2.0f * (2.0f * (gb->size_edge * (float)M_SQRT1_2))); - const float(*screen_vecs)[3] = (float(*)[3])DRW_viewport_screenvecs_get(); - for (int i = 0; i < 2; i++) { - copy_v3_v3(gb->screen_vecs[i], screen_vecs[i]); - } - gb->pixel_fac = *DRW_viewport_pixelsize_get(); /* Deprecated, use drw_view.viewport_size instead */ diff --git a/source/blender/draw/intern/draw_common_shader_shared.h b/source/blender/draw/intern/draw_common_shader_shared.h index 57cb7880ce6..8d412fadd82 100644 --- a/source/blender/draw/intern/draw_common_shader_shared.h +++ b/source/blender/draw/intern/draw_common_shader_shared.h @@ -124,8 +124,7 @@ struct GlobalsUboStorage { float4 color_uv_shadow; /* NOTE: Put all color before #UBO_LAST_COLOR. */ - float4 screen_vecs[2]; /* Padded as vec4. */ - float4 size_viewport; /* Packed as vec4. */ + float4 size_viewport; /* Packed as vec4. */ /* Pack individual float at the end of the buffer to avoid alignment errors */ float size_pixel, pixel_fac; @@ -228,7 +227,6 @@ BLI_STATIC_ASSERT_ALIGN(GlobalsUboStorage, 16) # define colorFaceBack globalsBlock.color_face_back # define colorFaceFront globalsBlock.color_face_front # define colorUVShadow globalsBlock.color_uv_shadow -# define screenVecs globalsBlock.screen_vecs # define sizeViewport globalsBlock.size_viewport.xy # define sizePixel globalsBlock.size_pixel # define pixelFac globalsBlock.pixel_fac diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 83dc08f2f23..538fc0bfeb2 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -298,10 +298,6 @@ const float *DRW_viewport_invert_size_get(void) return DST.inv_size; } -const float *DRW_viewport_screenvecs_get(void) -{ - return &DST.screenvecs[0][0]; -} const float *DRW_viewport_pixelsize_get(void) { @@ -561,9 +557,6 @@ static void drw_manager_init(DRWManager *dst, GPUViewport *viewport, const int s draw_unit_state_create(); if (rv3d != NULL) { - normalize_v3_v3(dst->screenvecs[0], rv3d->viewinv[0]); - normalize_v3_v3(dst->screenvecs[1], rv3d->viewinv[1]); - dst->pixsize = rv3d->pixsize; dst->view_default = DRW_view_create(rv3d->viewmat, rv3d->winmat, NULL, NULL, NULL); @@ -594,9 +587,6 @@ static void drw_manager_init(DRWManager *dst, GPUViewport *viewport, const int s dst->view_previous = NULL; } else { - zero_v3(dst->screenvecs[0]); - zero_v3(dst->screenvecs[1]); - dst->pixsize = 1.0f; dst->view_default = NULL; dst->view_active = NULL; diff --git a/source/blender/draw/intern/draw_manager.h b/source/blender/draw/intern/draw_manager.h index f9baf3994ae..4124e7742b7 100644 --- a/source/blender/draw/intern/draw_manager.h +++ b/source/blender/draw/intern/draw_manager.h @@ -598,7 +598,6 @@ typedef struct DRWManager { struct GPUFrameBuffer *default_framebuffer; float size[2]; float inv_size[2]; - float screenvecs[2][3]; float pixsize; struct { diff --git a/source/blender/draw/intern/shaders/common_globals_lib.glsl b/source/blender/draw/intern/shaders/common_globals_lib.glsl index a8931292064..495a2e2c3d4 100644 --- a/source/blender/draw/intern/shaders/common_globals_lib.glsl +++ b/source/blender/draw/intern/shaders/common_globals_lib.glsl @@ -107,7 +107,6 @@ layout(std140) uniform globalsBlock vec4 colorUVShadow; - vec4 screenVecs[2]; vec4 sizeViewport; /* Inverted size in zw. */ float sizePixel; /* This one is for DPI scaling. */ -- cgit v1.2.3