/*
 * Copyright 2023 Rive
 */

#pragma once

#include "rive/refcnt.hpp"

#include "rive/math/aabb.hpp"
#include "rive/math/simd.hpp"

namespace rive::gpu
{
// Wraps a backend-specific buffer that RenderContext draws into.
class RenderTarget : public RefCnt<RenderTarget>
{
public:
    virtual ~RenderTarget() {}

    uint32_t width() const { return m_width; }
    uint32_t height() const { return m_height; }
    uint2 size() const { return {m_width, m_height}; }
    IAABB bounds() const
    {
        return IAABB{0,
                     0,
                     static_cast<int>(m_width),
                     static_cast<int>(m_height)};
    }

protected:
    RenderTarget(uint32_t width, uint32_t height) :
        m_width(width), m_height(height)
    {}

private:
    uint32_t m_width;
    uint32_t m_height;
};
} // namespace rive::gpu
