#pragma once #include #include #include "util/uix.hpp" #include "assets/components/mesh_vertex_components.hpp" #include "generic/dynamic_vertex_buffer.hpp" #include "assets/dynamic_data_stores/dynamic_material_store.hpp" class dynamic_mesh_buffer : public dynamic_vertex_buffer< components::mesh_vertex::flags, components::mesh_vertex::position, components::mesh_vertex::normal, components::mesh_vertex::tex_coord, components::mesh_vertex::color, components::mesh_vertex::reflectance > { public: using index_type = ztu::u32; using triangle_type = std::array; [[nodiscard]] inline std::vector& positions(); [[nodiscard]] inline std::vector& normals(); [[nodiscard]] inline std::vector& tex_coords(); [[nodiscard]] inline std::vector& colors(); [[nodiscard]] inline std::vector& reflectances(); [[nodiscard]] inline std::vector& triangles(); [[nodiscard]] inline auto& material_id(); [[nodiscard]] inline const std::vector& positions() const; [[nodiscard]] inline const std::vector& normals() const; [[nodiscard]] inline const std::vector& tex_coords() const; [[nodiscard]] inline const std::vector& colors() const; [[nodiscard]] inline const std::vector& reflectances() const; [[nodiscard]] inline const std::vector& triangles() const; [[nodiscard]] inline const auto& material_id() const; inline void clear(); private: std::vector m_triangles{}; dynamic_material_store::id_type m_material_id{}; }; #define INCLUDE_DYNAMIC_MESH_DATA_IMPLEMENTATION #include "assets/dynamic_read_buffers/dynamic_mesh_buffer.ipp" #undef INCLUDE_DYNAMIC_MESH_DATA_IMPLEMENTATION