19 glCreateBuffers(1, &
m_id);
26 glDeleteBuffers(1, &this->m_id);
30 this->m_offset = v.m_offset;
31 this->m_count = v.m_count;
42 glDeleteBuffers(1, &this->m_id);
46 this->m_offset = v.m_offset;
47 this->m_count = v.m_count;
59 glDeleteBuffers(1, &
m_id);
65 const auto ind_offset =
indices.size_bytes();
69 glNamedBufferData(
m_id, ind_offset +
m_offset,
nullptr, GL_DYNAMIC_DRAW);
76 const auto vertex_length = vertex_count *
sizeof(
Vertex);
77 const auto index_length = index_count *
sizeof(
unsigned int);
82 glNamedBufferData(
m_id, vertex_length + index_length,
nullptr, GL_DYNAMIC_DRAW);
86 const unsigned int vi,
87 const int vertex_size,
89 const unsigned int ei,
95 glNamedBufferSubData(
m_id,
m_offset + (ei *
sizeof(
unsigned int)), index_size *
sizeof(
unsigned int),
indices.data());
105 glNamedBufferSubData(
m_id,
m_offset + (ei *
sizeof(
unsigned int)), index_size *
sizeof(
unsigned int),
indices.data());
108 void VertexBuffer::erase(
const unsigned int vi,
const int vertex_count,
const unsigned int ei,
const int index_count)
const
110 glNamedBufferSubData(
m_id, vi *
sizeof(
Vertex), vertex_count *
sizeof(
Vertex),
nullptr);
111 glNamedBufferSubData(
m_id,
m_offset + (ei *
sizeof(
unsigned int)), index_count *
sizeof(
unsigned int),
nullptr);
118 glGetNamedBufferParameteriv(
m_id, GL_BUFFER_SIZE, &size);
119 glNamedBufferData(
m_id, size,
nullptr, GL_DYNAMIC_DRAW);
thread_local const float vertices[]
Video.cpp galaxy.
thread_local const unsigned int indices[]
Abstraction for OpenGL vertex buffer objects.
unsigned int m_id
ID returned by OpenGL when generating buffer.
void buffer(std::span< Vertex > vertices, std::span< unsigned int > indices)
Create vertex buffer.
int count() const noexcept
Get the index count.
int m_count
Index buffer count.
VertexBuffer()
Constructor.
void sub_buffer_indices(const unsigned int ei, const int index_size, std::span< unsigned int > indices) const
Sub-buffer element/index buffer.
void sub_buffer_vertices(const unsigned int vi, const int vertex_size, const std::span< Vertex > vertices) const
Sub-buffer vertex buffer.
void sub_buffer(const unsigned int vi, const int vertex_size, const std::span< Vertex > vertices, const unsigned int ei, const int index_size, std::span< unsigned int > indices) const
Sub-buffer vertex buffer.
void clear() const
Clear buffer data.
void erase(const unsigned int vi, const int vertex_count, const unsigned int ei, const int index_count) const
Erase a specfic segment of data.
void * offset() noexcept
Gets index offset.
void reserve(const int vertex_count, const int index_count)
Create vertex buffer without uploading.
VertexBuffer & operator=(VertexBuffer &&) noexcept
Move assignment operator.
~VertexBuffer()
Destructor.
std::size_t m_offset
Index buffer offset.
unsigned int id() const noexcept
Get OpenGL handle.
Represents a single vertex point.