From 9f3010e1c071fa7b99916b3d960e04855279a899 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Tue, 21 May 2019 21:29:25 +0200 Subject: DRW: DRWView: Finish refactor --- source/blender/draw/intern/DRW_render.h | 47 +++----------- source/blender/draw/intern/draw_manager.c | 88 +------------------------- source/blender/draw/intern/draw_manager_data.c | 12 ++-- source/blender/draw/intern/draw_manager_exec.c | 10 +-- 4 files changed, 23 insertions(+), 134 deletions(-) (limited to 'source/blender/draw/intern') diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h index 378bb23188c..bf24708a0ec 100644 --- a/source/blender/draw/intern/DRW_render.h +++ b/source/blender/draw/intern/DRW_render.h @@ -578,50 +578,21 @@ bool DRW_culling_box_test(const DRWView *view, const BoundBox *bbox); bool DRW_culling_plane_test(const DRWView *view, const float plane[4]); /* Viewport */ -typedef enum { - /* keep in sync with the union struct DRWMatrixState. */ - DRW_MAT_PERS = 0, - DRW_MAT_PERSINV, - DRW_MAT_VIEW, - DRW_MAT_VIEWINV, - DRW_MAT_WIN, - DRW_MAT_WININV, - - DRW_MAT_COUNT, // Don't use this. -} DRWViewportMatrixType; typedef struct DRWMatrixState { - union { - float mat[DRW_MAT_COUNT][4][4]; - struct { - /* keep in sync with the enum DRWViewportMatrixType. */ - float persmat[4][4]; - float persinv[4][4]; - float viewmat[4][4]; - float viewinv[4][4]; - float winmat[4][4]; - float wininv[4][4]; - }; - }; + /* keep in sync with the enum DRWViewportMatrixType. */ + float persmat[4][4]; + float persinv[4][4]; + float viewmat[4][4]; + float viewinv[4][4]; + float winmat[4][4]; + float wininv[4][4]; } DRWMatrixState; -void DRW_viewport_matrix_get(float mat[4][4], DRWViewportMatrixType type); -void DRW_viewport_matrix_get_all(DRWMatrixState *state); -void DRW_viewport_matrix_override_set(const float mat[4][4], DRWViewportMatrixType type); -void DRW_viewport_matrix_override_set_all(DRWMatrixState *state); -void DRW_viewport_matrix_override_unset(DRWViewportMatrixType type); -void DRW_viewport_matrix_override_unset_all(void); - -/* These are in view-space so negative if in perspective. - * Extract near and far clip distance from the projection matrix. */ -float DRW_viewport_near_distance_get(void); -float DRW_viewport_far_distance_get(void); - 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); -bool DRW_viewport_is_persp_get(void); struct DefaultFramebufferList *DRW_viewport_framebuffer_list_get(void); struct DefaultTextureList *DRW_viewport_texture_list_get(void); @@ -687,8 +658,8 @@ void DRW_state_lock(DRWState state); void DRW_state_clip_planes_len_set(uint plane_len); -void DRW_culling_frustum_corners_get(BoundBox *corners); -void DRW_culling_frustum_planes_get(float planes[6][4]); +void DRW_culling_frustum_corners_get(const DRWView *view, BoundBox *corners); +void DRW_culling_frustum_planes_get(const DRWView *view, float planes[6][4]); /* Selection */ void DRW_select_load_id(uint id); diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 5f0fb582c34..a86b8e9d508 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -661,8 +661,7 @@ static void drw_viewport_var_init(void) DRW_view_clip_planes_set(DST.view_default, rv3d->clip, plane_len); } - /* TODO should be set to NULL. */ - DST.view_active = DRW_view_create(rv3d->viewmat, rv3d->winmat, NULL, NULL, NULL); + DST.view_active = DST.view_default; } else { zero_v3(DST.screenvecs[0]); @@ -670,11 +669,7 @@ static void drw_viewport_var_init(void) DST.pixsize = 1.0f; DST.view_default = NULL; - - /* TODO should be set to NULL. */ - float mat[4][4]; - unit_m4(mat); - DST.view_active = DRW_view_create(mat, mat, NULL, NULL, NULL); + DST.view_active = NULL; } /* fclem: Is this still needed ? */ @@ -692,85 +687,6 @@ static void drw_viewport_var_init(void) memset(DST.object_instance_data, 0x0, sizeof(DST.object_instance_data)); } -/* TODO remove all of the DRW_viewport_matrix_* functions. */ - -void DRW_viewport_matrix_get(float mat[4][4], DRWViewportMatrixType type) -{ - BLI_assert(type >= 0 && type < DRW_MAT_COUNT); - /* Can't use this in render mode. */ - // BLI_assert(((DST.override_mat & (1 << type)) != 0) || DST.draw_ctx.rv3d != NULL); - - copy_m4_m4(mat, DST.view_active->storage.matstate.mat[type]); -} - -void DRW_viewport_matrix_get_all(DRWMatrixState *state) -{ - memcpy(state, DST.view_active->storage.matstate.mat, sizeof(DRWMatrixState)); -} - -void DRW_viewport_matrix_override_set(const float mat[4][4], DRWViewportMatrixType type) -{ - BLI_assert(type < DRW_MAT_COUNT); - copy_m4_m4(DST.view_active->storage.matstate.mat[type], mat); - DST.view_active->is_dirty = true; -} - -void DRW_viewport_matrix_override_unset(DRWViewportMatrixType type) -{ - BLI_assert(type < DRW_MAT_COUNT); - copy_m4_m4(DST.view_active->storage.matstate.mat[type], - DST.view_default->storage.matstate.mat[type]); - DST.view_active->is_dirty = true; -} - -void DRW_viewport_matrix_override_set_all(DRWMatrixState *state) -{ - memcpy(DST.view_active->storage.matstate.mat, state, sizeof(DRWMatrixState)); - DST.view_active->is_dirty = true; -} - -void DRW_viewport_matrix_override_unset_all(void) -{ - DRW_viewport_matrix_override_set_all(&DST.view_default->storage.matstate); -} - -bool DRW_viewport_is_persp_get(void) -{ - RegionView3D *rv3d = DST.draw_ctx.rv3d; - if (rv3d) { - return rv3d->is_persp; - } - else { - return DST.view_active->storage.matstate.winmat[3][3] == 0.0f; - } -} - -float DRW_viewport_near_distance_get(void) -{ - float projmat[4][4]; - DRW_viewport_matrix_get(projmat, DRW_MAT_WIN); - - if (DRW_viewport_is_persp_get()) { - return -projmat[3][2] / (projmat[2][2] - 1.0f); - } - else { - return -(projmat[3][2] + 1.0f) / projmat[2][2]; - } -} - -float DRW_viewport_far_distance_get(void) -{ - float projmat[4][4]; - DRW_viewport_matrix_get(projmat, DRW_MAT_WIN); - - if (DRW_viewport_is_persp_get()) { - return -projmat[3][2] / (projmat[2][2] + 1.0f); - } - else { - return -(projmat[3][2] - 1.0f) / projmat[2][2]; - } -} - DefaultFramebufferList *DRW_viewport_framebuffer_list_get(void) { return GPU_viewport_framebuffer_list_get(DST.viewport); diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c index 4e8544f14fd..7981f1367dd 100644 --- a/source/blender/draw/intern/draw_manager_data.c +++ b/source/blender/draw/intern/draw_manager_data.c @@ -1488,13 +1488,13 @@ void DRW_view_frustum_planes_get(const DRWView *view, float planes[6][4]) bool DRW_view_is_persp_get(const DRWView *view) { - view = (view) ? view : DST.view_active; + view = (view) ? view : DST.view_default; return view->storage.matstate.winmat[3][3] == 0.0f; } float DRW_view_near_distance_get(const DRWView *view) { - view = (view) ? view : DST.view_active; + view = (view) ? view : DST.view_default; const float(*projmat)[4] = view->storage.matstate.winmat; if (DRW_view_is_persp_get(view)) { @@ -1507,7 +1507,7 @@ float DRW_view_near_distance_get(const DRWView *view) float DRW_view_far_distance_get(const DRWView *view) { - view = (view) ? view : DST.view_active; + view = (view) ? view : DST.view_default; const float(*projmat)[4] = view->storage.matstate.winmat; if (DRW_view_is_persp_get(view)) { @@ -1520,21 +1520,21 @@ float DRW_view_far_distance_get(const DRWView *view) void DRW_view_viewmat_get(const DRWView *view, float mat[4][4], bool inverse) { - view = (view) ? view : DST.view_active; + view = (view) ? view : DST.view_default; const DRWMatrixState *state = &view->storage.matstate; copy_m4_m4(mat, (inverse) ? state->viewinv : state->viewmat); } void DRW_view_winmat_get(const DRWView *view, float mat[4][4], bool inverse) { - view = (view) ? view : DST.view_active; + view = (view) ? view : DST.view_default; const DRWMatrixState *state = &view->storage.matstate; copy_m4_m4(mat, (inverse) ? state->wininv : state->winmat); } void DRW_view_persmat_get(const DRWView *view, float mat[4][4], bool inverse) { - view = (view) ? view : DST.view_active; + view = (view) ? view : DST.view_default; const DRWMatrixState *state = &view->storage.matstate; copy_m4_m4(mat, (inverse) ? state->persinv : state->persmat); } diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c index 36e9244df06..2687d0ea094 100644 --- a/source/blender/draw/intern/draw_manager_exec.c +++ b/source/blender/draw/intern/draw_manager_exec.c @@ -501,14 +501,16 @@ bool DRW_culling_plane_test(const DRWView *view, const float plane[4]) return draw_culling_plane_test(&view->frustum_corners, plane); } -void DRW_culling_frustum_corners_get(BoundBox *corners) +void DRW_culling_frustum_corners_get(const DRWView *view, BoundBox *corners) { - *corners = DST.view_active->frustum_corners; + view = view ? view : DST.view_default; + *corners = view->frustum_corners; } -void DRW_culling_frustum_planes_get(float planes[6][4]) +void DRW_culling_frustum_planes_get(const DRWView *view, float planes[6][4]) { - memcpy(planes, DST.view_active->frustum_planes, sizeof(float) * 6 * 4); + view = view ? view : DST.view_default; + memcpy(planes, view->frustum_planes, sizeof(float) * 6 * 4); } static void draw_compute_culling(DRWView *view) -- cgit v1.2.3