blob: 714c5d4299ec90d6055b2a4ee24a8da1c9968aef [file] [log] [blame]
/*
* Copyright 2025 Rive
*/
#include "common/render_context_null.hpp"
#include "rive/renderer/rive_renderer.hpp"
#include <catch.hpp>
namespace rive::gpu
{
// Ensures that a zero-area double cusp does not trigger assertions in the
// feathering code.
TEST_CASE("feathercusp", "[feather]")
{
std::unique_ptr<RenderContext> renderContext =
RenderContextNULL::MakeContext();
renderContext->beginFrame({
.renderTargetWidth = 1000,
.renderTargetHeight = 1000,
});
auto path = renderContext->makeEmptyRenderPath();
path->fillRule(FillRule::clockwise);
path->moveTo(95.164070f, 799.999939f);
path->cubicTo(-125.766922f,
799.999939f,
274.233032f,
799.999939f,
-95.164070f,
799.999939f);
auto paint = renderContext->makeRenderPaint();
paint->color(0xffffffff);
paint->feather(32);
RiveRenderer renderer(renderContext.get());
renderer.drawPath(path.get(), paint.get());
auto renderTarget =
renderContext->static_impl_cast<RenderContextNULL>()->makeRenderTarget(
renderContext->frameDescriptor().renderTargetWidth,
renderContext->frameDescriptor().renderTargetHeight);
renderContext->flush({.renderTarget = renderTarget.get()});
// The test passes if nothing crashes.
}
} // namespace rive::gpu