mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-10 14:41:50 +00:00
wg_engine: fix miter qdge cases math
This commit is contained in:
parent
40cff2d6f5
commit
adebbcd4e2
2 changed files with 6 additions and 0 deletions
|
@ -376,6 +376,8 @@ void WgCompositor::drawClipPath(WgContext& context, WgRenderDataShape* renderDat
|
|||
assert(renderData);
|
||||
assert(renderPassEncoder);
|
||||
assert(renderData->meshGroupShapes.meshes.count == renderData->meshGroupShapesBBox.meshes.count);
|
||||
if (renderData->renderSettingsShape.skip) return;
|
||||
if (renderData->meshGroupShapes.meshes.count == 0) return;
|
||||
if ((renderData->viewport.w <= 0) || (renderData->viewport.h <= 0)) return;
|
||||
wgpuRenderPassEncoderSetScissorRect(renderPassEncoder, renderData->viewport.x, renderData->viewport.y, renderData->viewport.w, renderData->viewport.h);
|
||||
// setup stencil rules
|
||||
|
@ -404,6 +406,7 @@ void WgCompositor::drawShape(WgContext& context, WgRenderDataShape* renderData,
|
|||
assert(renderData->meshGroupShapes.meshes.count == renderData->meshGroupShapesBBox.meshes.count);
|
||||
uint32_t blendTypeInd = (uint32_t)blendType;
|
||||
if (renderData->renderSettingsShape.skip) return;
|
||||
if (renderData->meshGroupShapes.meshes.count == 0) return;
|
||||
if ((renderData->viewport.w <= 0) || (renderData->viewport.h <= 0)) return;
|
||||
wgpuRenderPassEncoderSetScissorRect(renderPassEncoder, renderData->viewport.x, renderData->viewport.y, renderData->viewport.w, renderData->viewport.h);
|
||||
// setup stencil rules
|
||||
|
@ -442,6 +445,7 @@ void WgCompositor::drawStrokes(WgContext& context, WgRenderDataShape* renderData
|
|||
assert(renderData->meshGroupStrokes.meshes.count == renderData->meshGroupStrokesBBox.meshes.count);
|
||||
uint32_t blendTypeInd = (uint32_t)blendType;
|
||||
if (renderData->renderSettingsStroke.skip) return;
|
||||
if (renderData->meshGroupStrokes.meshes.count == 0) return;
|
||||
if ((renderData->viewport.w <= 0) || (renderData->viewport.h <= 0)) return;
|
||||
wgpuRenderPassEncoderSetScissorRect(renderPassEncoder, renderData->viewport.x, renderData->viewport.y, renderData->viewport.w, renderData->viewport.h);
|
||||
// draw strokes to stencil (first pass)
|
||||
|
|
|
@ -335,7 +335,9 @@ struct WgVertexBufferInd {
|
|||
Point offset2 = nrm2 * halfWidth;
|
||||
Point nrm = normalize(nrm1 + nrm2);
|
||||
float cosine = dot(nrm, nrm1);
|
||||
if (tvg::zero(cosine)) return;
|
||||
float angle = std::acos(dot(nrm1, -nrm2));
|
||||
if (tvg::zero(angle) || tvg::equal(angle, M_PI)) return;
|
||||
float miterRatio = 1.0f / (std::sin(angle) * 0.5f);
|
||||
if (miterRatio <= miterLimit) {
|
||||
appendQuad(v1 + nrm * (halfWidth / cosine), v1 + offset2, v1 + offset1, v1);
|
||||
|
|
Loading…
Add table
Reference in a new issue