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>2019-05-21 22:29:25 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-05-22 14:29:05 +0300
commit9f3010e1c071fa7b99916b3d960e04855279a899 (patch)
treea8ef67e4d15544918815f8a5a41934f996647c43 /source/blender/draw/intern
parentb3601a4687bb740bb782d7a96fc1920851f6d15e (diff)
DRW: DRWView: Finish refactor
Diffstat (limited to 'source/blender/draw/intern')
-rw-r--r--source/blender/draw/intern/DRW_render.h47
-rw-r--r--source/blender/draw/intern/draw_manager.c88
-rw-r--r--source/blender/draw/intern/draw_manager_data.c12
-rw-r--r--source/blender/draw/intern/draw_manager_exec.c10
4 files changed, 23 insertions, 134 deletions
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)