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

#ifndef skgpu_graphite_render_TextDirectRenderStep_DEFINED
#define skgpu_graphite_render_TextDirectRenderStep_DEFINED

#include "src/gpu/graphite/Renderer.h"

namespace skgpu::graphite {

class TextDirectRenderStep final : public RenderStep {
public:
    TextDirectRenderStep(bool isMask);

    ~TextDirectRenderStep() override;

    const char* vertexSkSL() const override;
    void writeVertices(DrawWriter*, const DrawParams&) const override;
    void writeUniforms(const DrawParams&, SkPipelineDataGatherer*) const override;

private:
    [[maybe_unused]] bool fIsMask;
};

}  // namespace skgpu::graphite

#endif // skgpu_graphite_render_TextDirectRenderStep_DEFINED
