[Bf-blender-cvs] [d2520511d20] master: 3D Grid: Use View UBO & small cleanup

Clément Foucault noreply at git.blender.org
Thu May 9 12:22:22 CEST 2019


Commit: d2520511d20413e9edc8006a6f8c535825f1344b
Author: Clément Foucault
Date:   Thu May 9 11:58:33 2019 +0200
Branches: master
https://developer.blender.org/rBd2520511d20413e9edc8006a6f8c535825f1344b

3D Grid: Use View UBO & small cleanup

===================================================================

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 970ee02ed40..5f4888812f9 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -88,6 +88,7 @@ extern char datatoc_object_particle_prim_vert_glsl[];
 extern char datatoc_object_particle_dot_vert_glsl[];
 extern char datatoc_object_particle_dot_frag_glsl[];
 extern char datatoc_common_globals_lib_glsl[];
+extern char datatoc_common_view_lib_glsl[];
 extern char datatoc_common_fxaa_lib_glsl[];
 extern char datatoc_gpu_shader_flat_color_frag_glsl[];
 extern char datatoc_gpu_shader_flat_id_frag_glsl[];
@@ -331,7 +332,6 @@ static struct {
 
   OBJECT_Shaders sh_data[GPU_SHADER_CFG_LEN];
 
-  float camera_pos[3];
   float grid_settings[5];
   float grid_mesh_size;
   int grid_flag;
@@ -474,11 +474,16 @@ static void OBJECT_engine_init(void *vedata)
     }
 
     /* Grid */
-    sh_data->grid = DRW_shader_create_with_lib(datatoc_object_grid_vert_glsl,
-                                               NULL,
-                                               datatoc_object_grid_frag_glsl,
-                                               datatoc_common_globals_lib_glsl,
-                                               NULL);
+    sh_data->grid = GPU_shader_create_from_arrays({
+        .vert = (const char *[]){datatoc_common_globals_lib_glsl,
+                                 datatoc_common_view_lib_glsl,
+                                 datatoc_object_grid_vert_glsl,
+                                 NULL},
+        .frag = (const char *[]){datatoc_common_globals_lib_glsl,
+                                 datatoc_common_view_lib_glsl,
+                                 datatoc_object_grid_frag_glsl,
+                                 NULL},
+    });
 
     /* Particles */
     sh_data->part_prim = DRW_shader_create(datatoc_object_particle_prim_vert_glsl,
@@ -530,9 +535,6 @@ static void OBJECT_engine_init(void *vedata)
     DRW_viewport_matrix_get(invwinmat, DRW_MAT_WININV);
     DRW_viewport_matrix_get(invviewmat, DRW_MAT_VIEWINV);
 
-    /* Setup camera pos */
-    copy_v3_v3(e_data.camera_pos, invviewmat[3]);
-
     /* if perps */
     if (winmat[3][3] == 0.0f) {
       float fov;
@@ -604,8 +606,9 @@ static void OBJECT_engine_init(void *vedata)
     if (((rv3d->view == RV3D_VIEW_USER) || (rv3d->persp != RV3D_ORTHO)) && show_axis_z) {
       e_data.zpos_flag = SHOW_AXIS_Z;
 
-      float zvec[4] = {0.0f, 0.0f, -1.0f, 0.0f};
-      mul_m4_v4(invviewmat, zvec);
+      float zvec[3], campos[3];
+      negate_v3_v3(zvec, invviewmat[2]);
+      copy_v3_v3(campos, invviewmat[3]);
 
       /* z axis : chose the most facing plane */
       if (fabsf(zvec[0]) < fabsf(zvec[1])) {
@@ -619,7 +622,7 @@ static void OBJECT_engine_init(void *vedata)
 
       /* Persp : If camera is below floor plane, we switch clipping
        * Ortho : If eye vector is looking up, we switch clipping */
-      if (((winmat[3][3] == 0.0f) && (e_data.camera_pos[2] > 0.0f)) ||
+      if (((winmat[3][3] == 0.0f) && (campos[2] > 0.0f)) ||
           ((winmat[3][3] != 0.0f) && (zvec[2] < 0.0f))) {
         e_data.zpos_flag |= CLIP_ZPOS;
         e_data.zneg_flag |= CLIP_ZNEG;
@@ -1179,7 +1182,6 @@ static void OBJECT_cache_init(void *vedata)
     DRWShadingGroup *grp = DRW_shgroup_create(sh_data->grid, psl->grid);
     DRW_shgroup_uniform_int(grp, "gridFlag", &e_data.zneg_flag, 1);
     DRW_shgroup_uniform_vec3(grp, "planeAxes", e_data.zplane_axes, 1);
-    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_float_copy(grp, "lineKernel", grid_line_size);
     DRW_shgroup_uniform_float_copy(grp, "meshSize", e_data.grid_mesh_size);
diff --git a/source/blender/draw/modes/shaders/object_grid_frag.glsl b/source/blender/draw/modes/shaders/object_grid_frag.glsl
index f4056f3a06c..a20f12efd93 100644
--- a/source/blender/draw/modes/shaders/object_grid_frag.glsl
+++ b/source/blender/draw/modes/shaders/object_grid_frag.glsl
@@ -8,9 +8,6 @@ in vec3 local_pos;
 
 out vec4 FragColor;
 
-uniform mat4 ProjectionMatrix;
-uniform mat4 ViewMatrixInverse;
-uniform vec3 cameraPos;
 uniform vec3 planeAxes;
 uniform vec4 gridSettings;
 uniform float meshSize;
@@ -23,6 +20,8 @@ uniform sampler2D depthBuffer;
 #define gridScale gridSettings.z
 #define gridSubdiv gridSettings.w
 
+#define cameraPos (ViewMatrixInverse[3].xyz)
+
 uniform int gridFlag;
 
 #define AXIS_X (1 << 0)
diff --git a/source/blender/draw/modes/shaders/object_grid_vert.glsl b/source/blender/draw/modes/shaders/object_grid_vert.glsl
index e8f4b089b47..d247967b03a 100644
--- a/source/blender/draw/modes/shaders/object_grid_vert.glsl
+++ b/source/blender/draw/modes/shaders/object_grid_vert.glsl
@@ -2,9 +2,6 @@
 /* Infinite grid
  * Clément Foucault */
 
-uniform mat4 ViewProjectionMatrix;
-uniform mat4 ProjectionMatrix;
-uniform vec3 cameraPos;
 uniform vec3 planeAxes;
 uniform vec4 gridSettings;
 uniform float meshSize;
@@ -16,6 +13,8 @@ uniform float meshSize;
 
 uniform int gridFlag;
 
+#define cameraPos (ViewMatrixInverse[3].xyz)
+
 #define PLANE_XY (1 << 4)
 #define PLANE_XZ (1 << 5)
 #define PLANE_YZ (1 << 6)



More information about the Bf-blender-cvs mailing list