Add VertexBuffer and IndexBuffer classes
This commit is contained in:
@@ -0,0 +1,58 @@
|
|||||||
|
#include <glad/glad.h>
|
||||||
|
|
||||||
|
#include "inferno/render/buffer.h"
|
||||||
|
|
||||||
|
namespace Inferno {
|
||||||
|
|
||||||
|
VertexBuffer::VertexBuffer(float* vertices, size_t size)
|
||||||
|
{
|
||||||
|
glCreateBuffers(1, &m_id);
|
||||||
|
this->bind();
|
||||||
|
|
||||||
|
// Upload data to the GPU
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, size, vertices, GL_STATIC_DRAW);
|
||||||
|
}
|
||||||
|
|
||||||
|
VertexBuffer::~VertexBuffer()
|
||||||
|
{
|
||||||
|
glDeleteBuffers(1, &m_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VertexBuffer::bind() const
|
||||||
|
{
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, m_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VertexBuffer::unbind() const
|
||||||
|
{
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------
|
||||||
|
|
||||||
|
IndexBuffer::IndexBuffer(uint32_t* indices, size_t size) :
|
||||||
|
m_count(size / sizeof(uint32_t))
|
||||||
|
{
|
||||||
|
glCreateBuffers(1, &m_id);
|
||||||
|
this->bind();
|
||||||
|
|
||||||
|
// Upload data to the GPU
|
||||||
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, size, indices, GL_STATIC_DRAW);
|
||||||
|
}
|
||||||
|
|
||||||
|
IndexBuffer::~IndexBuffer()
|
||||||
|
{
|
||||||
|
glDeleteBuffers(1, &m_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IndexBuffer::bind() const
|
||||||
|
{
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IndexBuffer::unbind() const
|
||||||
|
{
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
#ifndef BUFFER_H
|
||||||
|
#define BUFFER_H
|
||||||
|
|
||||||
|
#include <cstddef> // std::size_t
|
||||||
|
#include <cstdint> // std::uint32_t
|
||||||
|
|
||||||
|
namespace Inferno {
|
||||||
|
|
||||||
|
// GPU memory which holds the raw vertex data
|
||||||
|
class VertexBuffer {
|
||||||
|
public:
|
||||||
|
VertexBuffer(float* vertices, size_t size);
|
||||||
|
~VertexBuffer();
|
||||||
|
|
||||||
|
void bind() const;
|
||||||
|
void unbind() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
uint32_t m_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
// -----------------------------------------
|
||||||
|
|
||||||
|
// Vertices order of rendering
|
||||||
|
class IndexBuffer {
|
||||||
|
public:
|
||||||
|
IndexBuffer(uint32_t* indices, size_t size);
|
||||||
|
~IndexBuffer();
|
||||||
|
|
||||||
|
void bind() const;
|
||||||
|
void unbind() const;
|
||||||
|
|
||||||
|
// -----------------------------------------
|
||||||
|
|
||||||
|
inline uint32_t getCount() const { return m_count; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
uint32_t m_id;
|
||||||
|
uint32_t m_count;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // BUFFER_H
|
||||||
Reference in New Issue
Block a user