Files
XCEngine/engine/include/XCEngine/RHI/OpenGL/OpenGLBuffer.h
ssdfasd 572e0e9bd5 OpenGL: Refactor integration test and enable CTest framework
- Simplify OpenGL integration test structure
- Enable CTest registration for OpenGL tests
- Refactor test fixtures and device enumeration
- Minor code cleanup and improvements
2026-03-20 19:05:50 +08:00

72 lines
2.0 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
};
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 ResourceStates::Common; }
void SetState(ResourceStates state) override { }
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;
};
} // namespace RHI
} // namespace XCEngine