/*
 * Copyright 2022 Rive
 */

#include "viewer/viewer_host.hpp"
#include "viewer/viewer_content.hpp"

#ifdef RIVE_RENDERER_TESS

#include "rive/tess/sokol/sokol_tess_renderer.hpp"
#include "viewer/tess/viewer_sokol_factory.hpp"

class TessViewerHost : public ViewerHost
{
public:
    std::unique_ptr<rive::SokolTessRenderer> m_renderer;

    bool init(sg_pass_action*, int width, int height) override
    {
        m_renderer = std::make_unique<rive::SokolTessRenderer>();
        m_renderer->orthographicProjection(0.0f, width, height, 0.0f, 0.0f, 1.0f);
        return true;
    }

    void handleResize(int width, int height) override
    {
        m_renderer->orthographicProjection(0.0f, width, height, 0.0f, 0.0f, 1.0f);
    }

    void afterDefaultPass(ViewerContent* content, double elapsed) override
    {
        m_renderer->reset();
        if (content)
        {
            content->handleDraw(m_renderer.get(), elapsed);
        }
    }
};

std::unique_ptr<ViewerHost> ViewerHost::Make() { return std::make_unique<TessViewerHost>(); }

rive::Factory* ViewerHost::Factory()
{
    static ViewerSokolFactory sokolFactory;
    return &sokolFactory;
}

#endif
