[Bf-blender-cvs] [0d8ab0eac60] master: DRW: Remove ModelViewMatrix Usage
Clément Foucault
noreply at git.blender.org
Fri May 10 12:25:39 CEST 2019
Commit: 0d8ab0eac6045c0e4e3d175d0f7fc70d80072a71
Author: Clément Foucault
Date: Thu May 9 22:10:38 2019 +0200
Branches: master
https://developer.blender.org/rB0d8ab0eac6045c0e4e3d175d0f7fc70d80072a71
DRW: Remove ModelViewMatrix Usage
===================================================================
M source/blender/draw/engines/eevee/shaders/prepass_vert.glsl
M source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl
M source/blender/draw/engines/workbench/shaders/workbench_volume_vert.glsl
M source/blender/draw/engines/workbench/workbench_volume.c
M source/blender/draw/intern/draw_manager_data.c
M source/blender/draw/modes/object_mode.c
M source/blender/draw/modes/shaders/common_view_lib.glsl
M source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl
M source/blender/draw/modes/shaders/object_outline_prepass_geom.glsl
M source/blender/draw/modes/shaders/object_outline_prepass_vert.glsl
M source/blender/draw/modes/shaders/object_particle_dot_vert.glsl
M source/blender/draw/modes/shaders/object_particle_prim_vert.glsl
===================================================================
diff --git a/source/blender/draw/engines/eevee/shaders/prepass_vert.glsl b/source/blender/draw/engines/eevee/shaders/prepass_vert.glsl
index 883862855f3..7f154c9130a 100644
--- a/source/blender/draw/engines/eevee/shaders/prepass_vert.glsl
+++ b/source/blender/draw/engines/eevee/shaders/prepass_vert.glsl
@@ -1,5 +1,4 @@
-uniform mat4 ModelViewProjectionMatrix;
uniform mat4 ModelMatrix;
uniform mat4 ModelMatrixInverse;
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl
index a1c269d5a65..cef405d12d3 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl
@@ -1,8 +1,7 @@
-uniform mat4 ProjectionMatrix;
-uniform mat4 ModelMatrixInverse;
-uniform mat4 ModelViewMatrixInverse;
uniform mat4 ModelMatrix;
+uniform mat4 ModelMatrixInverse;
+
uniform vec3 OrcoTexCoFactors[2];
uniform sampler2D depthBuffer;
@@ -219,9 +218,11 @@ void main()
vec3 vs_ray_dir = (is_persp) ? (vs_ray_end - vs_ray_ori) : vec3(0.0, 0.0, -1.0);
vs_ray_dir /= abs(vs_ray_dir.z);
- vec3 ls_ray_dir = mat3(ModelViewMatrixInverse) * vs_ray_dir * OrcoTexCoFactors[1] * 2.0;
- vec3 ls_ray_ori = (ModelViewMatrixInverse * vec4(vs_ray_ori, 1.0)).xyz;
- vec3 ls_ray_end = (ModelViewMatrixInverse * vec4(vs_ray_end, 1.0)).xyz;
+ /* TODO(fclem) Precompute the matrix/ */
+ vec3 ls_ray_dir = vs_ray_dir * OrcoTexCoFactors[1] * 2.0;
+ ls_ray_dir = mat3(ModelMatrixInverse) * (mat3(ViewMatrixInverse) * ls_ray_dir);
+ vec3 ls_ray_ori = point_view_to_object(vs_ray_ori);
+ vec3 ls_ray_end = point_view_to_object(vs_ray_end);
ls_ray_ori = (OrcoTexCoFactors[0] + ls_ray_ori * OrcoTexCoFactors[1]) * 2.0 - 1.0;
ls_ray_end = (OrcoTexCoFactors[0] + ls_ray_end * OrcoTexCoFactors[1]) * 2.0 - 1.0;
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_volume_vert.glsl b/source/blender/draw/engines/workbench/shaders/workbench_volume_vert.glsl
index 7a418243fd3..1834173fee9 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_volume_vert.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_volume_vert.glsl
@@ -1,5 +1,6 @@
-uniform mat4 ModelViewProjectionMatrix;
+uniform mat4 ModelMatrix;
+
uniform vec3 OrcoTexCoFactors[2];
uniform float slicePosition;
uniform int sliceAxis; /* -1 is no slice, 0 is X, 1 is Y, 2 is Z. */
@@ -29,5 +30,5 @@ void main()
vec3 final_pos = pos;
#endif
final_pos = ((final_pos * 0.5 + 0.5) - OrcoTexCoFactors[0]) / OrcoTexCoFactors[1];
- gl_Position = ModelViewProjectionMatrix * vec4(final_pos, 1.0);
+ gl_Position = point_object_to_ndc(final_pos);
}
diff --git a/source/blender/draw/engines/workbench/workbench_volume.c b/source/blender/draw/engines/workbench/workbench_volume.c
index accc7e91576..d2f19f57dcf 100644
--- a/source/blender/draw/engines/workbench/workbench_volume.c
+++ b/source/blender/draw/engines/workbench/workbench_volume.c
@@ -53,6 +53,7 @@ static struct {
extern char datatoc_workbench_volume_vert_glsl[];
extern char datatoc_workbench_volume_frag_glsl[];
+extern char datatoc_common_view_lib_glsl[];
static GPUShader *volume_shader_get(bool slice, bool coba, bool cubic)
{
@@ -77,8 +78,11 @@ static GPUShader *volume_shader_get(bool slice, bool coba, bool cubic)
char *defines = BLI_dynstr_get_cstring(ds);
BLI_dynstr_free(ds);
- e_data.volume_sh[id] = DRW_shader_create(
- datatoc_workbench_volume_vert_glsl, NULL, datatoc_workbench_volume_frag_glsl, defines);
+ e_data.volume_sh[id] = DRW_shader_create_with_lib(datatoc_workbench_volume_vert_glsl,
+ NULL,
+ datatoc_workbench_volume_frag_glsl,
+ datatoc_common_view_lib_glsl,
+ defines);
MEM_freeN(defines);
}
diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c
index e1f9f826ca5..1f48129116d 100644
--- a/source/blender/draw/intern/draw_manager_data.c
+++ b/source/blender/draw/intern/draw_manager_data.c
@@ -1205,6 +1205,7 @@ void DRW_shgroup_instance_batch(DRWShadingGroup *shgroup, struct GPUBatch *batch
/* Note: This WILL break if batch->verts[0] is destroyed and reallocated
* at the same address. Bindings/VAOs would remain obsolete. */
// if (shgroup->instancing_geom->inst != batch->verts[0])
+ /* XXX FIXME: THIS IS BROKEN BECAUSE OVEWRITTEN BY DRW_instance_buffer_finish(). */
GPU_batch_instbuf_set(shgroup->instance_geom, batch->verts[0], false);
#ifdef USE_GPU_SELECT
diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
index c494e222b3d..7e5586f1b10 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -419,8 +419,14 @@ static void OBJECT_engine_init(void *vedata)
.defs = (const char *[]){sh_cfg_data->def, NULL},
});
sh_data->outline_prepass_wire = GPU_shader_create_from_arrays({
- .vert = (const char *[]){sh_cfg_data->lib, datatoc_object_outline_prepass_vert_glsl, NULL},
- .geom = (const char *[]){sh_cfg_data->lib, datatoc_object_outline_prepass_geom_glsl, NULL},
+ .vert = (const char *[]){sh_cfg_data->lib,
+ datatoc_common_view_lib_glsl,
+ datatoc_object_outline_prepass_vert_glsl,
+ NULL},
+ .geom = (const char *[]){sh_cfg_data->lib,
+ datatoc_common_view_lib_glsl,
+ datatoc_object_outline_prepass_geom_glsl,
+ NULL},
.frag = (const char *[]){datatoc_object_outline_prepass_frag_glsl, NULL},
.defs = (const char *[]){sh_cfg_data->def, NULL},
});
@@ -486,18 +492,23 @@ static void OBJECT_engine_init(void *vedata)
});
/* Particles */
- sh_data->part_prim = DRW_shader_create(datatoc_object_particle_prim_vert_glsl,
- NULL,
- datatoc_gpu_shader_flat_color_frag_glsl,
- NULL);
-
- sh_data->part_axis = DRW_shader_create(datatoc_object_particle_prim_vert_glsl,
- NULL,
- datatoc_gpu_shader_flat_color_frag_glsl,
- "#define USE_AXIS\n");
-
- sh_data->part_dot = DRW_shader_create(
- datatoc_object_particle_dot_vert_glsl, NULL, datatoc_object_particle_dot_frag_glsl, NULL);
+ sh_data->part_prim = DRW_shader_create_with_lib(datatoc_object_particle_prim_vert_glsl,
+ NULL,
+ datatoc_gpu_shader_flat_color_frag_glsl,
+ datatoc_common_view_lib_glsl,
+ NULL);
+
+ sh_data->part_axis = DRW_shader_create_with_lib(datatoc_object_particle_prim_vert_glsl,
+ NULL,
+ datatoc_gpu_shader_flat_color_frag_glsl,
+ datatoc_common_view_lib_glsl,
+ "#define USE_AXIS\n");
+
+ sh_data->part_dot = DRW_shader_create_with_lib(datatoc_object_particle_dot_vert_glsl,
+ NULL,
+ datatoc_object_particle_dot_frag_glsl,
+ datatoc_common_view_lib_glsl,
+ NULL);
/* Lightprobes */
sh_data->lightprobe_grid = DRW_shader_create(datatoc_object_lightprobe_grid_vert_glsl,
@@ -2990,7 +3001,6 @@ static void OBJECT_cache_populate_particles(OBJECT_Shaders *sh_data,
if (draw_as != PART_DRAW_PATH) {
struct GPUBatch *geom = DRW_cache_particles_get_dots(ob, psys);
DRWShadingGroup *shgrp = NULL;
- static int screen_space[2] = {0, 1};
static float def_prim_col[3] = {0.5f, 0.5f, 0.5f};
static float def_sec_col[3] = {1.0f, 1.0f, 1.0f};
@@ -3016,7 +3026,9 @@ static void OBJECT_cache_populate_particles(OBJECT_Shaders *sh_data,
e_data.particle_format);
DRW_shgroup_uniform_texture(shgrp, "ramp", G_draw.ramp);
DRW_shgroup_uniform_vec3(shgrp, "color", ma ? &ma->r : def_prim_col, 1);
- DRW_shgroup_uniform_int(shgrp, "screen_space", &screen_space[0], 1);
+ DRW_shgroup_uniform_float(shgrp, "draw_size", &part->draw_size, 1);
+ DRW_shgroup_uniform_bool_copy(shgrp, "screen_space", false);
+ DRW_shgroup_instance_batch(shgrp, geom);
break;
case PART_DRAW_CIRC:
shgrp = DRW_shgroup_instance_create(sh_data->part_prim,
@@ -3025,25 +3037,22 @@ static void OBJECT_cache_populate_particles(OBJECT_Shaders *sh_data,
e_data.particle_format);
DRW_shgroup_uniform_texture(shgrp, "ramp", G_draw.ramp);
DRW_shgroup_uniform_vec3(shgrp, "color", ma ? &ma->r : def_prim_col, 1);
- DRW_shgroup_uniform_int(shgrp, "screen_space", &screen_space[1], 1);
+ DRW_shgroup_uniform_float(shgrp, "draw_size", &part->draw_size, 1);
+ DRW_shgroup_uniform_bool_copy(shgrp, "screen_space", true);
+ DRW_shgroup_instance_batch(shgrp, geom);
break;
case PART_DRAW_AXIS:
shgrp = DRW_shgroup_instance_create(sh_data->part_axis,
psl->particle,
DRW_cache_particles_get_prim(PART_DRAW_AXIS),
e_data.particle_format);
- DRW_shgroup_uniform_int(shgrp, "screen_s
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list