3D Grid: Use View UBO & small cleanup

This commit is contained in:
Clément Foucault 2019-05-09 11:58:33 +02:00
parent 7c9e649015
commit d2520511d2
3 changed files with 19 additions and 19 deletions

View File

@ -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);

View File

@ -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)

View File

@ -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)