sandbox
Loading...
Searching...
No Matches
separate_sampler.hpp
1#ifndef LIBSBX_GRAPHICS_IMAGES_SEPARATE_SAMPLER_HPP_
2#define LIBSBX_GRAPHICS_IMAGES_SEPARATE_SAMPLER_HPP_
3
4#include <libsbx/graphics/graphics_module.hpp>
5
6#include <libsbx/graphics/descriptor/descriptor.hpp>
7
8#include <libsbx/graphics/images/image.hpp>
9
10namespace sbx::graphics {
11
13
14public:
15
16 separate_sampler(VkFilter filter = VK_FILTER_LINEAR, VkSamplerAddressMode address_mode = VK_SAMPLER_ADDRESS_MODE_REPEAT) {
17 image::create_image_sampler(_handle, filter, address_mode, false, 1u);
18 }
19
21 auto& graphics_module = core::engine::get_module<graphics::graphics_module>();
22 auto& logical_device = graphics_module.logical_device();
23
24 vkDestroySampler(logical_device, _handle, nullptr);
25 }
26
27 static auto create_descriptor_set_layout_binding(std::uint32_t binding, VkDescriptorType descriptor_type, VkShaderStageFlags shader_stage_flags) noexcept -> VkDescriptorSetLayoutBinding {
28 auto descriptor_set_layout_binding = VkDescriptorSetLayoutBinding{};
29 descriptor_set_layout_binding.binding = binding;
30 descriptor_set_layout_binding.descriptorType = descriptor_type;
31 descriptor_set_layout_binding.stageFlags = shader_stage_flags;
32 descriptor_set_layout_binding.descriptorCount = 1u;
33 descriptor_set_layout_binding.pImmutableSamplers = nullptr;
34
35 return descriptor_set_layout_binding;
36 }
37
38 auto write_descriptor_set(std::uint32_t binding, VkDescriptorType descriptor_type) const noexcept -> graphics::write_descriptor_set override {
39 auto descriptor_image_infos = std::vector<VkDescriptorImageInfo>{};
40
41 auto descriptor_image_info = VkDescriptorImageInfo{};
42 descriptor_image_info.imageLayout = VK_IMAGE_LAYOUT_UNDEFINED;
43 descriptor_image_info.imageView = nullptr;
44 descriptor_image_info.sampler = _handle;
45
46 descriptor_image_infos.push_back(descriptor_image_info);
47
48 auto descriptor_write = VkWriteDescriptorSet{};
49 descriptor_write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
50 descriptor_write.dstSet = nullptr;
51 descriptor_write.dstBinding = binding;
52 descriptor_write.dstArrayElement = 0;
53 descriptor_write.descriptorCount = 1;
54 descriptor_write.descriptorType = descriptor_type;
55
56 return graphics::write_descriptor_set{descriptor_write, descriptor_image_infos};
57 }
58
59 auto handle() const noexcept -> VkSampler {
60 return _handle;
61 }
62
63 operator VkSampler() const noexcept {
64 return _handle;
65 }
66
67private:
68
69 VkSampler _handle;
70
71}; // class separate_sampler
72
73} // namespace sbx::graphics
74
75#endif // LIBSBX_GRAPHICS_IMAGES_SEPARATE_SAMPLER_HPP_
Definition: descriptor.hpp:33
Module for managing rendering specific tasks.
Definition: graphics_module.hpp:59
Definition: logical_device.hpp:55
Definition: separate_sampler.hpp:12
Definition: descriptor.hpp:12