diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/vk-api.hpp | 47 | ||||
| -rw-r--r-- | include/vk-renderer.hpp | 23 |
2 files changed, 46 insertions, 24 deletions
diff --git a/include/vk-api.hpp b/include/vk-api.hpp index 52ebef6..53a33ba 100644 --- a/include/vk-api.hpp +++ b/include/vk-api.hpp @@ -2,12 +2,13 @@ #define __VK_API_HPP_ #include <vector> +#include <optional> #include "vk-context.hpp" struct Buffer { VmaAllocation alloc; - VkBuffer vkbuffer; + VkBuffer handle; void* mapped_ptr; }; @@ -15,9 +16,24 @@ struct ComputePipeline { VkShaderModule shader_module; VkDescriptorSetLayout descriptor_set_layout; VkPipelineLayout layout; - VkPipeline vkpipeline; + VkPipeline handle; }; +struct Image { + VkImage handle; + VkImageView view; + VkImageSubresourceRange subresource_range; + VkFormat format; +}; + +struct Swapchain { + size_t image_count; + std::vector<Image> images; + VkSwapchainKHR handle; +}; + +class window; + class vkapi { public: vkapi(); @@ -26,26 +42,47 @@ class vkapi { Buffer create_buffer(size_t data_size, VkBufferUsageFlags buffer_usage, VmaMemoryUsage mem_usage); void destroy_buffer(Buffer& buffer); + + Image create_image(VkExtent3D size, VkFormat format, VkImageUsageFlags usages); + void destroy_image(Image &image); + std::vector<Image> create_images(VkExtent3D size, VkFormat format, VkImageUsageFlags usages, size_t image_count); + void destroy_images(std::vector<Image> &images); + + VkFence create_fence(); void destroy_fence(VkFence fence); std::vector<VkFence> create_fences(size_t fences_count); - void destroy_fences(std::vector<VkFence> fences); + void destroy_fences(std::vector<VkFence> &fences); + VkSemaphore create_semaphore(); void destroy_semaphore(VkSemaphore semaphore); std::vector<VkSemaphore> create_semaphores(size_t semaphores_count); void destroy_semaphores(std::vector<VkSemaphore> &semaphores); + std::vector<VkCommandBuffer> create_command_buffers(size_t command_buffers_count); - void destroy_command_buffers(std::vector<VkCommandBuffer> command_buffers); + void destroy_command_buffers(std::vector<VkCommandBuffer> &command_buffers); + ComputePipeline create_compute_pipeline(const char* shader_path, std::vector<VkDescriptorSetLayoutBinding> bindings); void destroy_compute_pipeline(ComputePipeline &pipeline); + std::vector<VkDescriptorSet> create_descriptor_sets(VkDescriptorSetLayout descriptor_sets_layout, size_t descriptor_sets_count); - void destroy_descriptor_sets(std::vector<VkDescriptorSet> descriptor_sets); + void destroy_descriptor_sets(std::vector<VkDescriptorSet> &descriptor_sets); + + + // TODO: Maybe includes surface in the swapchain structure + VkSurfaceKHR create_surface(window& wnd); + void destroy_surface(VkSurfaceKHR surface); + + Swapchain create_swapchain(VkSurfaceKHR surface, size_t min_image_count, VkImageUsageFlags usages, std::optional<Swapchain> old_swapchain); + void destroy_swapchain(Swapchain swapchain); + void update_descriptor_set_buffer(VkDescriptorSet set, VkDescriptorSetLayoutBinding binding, Buffer& buffer); + void update_descriptor_set_image(VkDescriptorSet set, VkDescriptorSetLayoutBinding binding, VkImageView view); // private: vkcontext context; diff --git a/include/vk-renderer.hpp b/include/vk-renderer.hpp index c28049c..301aad2 100644 --- a/include/vk-renderer.hpp +++ b/include/vk-renderer.hpp @@ -22,21 +22,6 @@ class vkrenderer { Buffer compute_shader_buffer; private: - void create_surface(window& wnd); - - void create_swapchain(); - - void destroy_surface(); - - void destroy_swapchain(); - - void destroy_swapchain_images(); - - void destroy_descriptor_sets(); - - void update_descriptors_buffer(); - - void update_descriptors_image(); void handle_swapchain_result(VkResult function_result); @@ -57,10 +42,10 @@ class vkrenderer { VkSurfaceFormatKHR surface_format; VkSurfaceKHR platform_surface = VK_NULL_HANDLE; - VkSwapchainKHR swapchain = VK_NULL_HANDLE; - size_t swapchain_images_count = 3; - std::vector<VkImage> swapchain_images; - std::vector<VkImageView> swapchain_images_views; + + Swapchain swapchain; + + const uint32_t min_swapchain_image_count = 3; uint32_t current_image_index; }; |
