aurora-rendering-engine/include/scene/mesh.h

80 lines
1.9 KiB
C++

#ifndef ARE_INCLUDE_SCENE_MESH_H
#define ARE_INCLUDE_SCENE_MESH_H
#include "basic/types.h"
#include <vector>
namespace are {
/// @brief Mesh data container
class Mesh {
public:
/// @brief Constructor
Mesh();
/// @brief Destructor
~Mesh();
/// @brief Set vertex data
/// @param vertices Vertex array
void set_vertices(const std::vector<Vertex>& vertices);
/// @brief Set index data
/// @param indices Index array
void set_indices(const std::vector<uint>& indices);
/// @brief Set material index
/// @param material_id Material index
void set_material(uint material_id);
/// @brief Set transform matrix
/// @param transform Transform matrix
void set_transform(const Mat4& transform);
/// @brief Get vertices
/// @return Vertex array
const std::vector<Vertex>& get_vertices() const { return vertices_; }
/// @brief Get indices
/// @return Index array
const std::vector<uint>& get_indices() const { return indices_; }
/// @brief Get material index
/// @return Material index
uint get_material() const { return material_id_; }
/// @brief Get transform matrix
/// @return Transform matrix
const Mat4& get_transform() const { return transform_; }
/// @brief Upload mesh data to GPU
/// @return True if upload succeeded
bool upload_to_gpu();
/// @brief Release GPU resources
void release_gpu_resources();
/// @brief Get VAO handle
/// @return VAO handle
uint get_vao() const { return vao_; }
/// @brief Check if mesh is uploaded to GPU
/// @return True if uploaded
bool is_uploaded() const { return uploaded_; }
private:
std::vector<Vertex> vertices_;
std::vector<uint> indices_;
uint material_id_;
Mat4 transform_;
uint vao_;
uint vbo_;
uint ebo_;
bool uploaded_;
};
} // namespace are
#endif // ARE_INCLUDE_SCENE_MESH_H