blob: 112252790ea811e12c16b5553218c504ef13cf4c [file] [log] [blame]
//
// Copyright 2022 Rive
//
#ifndef _RIVE_TESS_RENDERER_HPP_
#define _RIVE_TESS_RENDERER_HPP_
#include "rive/renderer.hpp"
#include "rive/tess/sub_path.hpp"
#include "rive/math/mat2d.hpp"
#include "rive/math/mat4.hpp"
#include <vector>
#include <list>
namespace rive
{
struct RenderState
{
Mat2D transform;
std::vector<SubPath> clipPaths;
};
class TessRenderer : public Renderer
{
protected:
Mat4 m_Projection;
std::list<RenderState> m_Stack;
bool m_IsClippingDirty = false;
public:
TessRenderer();
void projection(const Mat4& value);
virtual void orthographicProjection(float left,
float right,
float bottom,
float top,
float near,
float far) = 0;
void save() override;
void restore() override;
void transform(const Mat2D& transform) override;
const Mat2D& transform() { return m_Stack.back().transform; }
void clipPath(RenderPath* path) override;
void drawImage(const RenderImage*, BlendMode, float opacity) override;
void drawImageMesh(const RenderImage*,
rcp<RenderBuffer> vertices_f32,
rcp<RenderBuffer> uvCoords_f32,
rcp<RenderBuffer> indices_u16,
BlendMode,
float opacity) override;
};
} // namespace rive
#endif