/*
 * Copyright 2022 Rive
 */

#ifndef RENDER_CONTEXT_HPP
#define RENDER_CONTEXT_HPP

#include "testing_window.hpp"
#include <memory>

namespace rive
{
class Renderer;
class Factory;
}; // namespace rive

// Provides a rive::Factory and rive::Renderer, with a few extra testing and
// GL-specific functions.
class TestingGLRenderer
{
public:
  static std::unique_ptr<TestingGLRenderer> Make(
      const TestingWindow::BackendParams&);

  virtual void init(void* getGLProcAddress) = 0;
  virtual rive::Factory* factory() = 0;
  virtual std::unique_ptr<rive::Renderer> reset(
      int width,
      int height,
      uint32_t targetTextureID = 0) = 0;
  virtual TestingWindow::FrameMode frameMode(
      const TestingWindow::FrameOptions&) const = 0;
  virtual void beginFrame(const TestingWindow::FrameOptions&) = 0;
  virtual void flush(int dpiScale = 1) = 0;

  // For testing directly on RenderContext.
  virtual rive::gpu::RenderContext* renderContext() const { return nullptr; }
  virtual rive::gpu::RenderTarget* renderTarget() const { return nullptr; }

  // For testing render pass breaks. Caller must call
  // renderContext()->beginFrame() again.
  virtual void flushPLSContext(rive::gpu::RenderTarget* offscreenRenderTarget)
  {}

  virtual ~TestingGLRenderer();
};

#endif
