[Bf-blender-cvs] [bb063ec31e3] blender2.8: DRW: Add DRW_viewport_far/near_distance_get functions.
Clément Foucault
noreply at git.blender.org
Fri May 4 19:14:15 CEST 2018
Commit: bb063ec31e388b18ea9e94629a66fa8d0612c853
Author: Clément Foucault
Date: Fri May 4 17:32:53 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBbb063ec31e388b18ea9e94629a66fa8d0612c853
DRW: Add DRW_viewport_far/near_distance_get functions.
===================================================================
M source/blender/draw/intern/DRW_render.h
M source/blender/draw/intern/draw_manager.c
===================================================================
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 0912e5dde29..1429c532590 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -400,6 +400,11 @@ 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);
+/* Thoses are in viewspace so negative if in persp.
+ * 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);
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index b171d758832..906ceac728d 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -611,8 +611,32 @@ bool DRW_viewport_is_persp_get(void)
else {
return DST.view_data.matstate.mat[DRW_MAT_WIN][3][3] == 0.0f;
}
- BLI_assert(0);
- return false;
+}
+
+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)
More information about the Bf-blender-cvs
mailing list