#include <stdafx.h> #include "Model.h" #include "Mesh.h" #include "Texture.h" #include "Vertex.h" #include "Context.h" #include "ModelLoading.h" namespace fpr { Model::Model(const char* file_name, glm::mat4 model_matrix): m_primitives(ModelLoader::LoadModelAssimp(file_name)), m_index_buffer( m_primitives.indices.size() * sizeof(m_primitives.indices[0]), vk::BufferUsageFlagBits::eIndexBuffer, vk::MemoryPropertyFlagBits::eHostVisible), m_vertex_buffer( m_primitives.vertices.size() * sizeof(m_primitives.vertices[0]), vk::BufferUsageFlagBits::eVertexBuffer, vk::MemoryPropertyFlagBits::eHostVisible), m_model_matrix(model_matrix) { //Store the primitives. Index/Vertex buffer per MODEL not per Mesh. Allows for less frequent binding. m_index_buffer.Update(m_primitives.indices.data()); m_vertex_buffer.Update(m_primitives.vertices.data()); for(auto& mesh : m_primitives.meshes) { glm::mat4 new_mat = mesh.GetMatrix() * m_model_matrix; mesh.SetModelMatrix(new_mat); } } const std::vector<Mesh>& Model::GetMeshes() { return m_primitives.meshes; } fpr::Buffer& Model::GetVertexBuffer() { return m_vertex_buffer; } fpr::Buffer& Model::GetIndexBuffer() { return m_index_buffer; } } // namespace fpr