Newer
Older
ForwardPlusRenderer / src / Model.cpp
#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)
{
  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