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
parentb3601a4687bb740bb782d7a96fc1920851f6d15e (diff)
DRW: DRWView: Finish refactor
Diffstat (limited to 'source/blender/draw')
-rw-r--r--source/blender/draw/engines/eevee/eevee_render.c2
-rw-r--r--source/blender/draw/engines/eevee/eevee_screen_raytrace.c2
-rw-r--r--source/blender/draw/engines/eevee/eevee_volumes.c2
-rw-r--r--source/blender/draw/engines/gpencil/gpencil_render.c2
-rw-r--r--source/blender/draw/engines/workbench/workbench_studiolight.c4
-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
9 files changed, 29 insertions, 140 deletions
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_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)