mirror of
https://github.com/guezoloic/LearnOpenGL.git
synced 2026-01-25 03:34:15 +00:00
feat(VBOs): rework vbo functions and add comments
This commit is contained in:
@@ -5,19 +5,29 @@
|
|||||||
|
|
||||||
#include "glad/glad.h"
|
#include "glad/glad.h"
|
||||||
|
|
||||||
|
// A VBO (Vertex Buffer Object) is a contiguous block of GPU memory that stores
|
||||||
|
// vertex data as raw bytes.
|
||||||
class VBO
|
class VBO
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
unsigned int id;
|
GLuint id; // OpenGL handle for this buffer
|
||||||
|
|
||||||
public:
|
public:
|
||||||
VBO();
|
// VBO constructor
|
||||||
|
// It uploads raw vertex data into GPU memory (VRAM).
|
||||||
|
// The interpretation of this data is defined later by the VAO.
|
||||||
|
VBO(const void *data, size_t size);
|
||||||
|
|
||||||
|
// VBO destructor
|
||||||
|
// Deletes the GPU buffer when the VBO object goes out of scope. Frees the
|
||||||
|
// VRAM associated with this VBO.
|
||||||
~VBO();
|
~VBO();
|
||||||
|
|
||||||
void setData(const GLfloat* vertices, size_t size);
|
// Binds this VBO to the current GL_ARRAY_BUFFER target
|
||||||
|
|
||||||
void bind();
|
void bind();
|
||||||
void unbind();
|
|
||||||
|
// unbinds current GL_ARRAY_BUFFER target (it's replaced by null id)
|
||||||
|
static void unbind();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -1,16 +1,32 @@
|
|||||||
#include "vbo.hpp"
|
#include "core/vbo.hpp"
|
||||||
|
|
||||||
VBO::VBO() : id(0) {}
|
#include <cstddef>
|
||||||
|
|
||||||
void VBO::setData(const GLfloat* vertices, size_t size)
|
VBO::VBO(const void *data, std::size_t size)
|
||||||
{
|
{
|
||||||
if (this->id == 0) glGenBuffers(1, &this->id);
|
// Generate a unique OpenGL buffer handle (ID).
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, this->id);
|
glGenBuffers(1, &id);
|
||||||
glBufferData(GL_ARRAY_BUFFER, size, vertices, GL_STATIC_DRAW);
|
// Binding the VBO is mandatory before allocating GPU memory
|
||||||
|
bind();
|
||||||
|
// Allocate GPU memory and upload data.
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW);
|
||||||
}
|
}
|
||||||
|
|
||||||
VBO::~VBO() { glDeleteBuffers(1, &this->id); }
|
VBO::~VBO()
|
||||||
|
{
|
||||||
|
// delete the OpenGL buffer handle
|
||||||
|
glDeleteBuffers(1, &this->id);
|
||||||
|
}
|
||||||
|
|
||||||
void VBO::bind() { glBindBuffer(GL_ARRAY_BUFFER, this->id); }
|
void VBO::bind()
|
||||||
|
{
|
||||||
|
// Bind this buffer to the GL_ARRAY_BUFFER target.
|
||||||
|
// GL_ARRAY_BUFFER tells opengl this buffer contains vertices
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, this->id);
|
||||||
|
}
|
||||||
|
|
||||||
void VBO::unbind() { glBindBuffer(GL_ARRAY_BUFFER, 0); }
|
void VBO::unbind()
|
||||||
|
{
|
||||||
|
// bind the buffer to NULL handle (remove old id)
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user