Browse Source

Add VertexBuffer and IndexBuffer classes

master
Riyyi 4 years ago
parent
commit
c5bd231b38
  1. 58
      inferno/src/inferno/render/buffer.cpp
  2. 44
      inferno/src/inferno/render/buffer.h

58
inferno/src/inferno/render/buffer.cpp

@ -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);
}
}

44
inferno/src/inferno/render/buffer.h

@ -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
Loading…
Cancel
Save