DRW: Remove some usage of DRW_viewport_matrix_get
authorClément Foucault <foucault.clem@gmail.com>
Mon, 20 May 2019 17:35:20 +0000 (19:35 +0200)
committerClément Foucault <foucault.clem@gmail.com>
Wed, 22 May 2019 11:29:04 +0000 (13:29 +0200)
source/blender/draw/engines/external/external_engine.c
source/blender/draw/engines/workbench/workbench_studiolight.c
source/blender/draw/engines/workbench/workbench_volume.c
source/blender/draw/intern/draw_common.c
source/blender/draw/modes/object_mode.c
source/blender/draw/modes/overlay_mode.c

index 1223e31..7e03ce5 100644 (file)
@@ -90,8 +90,7 @@ typedef struct EXTERNAL_PrivateData {
   bool update_depth;
   bool view_updated;
 
-  float last_mat[4][4];
-  float curr_mat[4][4];
+  float last_persmat[4][4];
 } EXTERNAL_PrivateData; /* Transient data */
 
 /* Functions */
@@ -126,13 +125,11 @@ static void external_engine_init(void *vedata)
   }
 
   {
-    float view[4][4];
-    float win[4][4];
-    DRW_viewport_matrix_get(view, DRW_MAT_VIEW);
-    DRW_viewport_matrix_get(win, DRW_MAT_WIN);
-    mul_m4_m4m4(stl->g_data->curr_mat, view, win);
-    if (!equals_m4m4(stl->g_data->curr_mat, stl->g_data->last_mat)) {
+    float persmat[4][4];
+    DRW_view_persmat_get(NULL, persmat, false);
+    if (!equals_m4m4(persmat, stl->g_data->last_persmat)) {
       stl->g_data->update_depth = true;
+      copy_m4_m4(stl->g_data->last_persmat, persmat);
     }
   }
 }
@@ -270,8 +267,6 @@ static void external_draw_scene(void *vedata)
     // copy tmp buffer to default
     GPU_framebuffer_blit(fbl->depth_buffer_fb, 0, dfbl->depth_only_fb, 0, GPU_DEPTH_BIT);
   }
-
-  copy_m4_m4(stl->g_data->last_mat, stl->g_data->curr_mat);
 }
 
 static void external_view_update(void *vedata)
