// Copyright 2008 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.

#pragma once

#include <memory>
#include "VideoCommon/VertexManagerBase.h"

namespace DX12
{
class D3DStreamBuffer;

class VertexManager final : public VertexManagerBase
{
public:
  VertexManager();
  ~VertexManager();

  NativeVertexFormat* CreateNativeVertexFormat(const PortableVertexDeclaration& vtx_decl) override;
  void CreateDeviceObjects() override;
  void DestroyDeviceObjects() override;

  void SetIndexBuffer();

protected:
  void ResetBuffer(u32 stride) override;

private:
  void PrepareDrawBuffers(u32 stride);
  void Draw(u32 stride);
  void vFlush(bool use_dst_alpha) override;

  u32 m_vertex_draw_offset;
  u32 m_index_draw_offset;

  std::unique_ptr<D3DStreamBuffer> m_vertex_stream_buffer;
  std::unique_ptr<D3DStreamBuffer> m_index_stream_buffer;

  bool m_vertex_stream_buffer_reallocated = false;
  bool m_index_stream_buffer_reallocated = false;

  std::vector<u8> m_index_cpu_buffer;
  std::vector<u8> m_vertex_cpu_buffer;
};

}  // namespace