59 lines
1.1 KiB
C++
59 lines
1.1 KiB
C++
#include "render/vertexbuffer.h"
|
|
#include "render/gl_shared.h"
|
|
|
|
VertexBuffer::VertexBuffer(void* data, size_t size, bool isStream /*= false*/)
|
|
{
|
|
glGenBuffers(1, &m_buffer);
|
|
glBindBuffer(GL_ARRAY_BUFFER, m_buffer);
|
|
glBufferData(GL_ARRAY_BUFFER, size, data, isStream ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW);
|
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
|
}
|
|
|
|
VertexBuffer::~VertexBuffer()
|
|
{
|
|
glDeleteBuffers(1, &m_buffer);
|
|
}
|
|
|
|
void VertexBuffer::Bind()
|
|
{
|
|
glBindBuffer(GL_ARRAY_BUFFER, m_buffer);
|
|
}
|
|
|
|
void* VertexBuffer::MapBuffer(BufferAccess access)
|
|
{
|
|
GLenum accessGl = 0;
|
|
|
|
switch (access)
|
|
{
|
|
case BA_READ_ONLY:
|
|
accessGl = GL_READ_ONLY;
|
|
break;
|
|
case BA_WRITE_ONLY:
|
|
accessGl = GL_WRITE_ONLY;
|
|
break;
|
|
case BA_READ_WRITE:
|
|
accessGl = GL_READ_WRITE;
|
|
break;
|
|
}
|
|
|
|
Bind();
|
|
|
|
void* ptr = glMapBuffer(GL_ARRAY_BUFFER, accessGl);
|
|
|
|
GL_CHECK_ERROR();
|
|
|
|
return ptr;
|
|
}
|
|
|
|
void VertexBuffer::UnmapBuffer()
|
|
{
|
|
Bind();
|
|
glUnmapBuffer(GL_ARRAY_BUFFER);
|
|
}
|
|
|
|
void VertexBuffer::UpdateBuffer(void* data, size_t size)
|
|
{
|
|
glBufferData(GL_ARRAY_BUFFER, size, data, GL_DYNAMIC_DRAW);
|
|
GL_CHECK_ERROR();
|
|
}
|