Files
XCEngine/tests/OpenGL/OpenGLBuffer.cpp
ssdfasd 434ba0f336 Add OpenGL backend core classes: Buffer, VertexArray
- Added OpenGLBuffer class for VBO/IBO management
- Added OpenGLVertexArray class for VAO management
- Updated CMakeLists.txt to include new source files
2026-03-16 16:11:24 +08:00

62 lines
1.4 KiB
C++

#define GLFW_INCLUDE_NONE
#include "OpenGLBuffer.h"
#include <glad/glad.h>
#include <GLFW/glfw3.h>
namespace XCEngine {
namespace RHI {
OpenGLBuffer::OpenGLBuffer()
: m_buffer(0)
, m_size(0)
, m_isIndexBuffer(false) {
}
OpenGLBuffer::~OpenGLBuffer() {
Shutdown();
}
bool OpenGLBuffer::InitializeVertexBuffer(const void* data, size_t size) {
glGenBuffers(1, &m_buffer);
glBindBuffer(GL_ARRAY_BUFFER, m_buffer);
glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW);
m_size = size;
m_isIndexBuffer = false;
return true;
}
bool OpenGLBuffer::InitializeIndexBuffer(const void* data, size_t size) {
glGenBuffers(1, &m_buffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_buffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, size, data, GL_STATIC_DRAW);
m_size = size;
m_isIndexBuffer = true;
return true;
}
void OpenGLBuffer::Shutdown() {
if (m_buffer) {
glDeleteBuffers(1, &m_buffer);
m_buffer = 0;
}
}
void OpenGLBuffer::Bind() const {
if (m_isIndexBuffer) {
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_buffer);
} else {
glBindBuffer(GL_ARRAY_BUFFER, m_buffer);
}
}
void OpenGLBuffer::Unbind() const {
if (m_isIndexBuffer) {
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
} else {
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
}
} // namespace RHI
} // namespace XCEngine