/*
 * Copyright 2022 Rive
 */

#ifndef _RIVE_NOOP_RENDERER_HPP_
#define _RIVE_NOOP_RENDERER_HPP_

#include "rive/renderer.hpp"

namespace rive {

    class NoOpRenderer : public Renderer {
    public:
        void save() override {}
        void restore() override {}
        void transform(const Mat2D&) override {}
        void drawPath(RenderPath* path, RenderPaint* paint) override {}
        void clipPath(RenderPath* path) override {}
        void drawImage(const RenderImage*, BlendMode, float) override {}
        void drawImageMesh(const RenderImage*,
                           rcp<RenderBuffer>,
                           rcp<RenderBuffer>,
                           rcp<RenderBuffer>,
                           BlendMode,
                           float) override {}
    };

} // namespace rive

#endif
