[Bf-blender-cvs] [9f3010e1c07] master: DRW: DRWView: Finish refactor

Clément Foucault noreply at git.blender.org
Wed May 22 13:30:47 CEST 2019


Commit: 9f3010e1c071fa7b99916b3d960e04855279a899
Author: Clément Foucault
Date:   Tue May 21 21:29:25 2019 +0200
Branches: master
https://developer.blender.org/rB9f3010e1c071fa7b99916b3d960e04855279a899

DRW: DRWView: Finish refactor

===================================================================

M	source/blender/draw/engines/eevee/eevee_render.c
M	source/blender/draw/engines/eevee/eevee_screen_raytrace.c
M	source/blender/draw/engines/eevee/eevee_volumes.c
M	source/blender/draw/engines/gpencil/gpencil_render.c
M	source/blender/draw/engines/workbench/workbench_studiolight.c
M	source/blender/draw/intern/DRW_render.h
M	source/blender/draw/intern/draw_manager.c
M	source/blender/draw/intern/draw_manager_data.c
M	source/blender/draw/intern/draw_manager_exec.c

===================================================================

diff --git a/source/blender/draw/engines/eevee/eevee_render.c b/source/blender/draw/engines/eevee/eevee_render.c
index 5141b3716f7..df587424ba2 100644
--- a/source/blender/draw/engines/eevee/eevee_render.c
+++ b/source/blender/draw/engines/eevee/eevee_render.c
@@ -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);
diff --git a/source/blender/draw/engines/eevee/eevee_screen_raytrace.c b/source/blender/draw/engines/eevee/eevee_screen_raytrace.c
index ca6c9cdbe94..33a8383fe90 100644
--- a/source/blender/draw/engines/eevee/eevee_screen_raytrace.c
+++ b/source/blender/draw/engines/eevee/eevee_screen_raytrace.c
@@ -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();
diff --git a/source/blender/draw/engines/eevee/eevee_volumes.c b/source/blender/draw/engines/eevee/eevee_volumes.c
index e4d95ee9efb..59f144b1faf 100644
--- a/source/blender/draw/engines/eevee/eevee_volumes.c
+++ b/source/blender/draw/engines/eevee/eevee_volumes.c
@@ -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);
 
diff --git a/source/blender/draw/engines/gpencil/gpencil_render.c b/source/blender/draw/engines/gpencil/gpencil_render.c
index e4d099fbfdb..8f3382fc138 100644
--- a/source/blender/draw/engines/gpencil/gpencil_render.c
+++ b/source/blender/draw/engines/gpencil/gpencil_render.c
@@ -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);
 
diff --git a/source/blender/draw/engines/workbench/workbench_studiolight.c b/source/blender/draw/engines/workbench/workbench_studiolight.c
index fbe538c5994..944bca73993 100644
--- a/source/blender/draw/engines/workbench/workbench_studiolight.c
+++ b/source/blender/draw/engines/workbench/workbench_studiolight.c
@@ -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]);
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

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list