.. _program_listing_file_Src_GraphicsEngineVulkan_scene_Model.cpp: Program Listing for File Model.cpp ================================== |exhale_lsh| :ref:`Return to documentation for file ` (``Src/GraphicsEngineVulkan/scene/Model.cpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #include "Model.hpp" #include "common/Utilities.hpp" #include #include 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 &vertices, std::vector &indices, std::vector &materialIndex, std::vector &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); }