aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/material.hpp16
-rw-r--r--include/vk-api.hpp3
-rw-r--r--include/vk-renderer.hpp29
3 files changed, 29 insertions, 19 deletions
diff --git a/include/material.hpp b/include/material.hpp
index 5ac08f1..71dd4ca 100644
--- a/include/material.hpp
+++ b/include/material.hpp
@@ -6,12 +6,6 @@
class Texture;
-struct gpu_texture {
- uint32_t image_id;
- uint32_t sampler_id;
- uint32_t padding[2];
-};
-
struct material {
color base_color;
Texture* base_color_texture;
@@ -19,3 +13,13 @@ struct material {
float metalness = 1.f;
float roughness = 1.f;
};
+
+struct gpu_material {
+ color base_color;
+ uint32_t albedo_texture_id = 0;
+ uint32_t albedo_texture_sampler_id = 0;
+ uint32_t metallic_roughness_texture_id = 0;
+ uint32_t metallic_roughness_texture_sampler_id = 0;
+ float metalness = 1.f;
+ float roughness = 1.f;
+};
diff --git a/include/vk-api.hpp b/include/vk-api.hpp
index 40ccb50..2318eff 100644
--- a/include/vk-api.hpp
+++ b/include/vk-api.hpp
@@ -192,8 +192,7 @@ class vkapi {
void end_record(VkCommandBuffer command_buffer);
- VkResult submit_graphics(VkCommandBuffer command_buffer, VkSemaphore wait_semaphore, VkSemaphore signal_semaphore, VkFence submission_fence) const;
- VkResult submit_copy(VkCommandBuffer command_buffer, VkSemaphore wait_semaphore, VkSemaphore signal_semaphore, VkFence submission_fence) const;
+ VkResult submit(VkCommandBuffer command_buffers[], size_t command_buffers_count, VkSemaphore wait_semaphore, VkSemaphore signal_semaphore, VkFence submission_fence) const;
VkResult present(swapchain& swapchain, uint32_t image_index, VkSemaphore wait_semaphore) const;
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);
}