/*
 * Copyright 2021 Google, LLC
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#include "fuzz/Fuzz.h"
#include "fuzz/FuzzCommon.h"
#include "include/core/SkPath.h"
#include "src/gpu/GrEagerVertexAllocator.h"
#include "src/gpu/GrTriangulator.h"
#include "src/gpu/geometry/GrPathUtils.h"

DEF_FUZZ(Triangulation, fuzz) {

    SkPath path;
    FuzzEvilPath(fuzz, &path, SkPath::Verb::kDone_Verb);

    SkScalar tol = GrPathUtils::scaleToleranceToSrc(GrPathUtils::kDefaultTolerance,
                                                    SkMatrix::I(), path.getBounds());


    // TODO(robertphillips): messing w/ the clipBounds might be another axis to fuzz.
    // afaict it only affects inverse filled paths.
    SkRect clipBounds = path.getBounds();

    GrCpuVertexAllocator allocator;
    bool isLinear;

    GrTriangulator::PathToTriangles(path, tol, clipBounds, &allocator, &isLinear);
    allocator.detachVertexData(); // normally handled by the triangulating path renderer.
}
