[Bf-blender-cvs] [d2c94c7873] blender2.8: New Grid: Fix depth fighting and remove some unused variables.
Clément Foucault
noreply at git.blender.org
Sat Mar 25 19:56:53 CET 2017
Commit: d2c94c78736e84c1318859c8e902b3ee622fd6f0
Author: Clément Foucault
Date: Sat Mar 25 19:02:04 2017 +0100
Branches: blender2.8
https://developer.blender.org/rBd2c94c78736e84c1318859c8e902b3ee622fd6f0
New Grid: Fix depth fighting and remove some unused variables.
===================================================================
M source/blender/draw/modes/object_mode.c
M source/blender/draw/modes/shaders/object_grid_frag.glsl
M source/blender/draw/modes/shaders/object_grid_vert.glsl
===================================================================
diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
index 40fabe0404..bf431a6172 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -163,6 +163,7 @@ static struct {
struct GPUShader *grid_sh;
float camera_pos[3];
float grid_settings[4];
+ float grid_mat[4][4];
} e_data = {NULL}; /* Engine data */
/* *********** FUNCTIONS *********** */
@@ -205,10 +206,13 @@ static void OBJECT_engine_init(void)
}
{
+ float viewinvmat[4][4], winmat[4][4], viewmat[4][4];
+ DRW_viewport_matrix_get(winmat, DRW_MAT_WIN);
+ DRW_viewport_matrix_get(viewmat, DRW_MAT_VIEW);
+ DRW_viewport_matrix_get(viewinvmat, DRW_MAT_VIEWINV);
+
/* Setup camera pos */
- float viewmat[4][4];
- DRW_viewport_matrix_get(viewmat, DRW_MAT_VIEWINV);
- copy_v3_v3(e_data.camera_pos, viewmat[3]);
+ copy_v3_v3(e_data.camera_pos, viewinvmat[3]);
/* grid settings */
const bContext *C = DRW_get_context();
@@ -219,6 +223,20 @@ static void OBJECT_engine_init(void)
e_data.grid_settings[1] = 2.0f; /* gridResolution */
e_data.grid_settings[2] = ED_view3d_grid_scale(scene, v3d, NULL); /* gridScale */
e_data.grid_settings[3] = v3d->gridsubdiv; /* gridSubdiv */
+
+ /* Grid matrix polygon offset (fix depth fighting) */
+ /* see ED_view3d_polygon_offset */
+ float offs;
+ if (winmat[3][3] > 0.5f) {
+ float viewdist = 1.0f / max_ff(fabsf(winmat[0][0]), fabsf(winmat[1][1]));
+ offs = 0.00001f * viewdist;
+ }
+ else {
+ offs = winmat[3][2] * -0.0025f;
+ }
+ winmat[3][2] -= offs;
+
+ mul_m4_m4m4(e_data.grid_mat, winmat, viewmat);
}
}
@@ -365,6 +383,7 @@ static void OBJECT_cache_init(void)
struct Batch *quad = DRW_cache_fullscreen_quad_get();
DRWShadingGroup *grp = DRW_shgroup_create(e_data.grid_sh, psl->grid);
+ DRW_shgroup_uniform_mat4(grp, "ViewProjectionOffsetMatrix", (float *)e_data.grid_mat);
DRW_shgroup_uniform_vec3(grp, "cameraPos", e_data.camera_pos, 1);
DRW_shgroup_uniform_vec4(grp, "gridSettings", e_data.grid_settings, 1);
DRW_shgroup_uniform_block(grp, "globalsBlock", globals_ubo, 0);
diff --git a/source/blender/draw/modes/shaders/object_grid_frag.glsl b/source/blender/draw/modes/shaders/object_grid_frag.glsl
index e4fba09c80..0f7be9fea3 100644
--- a/source/blender/draw/modes/shaders/object_grid_frag.glsl
+++ b/source/blender/draw/modes/shaders/object_grid_frag.glsl
@@ -3,7 +3,6 @@
* Clément Foucault */
in vec3 wPos;
-in float viewDist;
out vec4 FragColor;
diff --git a/source/blender/draw/modes/shaders/object_grid_vert.glsl b/source/blender/draw/modes/shaders/object_grid_vert.glsl
index ef457c0128..3c6f0a3bd2 100644
--- a/source/blender/draw/modes/shaders/object_grid_vert.glsl
+++ b/source/blender/draw/modes/shaders/object_grid_vert.glsl
@@ -2,18 +2,15 @@
/* Infinite grid
* Clément Foucault */
-uniform mat4 ViewProjectionMatrix;
-uniform mat4 ViewMatrix;
+uniform mat4 ViewProjectionOffsetMatrix;
in vec3 pos;
out vec3 wPos;
-out float viewDist;
void main()
{
vec3 realPos = pos * 1e3;
- gl_Position = ViewProjectionMatrix * vec4(realPos, 1.0);
- viewDist = -(ViewMatrix * vec4(realPos, 1.0)).z;
+ gl_Position = ViewProjectionOffsetMatrix * vec4(realPos, 1.0);
wPos = realPos;
}
More information about the Bf-blender-cvs
mailing list