Program Listing for File Model.cpp
↰ Return to documentation for file (Src/GraphicsEngineVulkan/scene/Model.cpp
)
#include "Model.hpp"
#include "common/Utilities.hpp"
#include <iostream>
#include <unordered_map>
using namespace Kataglyphis;
Model::Model() {}
Model::Model(VulkanDevice *device) { this->device = device; }
void Model::cleanUp()
{
for (Texture texture : modelTextures) { texture.cleanUp(); }
for (VkSampler texture_sampler : modelTextureSamplers) {
vkDestroySampler(device->getLogicalDevice(), texture_sampler, nullptr);
}
mesh.cleanUp();
}
void Model::add_new_mesh(VulkanDevice *device,
VkQueue transfer_queue,
VkCommandPool command_pool,
std::vector<Vertex> &vertices,
std::vector<unsigned int> &indices,
std::vector<unsigned int> &materialIndex,
std::vector<ObjMaterial> &materials)
{
this->mesh = Mesh(device, transfer_queue, command_pool, vertices, indices, materialIndex, materials);
}
void Model::set_model(glm::mat4 model) { this->model = model; }
void Model::addTexture(Texture newTexture)
{
modelTextures.push_back(newTexture);
addSampler(newTexture);
}
uint32_t Model::getPrimitiveCount()
{
/*uint32_t number_of_indices = 0;
for (Mesh mesh : meshes) {
number_of_indices += mesh.get_index_count();
}
return number_of_indices / 3;*/
return mesh.getIndexCount() / 3;
}
Model::~Model() {}
void Model::addSampler(Texture newTexture)
{
VkSampler newSampler;
// sampler create info
VkSamplerCreateInfo sampler_create_info{};
sampler_create_info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
sampler_create_info.magFilter = VK_FILTER_LINEAR;
sampler_create_info.minFilter = VK_FILTER_LINEAR;
sampler_create_info.addressModeU = VK_SAMPLER_ADDRESS_MODE_REPEAT;
sampler_create_info.addressModeV = VK_SAMPLER_ADDRESS_MODE_REPEAT;
sampler_create_info.addressModeW = VK_SAMPLER_ADDRESS_MODE_REPEAT;
sampler_create_info.borderColor = VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK;
sampler_create_info.unnormalizedCoordinates = VK_FALSE;
sampler_create_info.mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR;
sampler_create_info.mipLodBias = 0.0f;
sampler_create_info.minLod = 0.0f;
sampler_create_info.maxLod = newTexture.getMipLevel();
sampler_create_info.anisotropyEnable = VK_TRUE;
sampler_create_info.maxAnisotropy = 16;// max anisotropy sample level
VkResult result = vkCreateSampler(device->getLogicalDevice(), &sampler_create_info, nullptr, &newSampler);
ASSERT_VULKAN(result, "Failed to create a texture sampler!")
modelTextureSamplers.push_back(newSampler);
}