index 3fc83fe..af07a81 100644 (file)
@@ -32,7 +32,7 @@ void studiolight_update_world(WORKBENCH_PrivateData *wpd,
                               WORKBENCH_UBO_World *wd)
 {
   float view_matrix[4][4], rot_matrix[4][4];
-  DRW_viewport_matrix_get(view_matrix, DRW_MAT_VIEW);
+  DRW_view_viewmat_get(NULL, view_matrix, false);
 
   if (USE_WORLD_ORIENTATION(wpd)) {
     axis_angle_to_mat4_single(rot_matrix, 'Z', -wpd->shading.studiolight_rot_z);
index 1620584..2b5fc8c 100644 (file)
@@ -154,7 +154,7 @@ void workbench_volume_cache_populate(WORKBENCH_Data *vedata,
 
   if (use_slice) {
     float invviewmat[4][4];
-    DRW_viewport_matrix_get(invviewmat, DRW_MAT_VIEWINV);
+    DRW_view_viewmat_get(NULL, invviewmat, true);
 
     const int axis = (sds->slice_axis == SLICE_AXIS_AUTO) ?
                          axis_dominant_v3_single(invviewmat[2]) :
index e1c8679..378324b 100644 (file)
@@ -1212,7 +1212,7 @@ bool DRW_object_is_flat(Object *ob, int *axis)
 bool DRW_object_axis_orthogonal_to_view(Object *ob, int axis)
 {
   float ob_rot[3][3], invviewmat[4][4];
-  DRW_viewport_matrix_get(invviewmat, DRW_MAT_VIEWINV);
+  DRW_view_viewmat_get(NULL, invviewmat, true);
   BKE_object_rot_to_mat3(ob, ob_rot, true);
   float dot = dot_v3v3(ob_rot[axis], invviewmat[2]);
   if (fabsf(dot) < 1e-3) {
index d56cf34..68af4fc 100644 (file)
@@ -531,7 +531,7 @@ static void OBJECT_engine_init(void *vedata)
 
   {
     /* Grid precompute */
-    float invviewmat[4][4], invwinmat[4][4];
+    float viewinv[4][4], wininv[4][4];
     float viewmat[4][4], winmat[4][4];
     View3D *v3d = draw_ctx->v3d;
     Scene *scene = draw_ctx->scene;
@@ -546,10 +546,10 @@ static void OBJECT_engine_init(void *vedata)
     const bool show_ortho_grid = (v3d->gridflag & V3D_SHOW_ORTHO_GRID) != 0;
     e_data.draw_grid = show_axis_x || show_axis_y || show_axis_z || show_floor;
 
-    DRW_viewport_matrix_get(winmat, DRW_MAT_WIN);
-    DRW_viewport_matrix_get(viewmat, DRW_MAT_VIEW);
-    DRW_viewport_matrix_get(invwinmat, DRW_MAT_WININV);
-    DRW_viewport_matrix_get(invviewmat, DRW_MAT_VIEWINV);
+    DRW_view_winmat_get(NULL, winmat, false);
+    DRW_view_winmat_get(NULL, wininv, true);
+    DRW_view_viewmat_get(NULL, viewmat, false);
+    DRW_view_viewmat_get(NULL, viewinv, true);
 
     /* if perps */
     if (winmat[3][3] == 0.0f) {
@@ -561,7 +561,7 @@ static void OBJECT_engine_init(void *vedata)
 
       /* convert the view vectors to view space */
       for (int i = 0; i < 2; i++) {
-        mul_m4_v4(invwinmat, viewvecs[i]);
+        mul_m4_v4(wininv, viewvecs[i]);
         mul_v3_fl(viewvecs[i], 1.0f / viewvecs[i][2]); /* perspective divide */
       }
 
@@ -623,8 +623,8 @@ static void OBJECT_engine_init(void *vedata)
       e_data.zpos_flag = SHOW_AXIS_Z;
 
       float zvec[3], campos[3];
-      negate_v3_v3(zvec, invviewmat[2]);
-      copy_v3_v3(campos, invviewmat[3]);
+      negate_v3_v3(zvec, viewinv[2]);
+      copy_v3_v3(campos, viewinv[3]);
 
       /* z axis : chose the most facing plane */
       if (fabsf(zvec[0]) < fabsf(zvec[1])) {
@@ -2437,12 +2437,11 @@ static void DRW_shgroup_volume_extra(OBJECT_ShadingGroupList *sgl,
 
   if (sds->slice_method == MOD_SMOKE_SLICE_AXIS_ALIGNED &&
       sds->axis_slice_method == AXIS_SLICE_SINGLE) {
-    float invviewmat[4][4];
-    DRW_viewport_matrix_get(invviewmat, DRW_MAT_VIEWINV);
+    float viewinv[4][4];
+    DRW_view_viewmat_get(NULL, viewinv, true);
 
-    const int axis = (sds->slice_axis == SLICE_AXIS_AUTO) ?
-                         axis_dominant_v3_single(invviewmat[2]) :
-                         sds->slice_axis - 1;
+    const int axis = (sds->slice_axis == SLICE_AXIS_AUTO) ? axis_dominant_v3_single(viewinv[2]) :
+                                                            sds->slice_axis - 1;
     slice_axis = axis;
     line_count /= sds->res[axis];
   }
index 378fdbf..8e50d08 100644 (file)
@@ -219,7 +219,7 @@ static void overlay_cache_init(void *vedata)
 
     float winmat[4][4];
     float viewdist = rv3d->dist;
-    DRW_viewport_matrix_get(winmat, DRW_MAT_WIN);
+    DRW_view_winmat_get(NULL, winmat, false);
     /* special exception for ortho camera (viewdist isnt used for perspective cameras) */
     if (rv3d->persp == RV3D_CAMOB && rv3d->is_persp == false) {
       viewdist = 1.0f / max_ff(fabsf(rv3d->winmat[0][0]), fabsf(rv3d->winmat[1][1]));