diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2019-05-09 12:58:33 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2019-05-09 13:22:12 +0300 |
commit | d2520511d20413e9edc8006a6f8c535825f1344b (patch) | |
tree | 87a6ab3585252ebd3504c1d56239bef625a64de1 | |
parent | 7c9e649015d45546c43170066397603e50166509 (diff) |
3D Grid: Use View UBO & small cleanup
-rw-r--r-- | source/blender/draw/modes/object_mode.c | 28 | ||||
-rw-r--r-- | source/blender/draw/modes/shaders/object_grid_frag.glsl | 5 | ||||
-rw-r--r-- | source/blender/draw/modes/shaders/object_grid_vert.glsl | 5 |
3 files changed, 19 insertions, 19 deletions
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) |