[Bf-blender-cvs] [06bbcb8ffa1] tmp-overlay-engine: Cleanup: DRW: Remove Hack of skinroot rendering
Clément Foucault
noreply at git.blender.org
Sun Nov 24 02:02:53 CET 2019
Commit: 06bbcb8ffa163cda6bf5e2219ad8d71c6936696f
Author: Clément Foucault
Date: Thu Nov 21 17:26:52 2019 +0100
Branches: tmp-overlay-engine
https://developer.blender.org/rB06bbcb8ffa163cda6bf5e2219ad8d71c6936696f
Cleanup: DRW: Remove Hack of skinroot rendering
===================================================================
M source/blender/draw/engines/overlay/overlay_edit_mesh.c
M source/blender/draw/engines/overlay/overlay_shader.c
M source/blender/draw/engines/overlay/shaders/edit_mesh_skin_root_vert.glsl
M source/blender/draw/intern/draw_cache_impl_mesh.c
===================================================================
diff --git a/source/blender/draw/engines/overlay/overlay_edit_mesh.c b/source/blender/draw/engines/overlay/overlay_edit_mesh.c
index dbc3dcbbe3d..7955017732b 100644
--- a/source/blender/draw/engines/overlay/overlay_edit_mesh.c
+++ b/source/blender/draw/engines/overlay/overlay_edit_mesh.c
@@ -247,7 +247,7 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata)
static void overlay_edit_mesh_add_ob_to_pass(OVERLAY_PrivateData *pd, Object *ob, bool in_front)
{
- struct GPUBatch *geom_tris, *geom_verts, *geom_edges, *geom_fcenter, *skin_roots;
+ struct GPUBatch *geom_tris, *geom_verts, *geom_edges, *geom_fcenter, *skin_roots, *circle;
DRWShadingGroup *vert_shgrp, *edge_shgrp, *fdot_shgrp, *face_shgrp, *skin_roots_shgrp;
bool has_edit_mesh_cage = false;
@@ -277,18 +277,9 @@ static void overlay_edit_mesh_add_ob_to_pass(OVERLAY_PrivateData *pd, Object *ob
DRW_shgroup_call_no_cull(vert_shgrp, geom_verts, ob);
if (has_skin_roots) {
- DRWShadingGroup *grp = DRW_shgroup_create_sub(skin_roots_shgrp);
- /* We need to upload the matrix. But the ob can be temporary allocated so we cannot
- * use direct reference to ob->obmat. */
- DRW_shgroup_uniform_vec4_copy(grp, "editModelMat[0]", ob->obmat[0]);
- DRW_shgroup_uniform_vec4_copy(grp, "editModelMat[1]", ob->obmat[1]);
- DRW_shgroup_uniform_vec4_copy(grp, "editModelMat[2]", ob->obmat[2]);
- DRW_shgroup_uniform_vec4_copy(grp, "editModelMat[3]", ob->obmat[3]);
-
+ circle = DRW_cache_circle_get();
skin_roots = DRW_mesh_batch_cache_get_edit_skin_roots(ob->data);
- /* NOTE(fclem) We cannot use ob here since it would offset the instance attribs with
- * base instance offset. */
- DRW_shgroup_call(grp, skin_roots, NULL);
+ DRW_shgroup_call_instances_with_attribs(skin_roots_shgrp, ob, circle, skin_roots);
}
}
diff --git a/source/blender/draw/engines/overlay/overlay_shader.c b/source/blender/draw/engines/overlay/overlay_shader.c
index d9ef9f3a2c8..5bd7c8e4fae 100644
--- a/source/blender/draw/engines/overlay/overlay_shader.c
+++ b/source/blender/draw/engines/overlay/overlay_shader.c
@@ -606,11 +606,10 @@ GPUShader *OVERLAY_shader_edit_mesh_skin_root(void)
.vert = (const char *[]){sh_cfg->lib,
datatoc_common_globals_lib_glsl,
datatoc_common_view_lib_glsl,
- datatoc_edit_mesh_common_lib_glsl,
datatoc_edit_mesh_skin_root_vert_glsl,
NULL},
.frag = (const char *[]){datatoc_gpu_shader_flat_color_frag_glsl, NULL},
- .defs = (const char *[]){sh_cfg->def, NULL},
+ .defs = (const char *[]){sh_cfg->def, "#define INSTANCED_ATTRIB\n", NULL},
});
}
return sh_data->edit_mesh_skin_root;
diff --git a/source/blender/draw/engines/overlay/shaders/edit_mesh_skin_root_vert.glsl b/source/blender/draw/engines/overlay/shaders/edit_mesh_skin_root_vert.glsl
index b5617463c24..944eb41058e 100644
--- a/source/blender/draw/engines/overlay/shaders/edit_mesh_skin_root_vert.glsl
+++ b/source/blender/draw/engines/overlay/shaders/edit_mesh_skin_root_vert.glsl
@@ -1,9 +1,6 @@
-/* Need dedicated obmat since we use instancing attribs
- * (we cannot let have baseinstance mess them). */
-uniform vec4 editModelMat[4];
/* ---- Instantiated Attrs ---- */
-in vec2 pos;
+in vec3 pos;
/* ---- Per instance Attrs ---- */
in float size;
@@ -13,15 +10,14 @@ flat out vec4 finalColor;
void main()
{
- mat4 obmat = mat4(editModelMat[0], editModelMat[1], editModelMat[2], editModelMat[3]);
- /* Could be optimized... but it is only for a handful of verts so not a priority. */
- mat3 imat = inverse(mat3(obmat));
+ mat3 imat = mat3(ModelMatrixInverse);
vec3 right = normalize(imat * screenVecs[0].xyz);
vec3 up = normalize(imat * screenVecs[1].xyz);
- vec3 screen_pos = (right * pos.x + up * pos.y) * size;
- vec4 pos_4d = obmat * vec4(local_pos + screen_pos, 1.0);
+ vec3 screen_pos = (right * pos.x + up * pos.z) * size;
+ vec4 pos_4d = ModelMatrix * vec4(local_pos + screen_pos, 1.0);
gl_Position = ViewProjectionMatrix * pos_4d;
- finalColor = colorSkinRoot;
+ /* Manual stipple: one segment out of 2 is transparent. */
+ finalColor = ((gl_VertexID & 1) == 0) ? colorSkinRoot : vec4(0.0);
#ifdef USE_WORLD_CLIP_PLANES
world_clip_planes_calc_clip_distance(pos_4d.xyz);
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index 4099ba7228a..dd6749638a7 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -1326,17 +1326,8 @@ void DRW_mesh_batch_cache_create_requested(
DRW_vbo_request(cache->batch.edit_fdots, &mbufcache->vbo.fdots_pos);
DRW_vbo_request(cache->batch.edit_fdots, &mbufcache->vbo.fdots_nor);
}
- if (DRW_batch_requested(cache->batch.edit_skin_roots, GPU_PRIM_LINES)) {
+ if (DRW_batch_requested(cache->batch.edit_skin_roots, GPU_PRIM_POINTS)) {
DRW_vbo_request(cache->batch.edit_skin_roots, &mbufcache->vbo.skin_roots);
- /* HACK(fclem): This is to workaround the deferred batch init
- * that prevent drawing using DRW_shgroup_call_instances_with_attribs.
- * So we instead create the whole instancing batch here.
- * Note that we use GPU_PRIM_LINES instead of expected GPU_PRIM_LINE_STRIP
- * in order to mimic the old stipple pattern. */
- cache->batch.edit_skin_roots->inst[0] = cache->batch.edit_skin_roots->verts[0];
- cache->batch.edit_skin_roots->verts[0] = NULL;
- GPUBatch *circle = DRW_cache_screenspace_circle_get();
- GPU_batch_vertbuf_add(cache->batch.edit_skin_roots, circle->verts[0]);
}
/* Selection */
More information about the Bf-blender-cvs
mailing list