aboutsummaryrefslogtreecommitdiffstats
path: root/include/vk-renderer.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/vk-renderer.hpp')
-rw-r--r--include/vk-renderer.hpp29
1 files changed, 18 insertions, 11 deletions
diff --git a/include/vk-renderer.hpp b/include/vk-renderer.hpp
index 63dcbf7..614569a 100644
--- a/include/vk-renderer.hpp
+++ b/include/vk-renderer.hpp
@@ -49,6 +49,10 @@ class vkrenderer {
void update_images();
+ void begin_frame();
+
+ void finish_frame();
+
static void queue_image_update(Texture* texture);
static Buffer* create_buffer(size_t size);
@@ -59,8 +63,6 @@ class vkrenderer {
static Texture* create_2d_texture(size_t width, size_t height, VkFormat format, Sampler *sampler = nullptr);
- static void destroy_2d_texture(Texture* texture);
-
static Sampler* create_sampler(VkFilter filter, VkSamplerAddressMode address_mode);
@@ -86,10 +88,6 @@ class vkrenderer {
private:
- void begin_frame();
-
- void finish_frame();
-
void handle_swapchain_result(VkResult function_result);
@@ -116,6 +114,7 @@ class vkrenderer {
VkSurfaceKHR platform_surface;
swapchain swapchain;
std::vector<Texture*> swapchain_textures;
+ std::vector<VkCommandBuffer> recorded_command_buffers;
const uint32_t min_swapchain_image_count = 3;
@@ -151,7 +150,7 @@ class RingBuffer {
handle device_buffer;
size_t buffer_size;
- off_t ptr;
+ off_t ptr = 0;
};
class Sampler {
@@ -164,7 +163,7 @@ class Texture {
public:
Texture(handle image_handle) {
- auto image = vkrenderer::api.get_image(image_handle);
+ const auto &image = vkrenderer::api.get_image(image_handle);
width = image.size.width;
height = image.size.height;
depth = image.size.depth;
@@ -188,11 +187,19 @@ class Texture {
}
data = new_data;
- // vkrenderer::update_image(this);
+ vkrenderer::queue_image_update(this);
+ }
+
+ ~Texture() {
+ vkrenderer::api.destroy_image(device_image);
+
+ if (data == nullptr) {
+ free(data);
+ }
}
- size_t size() const {
- auto image = vkrenderer::api.get_image(device_image);
+ [[nodiscard]]size_t size() const {
+ const auto& image = vkrenderer::api.get_image(device_image);
return width * height * depth * pixel_size(image.format);
}