- Added OpenGLBuffer class for VBO/IBO management - Added OpenGLVertexArray class for VAO management - Updated CMakeLists.txt to include new source files
62 lines
1.4 KiB
C++
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
|