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>2018-11-26 22:34:04 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-11-26 23:25:33 +0300
commit0b0322099ccb99833e52196b46c144886b94428c (patch)
tree461fc482abdbb61cdb660f78682f34a4e0ced8de /source/blender/draw/modes/particle_mode.c
parentaac2eba1aac1fb3fb6278c39aab4042597497313 (diff)
Fix T57930 : Wrong hair shading in particle edit mode
Implement strand selection visualisation but without any shading. I think this is not the overlay job to draw the strands shaded. We can already view the children strands shaded for now but we might add an option to draw the shaded strand instead of (or in addition to) the guide strand.
Diffstat (limited to 'source/blender/draw/modes/particle_mode.c')
-rw-r--r--source/blender/draw/modes/particle_mode.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/source/blender/draw/modes/particle_mode.c b/source/blender/draw/modes/particle_mode.c
index f4879483540..9f0f18bf1d0 100644
--- a/source/blender/draw/modes/particle_mode.c
+++ b/source/blender/draw/modes/particle_mode.c
@@ -48,6 +48,9 @@
extern char datatoc_particle_strand_vert_glsl[];
extern char datatoc_particle_strand_frag_glsl[];
+extern char datatoc_common_globals_lib_glsl[];
+
+extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
/* *********** LISTS *********** */
@@ -94,15 +97,19 @@ typedef struct PARTICLE_PrivateData {
static void particle_engine_init(void *UNUSED(vedata))
{
if (!e_data.strands_shader) {
- e_data.strands_shader = DRW_shader_create(
+ e_data.strands_shader = DRW_shader_create_with_lib(
datatoc_particle_strand_vert_glsl,
NULL,
datatoc_particle_strand_frag_glsl,
+ datatoc_common_globals_lib_glsl,
"");
- }
- if (!e_data.points_shader) {
- e_data.points_shader = GPU_shader_get_builtin_shader(
- GPU_SHADER_3D_POINT_FIXED_SIZE_VARYING_COLOR);
+
+ e_data.points_shader = DRW_shader_create_with_lib(
+ datatoc_particle_strand_vert_glsl,
+ NULL,
+ datatoc_particle_strand_frag_glsl,
+ datatoc_common_globals_lib_glsl,
+ "#define USE_POINTS");
}
}
@@ -131,12 +138,9 @@ static void particle_cache_init(void *vedata)
stl->g_data->tip_points_group = DRW_shgroup_create(
e_data.points_shader, psl->psys_edit_pass);
- static float size = 5.0f;
- static float outline_width = 1.0f;
- DRW_shgroup_uniform_float(stl->g_data->inner_points_group, "size", &size, 1);
- DRW_shgroup_uniform_float(stl->g_data->inner_points_group, "outlineWidth", &outline_width, 1);
- DRW_shgroup_uniform_float(stl->g_data->tip_points_group, "size", &size, 1);
- DRW_shgroup_uniform_float(stl->g_data->tip_points_group, "outlineWidth", &outline_width, 1);
+ DRW_shgroup_uniform_block(stl->g_data->strands_group, "globalsBlock", globals_ubo);
+ DRW_shgroup_uniform_block(stl->g_data->inner_points_group, "globalsBlock", globals_ubo);
+ DRW_shgroup_uniform_block(stl->g_data->tip_points_group, "globalsBlock", globals_ubo);
}
static void particle_edit_cache_populate(void *vedata,
@@ -225,6 +229,7 @@ static void particle_draw_scene(void *vedata)
static void particle_engine_free(void)
{
DRW_SHADER_FREE_SAFE(e_data.strands_shader);
+ DRW_SHADER_FREE_SAFE(e_data.points_shader);
}
static const DrawEngineDataSize particle_data_size =