74 lines
2.1 KiB
C++
74 lines
2.1 KiB
C++
#pragma once
|
|
|
|
#include <string>
|
|
|
|
#include "../RHIBuffer.h"
|
|
|
|
namespace XCEngine {
|
|
namespace RHI {
|
|
|
|
enum class OpenGLBufferType {
|
|
Vertex,
|
|
Index,
|
|
Uniform,
|
|
CopyRead,
|
|
CopyWrite,
|
|
AtomicCounter,
|
|
DispatchIndirect,
|
|
DrawIndirect,
|
|
ShaderBindingTable,
|
|
ShaderStorage
|
|
};
|
|
|
|
class OpenGLBuffer : public RHIBuffer {
|
|
public:
|
|
OpenGLBuffer();
|
|
~OpenGLBuffer() override;
|
|
|
|
bool Initialize(OpenGLBufferType type, size_t size, const void* data = nullptr, bool dynamic = false);
|
|
bool InitializeVertexBuffer(const void* data, size_t size);
|
|
bool InitializeIndexBuffer(const void* data, size_t size);
|
|
void Shutdown() override;
|
|
|
|
void Bind() const;
|
|
void Unbind() const;
|
|
void BindBase(unsigned int target, unsigned int index) const;
|
|
|
|
void* Map() override;
|
|
void Unmap() override;
|
|
void SetData(const void* data, size_t size, size_t offset = 0) override;
|
|
|
|
unsigned int GetID() const { return m_buffer; }
|
|
uint64_t GetSize() const override { return m_size; }
|
|
OpenGLBufferType GetType() const { return m_type; }
|
|
bool IsDynamic() const { return m_dynamic; }
|
|
|
|
BufferType GetBufferType() const override { return m_bufferType; }
|
|
void SetBufferType(BufferType type) override { m_bufferType = type; }
|
|
|
|
uint32_t GetStride() const override { return m_stride; }
|
|
void SetStride(uint32_t stride) override { m_stride = stride; }
|
|
|
|
void* GetNativeHandle() override { return reinterpret_cast<void*>(static_cast<uintptr_t>(m_buffer)); }
|
|
|
|
ResourceStates GetState() const override { return m_state; }
|
|
void SetState(ResourceStates state) override { m_state = state; }
|
|
|
|
const std::string& GetName() const override { return m_name; }
|
|
void SetName(const std::string& name) override { m_name = name; }
|
|
|
|
private:
|
|
unsigned int m_buffer;
|
|
size_t m_size;
|
|
bool m_isIndexBuffer;
|
|
bool m_dynamic;
|
|
OpenGLBufferType m_type;
|
|
BufferType m_bufferType = BufferType::Vertex;
|
|
uint32_t m_stride = 0;
|
|
std::string m_name;
|
|
ResourceStates m_state = ResourceStates::Common;
|
|
};
|
|
|
|
} // namespace RHI
|
|
} // namespace XCEngine
|