#ifndef INCLUDE_MESH_DATA_IMPLEMENTATION # error Never include this file directly include 'mesh_data.hpp' #endif namespace zgl { inline mesh_data::mesh_data( const GLuint vertex_vbo_id, const GLuint index_vbo_id, const GLuint vao_id, const ztu::u32 material_id, const mesh_vertex_components::flags components, const GLsizei index_count ) : m_handle{ .vao_id = vao_id, .index_count = index_count }, m_vertex_vbo_id{ vertex_vbo_id }, m_index_vbo_id{ index_vbo_id }, m_material_id{ material_id }, m_component_types{ components } {} inline mesh_data& mesh_data::operator=(mesh_data&& other) noexcept { if (&other != this) { this->~mesh_data(); m_handle = other.m_handle; m_vertex_vbo_id = other.m_vertex_vbo_id; m_index_vbo_id = other.m_index_vbo_id; m_material_id = other.m_material_id; m_component_types = other.m_component_types; other.m_handle.vao_id = 0; other.m_handle.index_count = 0; other.m_vertex_vbo_id = 0; other.m_index_vbo_id = 0; other.m_material_id = 0; other.m_component_types = mesh_vertex_components::flags::none; } return *this; } inline mesh_data::mesh_data(mesh_data&& other) noexcept : m_handle{ other.m_handle }, m_vertex_vbo_id{ other.m_vertex_vbo_id }, m_index_vbo_id{ other.m_index_vbo_id }, m_material_id{ other.m_material_id }, m_component_types{ other.m_component_types } { other.m_handle.vao_id = 0; other.m_handle.index_count = 0; other.m_vertex_vbo_id = 0; other.m_index_vbo_id = 0; other.m_material_id = 0; other.m_component_types = mesh_vertex_components::flags::none; } inline mesh_data::~mesh_data() { if (m_vertex_vbo_id) { glDeleteBuffers(1, &m_vertex_vbo_id); } if (m_index_vbo_id) { glDeleteBuffers(1, &m_index_vbo_id); } if (m_handle.vao_id) { glDeleteVertexArrays(1, &m_handle.vao_id); } } inline mesh_handle mesh_data::handle() const { return m_handle; } inline mesh_vertex_components::flags mesh_data::components() const { return m_component_types; } inline ztu::u32 mesh_data::material_id() const { return m_material_id; } }