165 [[nodiscard]]
constexpr auto id() const -> uint32_t {
return m_id; }
205 glGenVertexArrays(1, &
m_id);
210 glDeleteVertexArrays(1, &
m_id);
215 glBindVertexArray(
m_id);
220 glBindVertexArray(0);
225 m_vertex_buffers.push_back(std::move(vbo));
226 glBindVertexArray(m_id);
233 for (
const auto& [name, element_count, offset, type] : vbo_ref.
layout().get_attributes()) {
234 glEnableVertexAttribArray(attrib_index);
235 glVertexAttribPointer(
240 static_cast<int32_t
>(vbo_ref.
layout().stride()),
241 reinterpret_cast<const void*
>(offset));
244 return std::prev(m_vertex_buffers.end());
251 glBindVertexArray(
m_id);
254 for (
const auto& [name, element_count, offset, type] :
m_instanced_vbo->layout().get_attributes()) {
256 glVertexAttribPointer(
262 reinterpret_cast<const void*
>(offset));
271 glBindVertexArray(
m_id);
Element Buffer Object (EBO) wrapper.
void bind() const
Bind the index buffer object.
Vertex Array Object (VAO) wrapper.
constexpr auto instanced_data() -> std::optional< vertex_buffer_inst > &
Get the instance buffer object.
index_buffer m_index_buffer
void bind() const
Bind the vertex array object.
void set_index_buffer(index_buffer &&ibo)
Set the index buffer object.
constexpr auto id() const -> uint32_t
Get the vertex array object id.
static void unbind()
Unbind the vertex array object.
constexpr auto buffers_data() -> std::list< vertex_buffer > &
Get the vertex buffer object at the specified index.
auto operator=(vertex_array &&other) noexcept -> vertex_array &
Move assignment operator.
vertex_array(const vertex_array &)=delete
std::optional< vertex_buffer_inst > m_instanced_vbo
vertex_array() noexcept
Construct a new vertex array object.
void set_instance_buffer(vertex_buffer_inst &&vbo)
Set the instance buffer object.
std::list< vertex_buffer > m_vertex_buffers
auto operator=(const vertex_array &) -> vertex_array &=delete
constexpr auto index_data() -> index_buffer &
Get the index buffer object.
auto add_vertex_buffer(vertex_buffer &&vbo) -> vertex_array::iterator_t
Add a vertex buffer to the vertex array object.
vertex_array(vertex_array &&other) noexcept
Construct a new vertex array object from another one.
void clear_instance_buffer()
Clear the instance buffer object.
std::list< vertex_buffer >::iterator iterator_t
Iterator type returned from add_vertex_buffer.
A vertex buffer object for instanced rendering.
Vertex Buffer Object (VBO) wrapper.
constexpr auto layout() const -> const vertex_buffer_layout &
void bind() const
Bind the vertex buffer object.
Element Buffer Object (EBO) wrapper.
static constexpr auto component_count(u_type type) -> std::uint16_t
Get the number of components in the shader data type, useful for vector types.
static constexpr auto to_opengl_underlying_type(u_type type) -> std::uint32_t
Obtains the OpenGL type of the underlying type of the shader data type.
Vertex Buffer Object (VBO) wrapper.
Vertex buffer object for instanced rendering.