blob: a7d2ec4495ee5fe930a873efa2f3778beb536cf7 [file]
/*
* 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