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>2017-05-27 13:48:25 +0300
committerClément Foucault <foucault.clem@gmail.com>2017-05-29 16:52:27 +0300
commite104d82376134acd9b6c8729f271a03e83b64003 (patch)
tree8c2681ce31ef994f5448f33a794d0fd650c3fc86 /source/blender/draw/intern
parent9caf328a7cc55775b740ee4beecf8a77f47d3986 (diff)
Object Mode Engine: Fixing the 3D grid 1/2
Do not use the inverse perspective matrix inside the shader to recover world positions. That leads to severe float imprecision leading to nasty artifacts. Instead we compute the world view vector for each pixels and do a ray to plane intersection. We are still getting low precision derivatives when going far away from the origin, and thus artifacts. This commit also fixes the non-appearing negative Z axis in 3D view.
Diffstat (limited to 'source/blender/draw/intern')
-rw-r--r--source/blender/draw/intern/DRW_render.h1
-rw-r--r--source/blender/draw/intern/draw_manager.c3
2 files changed, 4 insertions, 0 deletions
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 5c1c978806b..695027c5de6 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -307,6 +307,7 @@ typedef enum {
DRW_MAT_VIEW,
DRW_MAT_VIEWINV,
DRW_MAT_WIN,
+ DRW_MAT_WININV,
} DRWViewportMatrixType;
void DRW_viewport_init(const bContext *C);
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index bbe3787dada..11c717a5373 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -2224,6 +2224,9 @@ void DRW_viewport_matrix_get(float mat[4][4], DRWViewportMatrixType type)
case DRW_MAT_WIN:
copy_m4_m4(mat, rv3d->winmat);
break;
+ case DRW_MAT_WININV:
+ invert_m4_m4(mat, rv3d->winmat);
+ break;
default:
BLI_assert(!"Matrix type invalid");
break;