[Bf-blender-cvs] [c8d3b62e46f] hair_guides_grooming: Enable faces for the groom bundle hull and fix index counts.
Lukas Tönne
noreply at git.blender.org
Thu Jun 28 14:38:41 CEST 2018
Commit: c8d3b62e46fd77e9775f2e2bfa2d31147976c9a6
Author: Lukas Tönne
Date: Thu Jun 28 13:38:18 2018 +0100
Branches: hair_guides_grooming
https://developer.blender.org/rBc8d3b62e46fd77e9775f2e2bfa2d31147976c9a6
Enable faces for the groom bundle hull and fix index counts.
===================================================================
M source/blender/draw/intern/draw_cache_impl_groom.c
===================================================================
diff --git a/source/blender/draw/intern/draw_cache_impl_groom.c b/source/blender/draw/intern/draw_cache_impl_groom.c
index 95f3f4e7543..7126f4ce708 100644
--- a/source/blender/draw/intern/draw_cache_impl_groom.c
+++ b/source/blender/draw/intern/draw_cache_impl_groom.c
@@ -575,7 +575,6 @@ static void groom_get_verts(
GroomBundle *bundle = ®ion->bundle;
if (use_curve_cache)
{
-
GroomCurveCache *cache = bundle->curvecache;
for (int i = 0; i < region->numverts; ++i)
{
@@ -710,7 +709,7 @@ static void groom_get_faces(
int vert_len = groom_count_verts(rdata->regions, parts, use_curve_cache);
int face_len = groom_count_faces(rdata->regions, parts, use_curve_cache);
- GWN_indexbuf_init_ex(&elb, GWN_PRIM_TRIS, face_len, vert_len, true);
+ GWN_indexbuf_init_ex(&elb, GWN_PRIM_TRIS, face_len * 3, vert_len, true);
uint idx = 0;
if (parts & GM_RENDER_REGIONS)
@@ -754,35 +753,40 @@ static void groom_get_faces(
{
for (GroomRegion *region = rdata->regions->first; region; region = region->next)
{
-#if 0
/* Closed triangle strip around each section */
GroomBundle *bundle = ®ion->bundle;
- if (use_curve_cache)
+ const int numshapeverts = region->numverts;
+ if (numshapeverts > 1)
{
- GroomCurveCache *cache = bundle->curvecache;
- const int numshapeverts = region->numverts;
- if (numshapeverts > 1)
+ if (use_curve_cache)
{
for (int i = 0; i < numshapeverts; ++i)
{
- for (int j = 0; j < bundle->curvesize - 1; ++j, ++cache)
+ const int idx0 = idx + bundle->curvesize * i;
+ const int idx1 = idx + bundle->curvesize * ((i + 1) % numshapeverts);
+ for (int j = 0; j < bundle->curvesize - 1; ++j)
{
- GWN_indexbuf_add_tri_verts(&elb, idx + j, idx + curvesize + j, idx + j + 1);
+ GWN_indexbuf_add_tri_verts(&elb, idx0 + j, idx1 + j, idx1 + j + 1);
+ GWN_indexbuf_add_tri_verts(&elb, idx0 + j, idx1 + j + 1, idx0 + j + 1);
}
}
idx += bundle->curvesize * numshapeverts;
}
- }
- else
- {
- GroomSection *section = bundle->sections;
- for (int i = 0; i < bundle->totsections - 1; ++i, ++section)
+ else
{
- GWN_indexbuf_add_line_verts(&elb, idx + i, idx + i + 1);
+ for (int i = 0; i < numshapeverts; ++i)
+ {
+ const int idx0 = idx + bundle->totsections * i;
+ const int idx1 = idx + bundle->totsections * ((i + 1) % numshapeverts);
+ for (int j = 0; j < bundle->totsections - 1; ++j)
+ {
+ GWN_indexbuf_add_tri_verts(&elb, idx0 + j, idx1 + j, idx1 + j + 1);
+ GWN_indexbuf_add_tri_verts(&elb, idx0 + j, idx1 + j + 1, idx0 + j + 1);
+ }
+ }
+ idx += bundle->totverts;
}
- idx += bundle->totsections;
}
-#endif
}
}
More information about the Bf-blender-cvs
mailing list