DRW: DRWView: Finish refactor
authorClément Foucault <foucault.clem@gmail.com>
Tue, 21 May 2019 19:29:25 +0000 (21:29 +0200)
committerClément Foucault <foucault.clem@gmail.com>
Wed, 22 May 2019 11:29:05 +0000 (13:29 +0200)
source/blender/draw/engines/eevee/eevee_render.c
source/blender/draw/engines/eevee/eevee_screen_raytrace.c
source/blender/draw/engines/eevee/eevee_volumes.c
source/blender/draw/engines/gpencil/gpencil_render.c
source/blender/draw/engines/workbench/workbench_studiolight.c
source/blender/draw/intern/DRW_render.h
source/blender/draw/intern/draw_manager.c
source/blender/draw/intern/draw_manager_data.c
source/blender/draw/intern/draw_manager_exec.c

index 5141b37..df58742 100644 (file)
@@ -350,7 +350,7 @@ static void eevee_render_result_z(RenderLayer *rl,
                                BLI_rcti_size_y(rect),
                                rp->rect);
 
-    bool is_persp = DRW_viewport_is_persp_get();
+    bool is_persp = DRW_view_is_persp_get(NULL);
 
     float viewmat[4][4];
     DRW_view_viewmat_get(NULL, viewmat, false);
index ca6c9cd..33a8383 100644 (file)
@@ -127,7 +127,7 @@ int EEVEE_screen_raytrace_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
           &fbl->refract_fb, {GPU_ATTACHMENT_NONE, GPU_ATTACHMENT_TEXTURE(txl->refract_color)});
     }
 
-    const bool is_persp = DRW_viewport_is_persp_get();
+    const bool is_persp = DRW_view_is_persp_get(NULL);
     if (effects->ssr_was_persp != is_persp) {
       effects->ssr_was_persp = is_persp;
       DRW_viewport_request_redraw();
index e4d95ee..59f144b 100644 (file)
@@ -246,7 +246,7 @@ void EEVEE_volumes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
   DRW_view_winmat_get(NULL, invproj, true);
   EEVEE_update_viewvecs(invproj, winmat, sldata->common_data.view_vecs);
 
-  if (DRW_viewport_is_persp_get()) {
+  if (DRW_view_is_persp_get(NULL)) {
     float sample_distribution = scene_eval->eevee.volumetric_sample_distribution;
     sample_distribution = 4.0f * (1.00001f - sample_distribution);
 
index e4d099f..8f3382f 100644 (file)
@@ -207,7 +207,7 @@ static void GPENCIL_render_result_z(struct RenderLayer *rl,
                                BLI_rcti_size_y(rect),
                                rp->rect);
 
-    bool is_persp = DRW_viewport_is_persp_get();
+    bool is_persp = DRW_view_is_persp_get(NULL);
 
     GPENCIL_render_update_vecs(vedata);
 
index fbe538c..944bca7 100644 (file)
@@ -165,12 +165,12 @@ void studiolight_update_light(WORKBENCH_PrivateData *wpd, const float light_dire
   }
 
   float planes[6][4];
-  DRW_culling_frustum_planes_get(planes);
+  DRW_culling_frustum_planes_get(NULL, planes);
   /* we only need the far plane. */
   copy_v4_v4(wpd->shadow_far_plane, planes[2]);
 
   BoundBox frustum_corners;
-  DRW_culling_frustum_corners_get(&frustum_corners);
+  DRW_culling_frustum_corners_get(NULL, &frustum_corners);
 
   mul_v3_mat3_m4v3(wpd->shadow_near_corners[0], wpd->shadow_inv, frustum_corners.vec[0]);
   mul_v3_mat3_m4v3(wpd->shadow_near_corners[1], wpd->shadow_inv, frustum_corners.vec[3]);
index 378bb23..bf24708 100644 (file)
@@ -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);
index 5f0fb58..a86b8e9 100644 (file)
@@ -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);
index 4e8544f..7981f13 100644 (file)
@@ -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);
 }
index 36e9244..2687d0e 100644 (file)
@@ -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)