aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorladevieq <ladevie.quentin@gmail.com>2021-01-29 23:56:55 +0100
committerladevieq <ladevie.quentin@gmail.com>2021-01-29 23:56:55 +0100
commitc5ac7ee3f91efc60d87a59706c9ce2970116b865 (patch)
treed6dc3c5c23f81a5ac05fc711a6353338d9291037 /include
parent34c2b9b450c0f5c695a699ba4ae3f93470057ccb (diff)
Finished moving api resources creation functions
Diffstat (limited to 'include')
-rw-r--r--include/vk-api.hpp47
-rw-r--r--include/vk-renderer.hpp23
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;
};