diff options
Diffstat (limited to 'source/blender/draw/engines/overlay/shaders/grid_vert.glsl')
-rw-r--r-- | source/blender/draw/engines/overlay/shaders/grid_vert.glsl | 36 |
1 files changed, 13 insertions, 23 deletions
diff --git a/source/blender/draw/engines/overlay/shaders/grid_vert.glsl b/source/blender/draw/engines/overlay/shaders/grid_vert.glsl index d77d6012e06..b81f1a24358 100644 --- a/source/blender/draw/engines/overlay/shaders/grid_vert.glsl +++ b/source/blender/draw/engines/overlay/shaders/grid_vert.glsl @@ -1,34 +1,24 @@ +/** + * Infinite grid: + * Draw antialiazed grid and axes of different sizes with smooth blending between Level of details. + * We draw multiple triangles to avoid float precision issues due to perspective interpolation. + **/ -/* Infinite grid - * Clément Foucault */ - -uniform vec3 planeAxes; -uniform vec3 gridSize; - -uniform int gridFlag; - -#define PLANE_XY (1 << 4) -#define PLANE_XZ (1 << 5) -#define PLANE_YZ (1 << 6) -#define CLIP_Z_POS (1 << 7) -#define CLIP_Z_NEG (1 << 8) -#define PLANE_IMAGE (1 << 11) -in vec3 pos; - -out vec3 local_pos; +#pragma BLENDER_REQUIRE(common_view_lib.glsl) +#pragma BLENDER_REQUIRE(common_math_lib.glsl) void main() { vec3 vert_pos; /* Project camera pos to the needed plane */ - if ((gridFlag & PLANE_XY) != 0) { + if (flag_test(grid_flag, PLANE_XY)) { vert_pos = vec3(pos.x, pos.y, 0.0); } - else if ((gridFlag & PLANE_XZ) != 0) { + else if (flag_test(grid_flag, PLANE_XZ)) { vert_pos = vec3(pos.x, 0.0, pos.y); } - else if ((gridFlag & PLANE_YZ) != 0) { + else if (flag_test(grid_flag, PLANE_YZ)) { vert_pos = vec3(0.0, pos.x, pos.y); } else /* PLANE_IMAGE */ { @@ -37,14 +27,14 @@ void main() local_pos = vert_pos; - vec3 real_pos = cameraPos * planeAxes + vert_pos * gridSize; + vec3 real_pos = cameraPos * plane_axes + vert_pos * grid_buf.size.xyz; /* Used for additional Z axis */ - if ((gridFlag & CLIP_Z_POS) != 0) { + if (flag_test(grid_flag, CLIP_ZPOS)) { real_pos.z = clamp(real_pos.z, 0.0, 1e30); local_pos.z = clamp(local_pos.z, 0.0, 1.0); } - if ((gridFlag & CLIP_Z_NEG) != 0) { + if (flag_test(grid_flag, CLIP_ZNEG)) { real_pos.z = clamp(real_pos.z, -1e30, 0.0); local_pos.z = clamp(local_pos.z, -1.0, 0.0); } |