diff options
author | Frederico Linhares <fred@linhares.blue> | 2023-10-30 15:06:56 -0300 |
---|---|---|
committer | Frederico Linhares <fred@linhares.blue> | 2023-10-30 15:06:56 -0300 |
commit | 85337fb5aa1ce63023ddd5e284ae6b2ccdbb5e30 (patch) | |
tree | 16e2538b1039067c9732645f301ae717a8855a49 /src/vk/sprite.cpp | |
parent | c4efa865f359c5c9e365d5faa8ae3c88f3657cb7 (diff) |
refa Move texture sampler to texture object
Diffstat (limited to 'src/vk/sprite.cpp')
-rw-r--r-- | src/vk/sprite.cpp | 92 |
1 files changed, 1 insertions, 91 deletions
diff --git a/src/vk/sprite.cpp b/src/vk/sprite.cpp index 146d07d..95e11a3 100644 --- a/src/vk/sprite.cpp +++ b/src/vk/sprite.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2022 Frederico de Oliveira Linhares + * Copyright 2022-2023 Frederico de Oliveira Linhares * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -73,98 +73,8 @@ unload_mesh(void *obj) delete self->sprite->source_buffer; } -void -load_descriptor_set_pool(void *obj) -{ - auto self = static_cast<SpriteBuilder*>(obj); - - std::array<VkDescriptorPoolSize, 1> descriptor_pool_sizes{}; - descriptor_pool_sizes[0].type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; - descriptor_pool_sizes[0].descriptorCount = - cg_core.vk_swapchain->images_count; - - VkDescriptorPoolCreateInfo pool_info{}; - pool_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO; - pool_info.pNext = nullptr; - pool_info.flags = 0; - pool_info.maxSets = cg_core.vk_swapchain->images_count; - pool_info.poolSizeCount = descriptor_pool_sizes.size(); - pool_info.pPoolSizes = descriptor_pool_sizes.data(); - - if(vkCreateDescriptorPool( - self->sprite->queue_family->device->device, &pool_info, nullptr, - &self->sprite->descriptor_pool) != VK_SUCCESS) - throw CommandError{"Failed to create a Vulkan descriptor pool."}; - -} - -void -unload_descriptor_set_pool(void *obj) -{ - auto self = static_cast<SpriteBuilder*>(obj); - - vkDestroyDescriptorPool( - self->sprite->queue_family->device->device, self->sprite->descriptor_pool, - nullptr); -} - -void -load_descriptor_sets(void *obj) -{ - auto self = static_cast<SpriteBuilder*>(obj); - - std::vector<VkDescriptorSetLayout> layouts( - cg_core.vk_swapchain->images_count, - cg_core.vk_descriptor_set_layout->sprite); - - VkDescriptorSetAllocateInfo alloc_info{}; - alloc_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO; - alloc_info.descriptorPool = self->sprite->descriptor_pool; - alloc_info.descriptorSetCount = layouts.size(); - alloc_info.pSetLayouts = layouts.data(); - - self->sprite->descriptor_sets.resize(layouts.size()); - if(vkAllocateDescriptorSets( - self->sprite->queue_family->device->device, &alloc_info, - self->sprite->descriptor_sets.data()) != VK_SUCCESS) - CommandError{"Failed to create Vulkan descriptor set."}; -} - -void -load_buffers_to_descriptor_sets(void *obj) -{ - auto self = static_cast<SpriteBuilder*>(obj); - - for(auto i{0}; i < cg_core.vk_swapchain->images_count; i++) - { - VkDescriptorImageInfo image_info{}; - image_info.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; - image_info.imageView = self->sprite->texture->view; - image_info.sampler = self->sprite->texture->sampler; - - std::array<VkWriteDescriptorSet, 1> write_descriptors{}; - write_descriptors[0].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; - write_descriptors[0].dstSet = self->sprite->descriptor_sets[i]; - write_descriptors[0].dstBinding = 0; - write_descriptors[0].dstArrayElement = 0; - write_descriptors[0].descriptorCount = 1; - write_descriptors[0].descriptorType = - VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; - write_descriptors[0].pBufferInfo = nullptr; - write_descriptors[0].pImageInfo = &image_info; - write_descriptors[0].pTexelBufferView = nullptr; - - vkUpdateDescriptorSets( - cg_core.vk_device_with_swapchain->device, write_descriptors.size(), - write_descriptors.data(), 0, nullptr); - } -} - static const CommandChain loader{ {&load_mesh, &unload_mesh}, - {&load_descriptor_set_pool, &unload_descriptor_set_pool}, - {&load_descriptor_sets, nullptr}, - {&load_buffers_to_descriptor_sets, nullptr}, }; } |