lastSegmentPointIdx = str.cp + (ctx->pathes[ptrPath+ptrSegment]&PATH_ELT_MASK)-1;
}
- VKVG_IBO_INDEX_TYPE firstIdx = (VKVG_IBO_INDEX_TYPE)(ctx->vertCount - ctx->curVertOffset);
+ str.firstIdx = (VKVG_IBO_INDEX_TYPE)(ctx->vertCount - ctx->curVertOffset);
//LOG(VKVG_LOG_INFO_PATH, "\tPATH: start=%d end=%d", ctx->pathes[ptrPath]&PATH_ELT_MASK, ctx->pathes[ptrPath+1]&PATH_ELT_MASK);
LOG(VKVG_LOG_INFO_PATH, "end = %d\n", lastPathPointIdx);
float cross = _build_vb_step (ctx, hw, &str, false);
VKVG_IBO_INDEX_TYPE* inds = &ctx->indexCache [ctx->indCount-6];
- VKVG_IBO_INDEX_TYPE ii = firstIdx;
+ VKVG_IBO_INDEX_TYPE ii = str.firstIdx;
if (cross < 0 && ctx->lineJoin != VKVG_LINE_JOIN_MITER){
inds[1] = ii+1;
inds[4] = ii+1;
else
_build_vb_step (ctx, hw, str, isCurve);
str->iL = str->cp++;
+ if (ctx->vertCount - ctx->curVertOffset > VKVG_IBO_MAX / 3) {
+ Vertex v0 = ctx->vertexCache[ctx->curVertOffset + str->firstIdx];
+ Vertex v1 = ctx->vertexCache[ctx->curVertOffset + str->firstIdx + 1];
+ _emit_draw_cmd_undrawn_vertices(ctx);
+ //repeat first 2 vertices for closed pathes
+ str->firstIdx = (VKVG_IBO_INDEX_TYPE)(ctx->vertCount - ctx->curVertOffset);
+ _add_vertex(ctx, v0);
+ _add_vertex(ctx, v1);
+ ctx->curVertOffset = ctx->vertCount;//prevent redrawing them at the start of the batch
+ }
}
bool ptInTriangle(vec2 p, vec2 p0, vec2 p1, vec2 p2) {