/* Crafter®.Graphics Copyright (C) 2026 Catcrafts® catcrafts.net This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 3.0 as published by the Free Software Foundation; This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ module; #ifdef CRAFTER_GRAPHICS_VULKAN #include "vulkan/vulkan.h" #endif export module Crafter.Graphics:DescriptorSetLayoutVulkan; #ifdef CRAFTER_GRAPHICS_VULKAN import std; import :VulkanDevice; import :Types; import Crafter.Event; export namespace Crafter { class DescriptorSetLayoutVulkan { public: VkDescriptorSetLayout layout; std::vector descriptors; DescriptorSetLayoutVulkan(std::vector&& layouts) : descriptors(std::move(layouts)) { VkDescriptorSetLayoutCreateInfo descriptorLayoutInfoMesh = { .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, .bindingCount = static_cast(descriptors.size()), .pBindings = descriptors.data() }; VulkanDevice::CheckVkResult(vkCreateDescriptorSetLayout(VulkanDevice::device, &descriptorLayoutInfoMesh, nullptr, &layout)); } }; template Descriptors> class DescriptorSetLayoutVulkanConst { public: inline static VkDescriptorSetLayout layout; constexpr static std::span descriptors = Descriptors; static void Init() { VkDescriptorSetLayoutCreateInfo descriptorLayoutInfoMesh = { .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, .bindingCount = DescriptorCount, .pBindings = Descriptors.data() }; VulkanDevice::CheckVkResult(vkCreateDescriptorSetLayout(VulkanDevice::device, &descriptorLayoutInfoMesh, nullptr, &layout)); } }; } #endif