Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2019-05-09 12:58:33 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-05-09 13:22:12 +0300
commitd2520511d20413e9edc8006a6f8c535825f1344b (patch)
tree87a6ab3585252ebd3504c1d56239bef625a64de1 /source/blender/draw/modes/object_mode.c
parent7c9e649015d45546c43170066397603e50166509 (diff)
3D Grid: Use View UBO & small cleanup
Diffstat (limited to 'source/blender/draw/modes/object_mode.c')
-rw-r--r--source/blender/draw/modes/object_mode.c28
1 files changed, 15 insertions, 13 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);