DRW: Remove some usage of DRW_viewport_matrix_get

This commit is contained in:
Clément Foucault 2019-05-20 19:35:20 +02:00
parent e1153c6a1a
commit 676e1e7b26
6 changed files with 21 additions and 27 deletions

View 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)

View 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);

View 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]) :

View 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) {

View 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];
}

View 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]));