From d2520511d20413e9edc8006a6f8c535825f1344b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Thu, 9 May 2019 11:58:33 +0200 Subject: 3D Grid: Use View UBO & small cleanup --- source/blender/draw/modes/object_mode.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) (limited to 'source/blender/draw/modes/object_mode.c') 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); -- cgit v1.2.3