/*
 * Copyright 2025 Rive
 */

#pragma once

#include "rive/refcnt.hpp"

namespace rive
{
class RenderImage;
};

namespace rive::gpu
{
class RenderTarget;
class RenderContextGLImpl;
class RenderContextD3DImpl;
class RenderContextD3D12Impl;
class RenderContextWebGPUImpl;
class VulkanContext;
}; // namespace rive::gpu

namespace rive_tests
{
// Offscreen render target interface that can be accessed as a RenderImage or a
// RenderTarget.
// The backend handles barriers automatically.
class OffscreenRenderTarget : public rive::RefCnt<OffscreenRenderTarget>
{
public:
  virtual rive::RenderImage* asRenderImage() = 0;
  virtual rive::gpu::RenderTarget* asRenderTarget() = 0;
  virtual ~OffscreenRenderTarget() {}

  static rive::rcp<OffscreenRenderTarget> MakeD3D(
      rive::gpu::RenderContextD3DImpl*,
      uint32_t width,
      uint32_t height,
      bool riveRenderable);

  static rive::rcp<OffscreenRenderTarget> MakeD3D12(
      rive::gpu::RenderContextD3D12Impl*,
      uint32_t width,
      uint32_t height,
      bool riveRenderable);

  static rive::rcp<OffscreenRenderTarget> MakeGL(
      rive::gpu::RenderContextGLImpl*,
      uint32_t width,
      uint32_t height);

  static rive::rcp<OffscreenRenderTarget> MakeVulkan(
      rive::gpu::VulkanContext*,
      uint32_t width,
      uint32_t height,
      bool riveRenderable);

  static rive::rcp<OffscreenRenderTarget> MakeWebGPU(
      rive::gpu::RenderContextWebGPUImpl*,
      uint32_t width,
      uint32_t height);
};
}; // namespace rive_tests
