From 4a9fdb5d2cad80ba87e7f7c9acaf45e686bd1279 Mon Sep 17 00:00:00 2001
From: Lava Block <the@lava-block.com>
Date: Sat, 22 May 2021 12:56:20 +0200
Subject: [PATCH] optional_index + current_frame

---
 doc/Tutorial.md            |  6 +++---
 liblava/frame/renderer.cpp | 12 ++++++------
 liblava/frame/renderer.hpp |  8 +++++---
 tests/tests.cpp            | 18 +++++++++---------
 4 files changed, 23 insertions(+), 21 deletions(-)

diff --git a/doc/Tutorial.md b/doc/Tutorial.md
index 4c444286..fc071fa4 100644
--- a/doc/Tutorial.md
+++ b/doc/Tutorial.md
@@ -224,11 +224,11 @@ frame.add_run([&]() {
     if (window.resize_request())
         return window.handle_resize();
 
-    auto frame_index = renderer.begin_frame();
-    if (!frame_index)
+    optional_index current_frame = renderer.begin_frame();
+    if (!current_frame.has_value())
         return run_continue;
 
-    return renderer.end_frame({ cmd_bufs[*frame_index] });
+    return renderer.end_frame({ cmd_bufs[*current_frame] });
 });
 
 frame.add_run_end([&]() {
diff --git a/liblava/frame/renderer.cpp b/liblava/frame/renderer.cpp
index 03725d8f..e269e408 100644
--- a/liblava/frame/renderer.cpp
+++ b/liblava/frame/renderer.cpp
@@ -73,7 +73,7 @@ namespace lava {
         queued_frames = 0;
     }
 
-    std::optional<index> renderer::begin_frame() {
+    optional_index renderer::begin_frame() {
         if (!active)
             return {};
 
@@ -98,15 +98,15 @@ namespace lava {
 
         auto current_semaphore = image_acquired_semaphores[current_sync];
 
-        auto result = device->vkAcquireNextImageKHR(target->get(), UINT64_MAX, current_semaphore, 0, &frame_index);
+        auto result = device->vkAcquireNextImageKHR(target->get(), UINT64_MAX, current_semaphore, 0, &current_frame);
         if (result.value == VK_ERROR_OUT_OF_DATE_KHR) {
             target->request_reload();
             return {};
         }
 
         // because frames might not come in sequential order current frame might still be locked
-        if ((fences_in_use[frame_index] != 0) && (fences_in_use[frame_index] != fences[current_sync])) {
-            auto result = device->vkWaitForFences(1, &fences_in_use[frame_index], VK_TRUE, UINT64_MAX);
+        if ((fences_in_use[current_frame] != 0) && (fences_in_use[current_frame] != fences[current_sync])) {
+            auto result = device->vkWaitForFences(1, &fences_in_use[current_frame], VK_TRUE, UINT64_MAX);
 
             if (result.value == VK_ERROR_OUT_OF_DATE_KHR) {
                 target->request_reload();
@@ -117,7 +117,7 @@ namespace lava {
                 return {};
         }
 
-        fences_in_use[frame_index] = fences[current_sync];
+        fences_in_use[current_frame] = fences[current_sync];
 
         if (!result)
             return {};
@@ -154,7 +154,7 @@ namespace lava {
             return false;
 
         std::array<VkSwapchainKHR, 1> const swapchains = { target->get() };
-        std::array<ui32, 1> const indices = { frame_index };
+        std::array<ui32, 1> const indices = { current_frame };
 
         VkPresentInfoKHR const present_info{
             .sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
diff --git a/liblava/frame/renderer.hpp b/liblava/frame/renderer.hpp
index e6a2b834..146202c3 100644
--- a/liblava/frame/renderer.hpp
+++ b/liblava/frame/renderer.hpp
@@ -9,11 +9,13 @@
 
 namespace lava {
 
+    using optional_index = std::optional<index>;
+
     struct renderer : id_obj {
         bool create(swapchain* target);
         void destroy();
 
-        std::optional<index> begin_frame();
+        optional_index begin_frame();
         bool end_frame(VkCommandBuffers const& cmd_buffers);
 
         bool frame(VkCommandBuffers const& cmd_buffers) {
@@ -24,7 +26,7 @@ namespace lava {
         }
 
         index get_frame() const {
-            return frame_index;
+            return current_frame;
         }
 
         device_ptr get_device() {
@@ -42,7 +44,7 @@ namespace lava {
 
         swapchain* target = nullptr;
 
-        index frame_index = 0;
+        index current_frame = 0;
         ui32 queued_frames = 2;
 
         ui32 current_sync = 0;
diff --git a/tests/tests.cpp b/tests/tests.cpp
index 919de0e1..a29050d4 100644
--- a/tests/tests.cpp
+++ b/tests/tests.cpp
@@ -167,11 +167,11 @@ LAVA_TEST(4, "clear color") {
         if (window.resize_request())
             return window.handle_resize();
 
-        auto frame_index = renderer.begin_frame();
-        if (!frame_index)
+        optional_index current_frame = renderer.begin_frame();
+        if (!current_frame.has_value())
             return run_continue;
 
-        return renderer.end_frame({ cmd_bufs[*frame_index] });
+        return renderer.end_frame({ cmd_bufs[*current_frame] });
     });
 
     frame.add_run_end([&]() {
@@ -255,11 +255,11 @@ LAVA_TEST(5, "color block") {
         if (window.resize_request())
             return window.handle_resize();
 
-        auto frame_index = renderer.begin_frame();
-        if (!frame_index)
+        optional_index current_frame = renderer.begin_frame();
+        if (!current_frame.has_value())
             return run_continue;
 
-        if (!block.process(*frame_index))
+        if (!block.process(*current_frame))
             return run_abort;
 
         return renderer.end_frame(block.get_buffers());
@@ -338,11 +338,11 @@ LAVA_TEST(6, "forward shading") {
                 frame.set_wait_for_events(false);
         }
 
-        auto frame_index = renderer.begin_frame();
-        if (!frame_index)
+        optional_index current_frame = renderer.begin_frame();
+        if (!current_frame.has_value())
             return run_continue;
 
-        if (!block.process(*frame_index))
+        if (!block.process(*current_frame))
             return run_abort;
 
         return renderer.end_frame(block.get_buffers());
-- 
GitLab