refactor: Refactor OpenGL backend to use OpenGLEnums
Use centralized OpenGLEnums.h for enum conversion: - Remove local ToGL* functions from OpenGLCommandList - Replace with ToOpenGL() and ToOpenGLClearBuffer() from OpenGLEnums - Simplify OpenGLTexture, OpenGLBuffer, OpenGLSampler, etc.
This commit is contained in:
@@ -1,24 +1,10 @@
|
||||
#include "XCEngine/RHI/OpenGL/OpenGLBuffer.h"
|
||||
#include "XCEngine/RHI/OpenGL/OpenGLEnums.h"
|
||||
#include <glad/glad.h>
|
||||
|
||||
namespace XCEngine {
|
||||
namespace RHI {
|
||||
|
||||
static unsigned int ToGLBufferTarget(OpenGLBufferType type) {
|
||||
switch (type) {
|
||||
case OpenGLBufferType::Vertex: return GL_ARRAY_BUFFER;
|
||||
case OpenGLBufferType::Index: return GL_ELEMENT_ARRAY_BUFFER;
|
||||
case OpenGLBufferType::Uniform: return GL_UNIFORM_BUFFER;
|
||||
case OpenGLBufferType::CopyRead: return GL_COPY_READ_BUFFER;
|
||||
case OpenGLBufferType::CopyWrite: return GL_COPY_WRITE_BUFFER;
|
||||
case OpenGLBufferType::AtomicCounter: return GL_ATOMIC_COUNTER_BUFFER;
|
||||
case OpenGLBufferType::DispatchIndirect: return GL_DISPATCH_INDIRECT_BUFFER;
|
||||
case OpenGLBufferType::DrawIndirect: return GL_DRAW_INDIRECT_BUFFER;
|
||||
case OpenGLBufferType::ShaderBindingTable: return GL_SHADER_STORAGE_BUFFER;
|
||||
default: return GL_ARRAY_BUFFER;
|
||||
}
|
||||
}
|
||||
|
||||
OpenGLBuffer::OpenGLBuffer()
|
||||
: m_buffer(0)
|
||||
, m_size(0)
|
||||
@@ -37,7 +23,7 @@ bool OpenGLBuffer::Initialize(OpenGLBufferType type, size_t size, const void* da
|
||||
m_dynamic = dynamic;
|
||||
m_isIndexBuffer = (type == OpenGLBufferType::Index);
|
||||
|
||||
unsigned int target = ToGLBufferTarget(type);
|
||||
unsigned int target = ToOpenGL(type);
|
||||
GLenum usage = dynamic ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW;
|
||||
|
||||
glGenBuffers(1, &m_buffer);
|
||||
@@ -64,12 +50,12 @@ void OpenGLBuffer::Shutdown() {
|
||||
}
|
||||
|
||||
void OpenGLBuffer::Bind() const {
|
||||
unsigned int target = ToGLBufferTarget(m_type);
|
||||
unsigned int target = ToOpenGL(m_type);
|
||||
glBindBuffer(target, m_buffer);
|
||||
}
|
||||
|
||||
void OpenGLBuffer::Unbind() const {
|
||||
unsigned int target = ToGLBufferTarget(m_type);
|
||||
unsigned int target = ToOpenGL(m_type);
|
||||
glBindBuffer(target, 0);
|
||||
}
|
||||
|
||||
@@ -78,7 +64,7 @@ void OpenGLBuffer::BindBase(unsigned int target, unsigned int index) const {
|
||||
}
|
||||
|
||||
void* OpenGLBuffer::Map() {
|
||||
unsigned int target = ToGLBufferTarget(m_type);
|
||||
unsigned int target = ToOpenGL(m_type);
|
||||
glBindBuffer(target, m_buffer);
|
||||
void* ptr = glMapBuffer(target, GL_WRITE_ONLY);
|
||||
glBindBuffer(target, 0);
|
||||
@@ -86,14 +72,14 @@ void* OpenGLBuffer::Map() {
|
||||
}
|
||||
|
||||
void OpenGLBuffer::Unmap() {
|
||||
unsigned int target = ToGLBufferTarget(m_type);
|
||||
unsigned int target = ToOpenGL(m_type);
|
||||
glBindBuffer(target, m_buffer);
|
||||
glUnmapBuffer(target);
|
||||
glBindBuffer(target, 0);
|
||||
}
|
||||
|
||||
void OpenGLBuffer::SetData(const void* data, size_t size, size_t offset) {
|
||||
unsigned int target = ToGLBufferTarget(m_type);
|
||||
unsigned int target = ToOpenGL(m_type);
|
||||
glBindBuffer(target, m_buffer);
|
||||
if (offset == 0 && size == m_size) {
|
||||
glBufferData(target, size, data, m_dynamic ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW);
|
||||
|
||||
Reference in New Issue
Block a user