From 353398769a1cd9ef2de12d1910051261f8de7cd8 Mon Sep 17 00:00:00 2001
From: Lava Block <the@lava-block.com>
Date: Thu, 15 Oct 2020 12:48:42 +0200
Subject: [PATCH] minor adjustments

---
 DOCS.md                 | 36 +++++++++++++++-----------
 liblava/base/base.hpp   |  3 +++
 liblava/core/math.hpp   |  2 +-
 liblava/core/time.hpp   |  2 ++
 liblava/frame/frame.hpp |  7 +++++
 liblava/frame/input.hpp |  3 +++
 liblava/util/random.hpp |  5 ++++
 tests/tests.cpp         | 57 ++++++++++++++++++++++-------------------
 8 files changed, 73 insertions(+), 42 deletions(-)

diff --git a/DOCS.md b/DOCS.md
index 67ef65fc..ecb07ae7 100644
--- a/DOCS.md
+++ b/DOCS.md
@@ -66,15 +66,15 @@ if (!frame.ready())
 auto count = 0;
 
 frame.add_run([&]() {
-    sleep(seconds(1));
+    sleep(one_second);
     count++;
 
-    log()->debug("{} - running {} sec", count, to_sec(frame.get_running_time()));
+    log()->debug("{} - running {} sec", count, frame.get_running_time_sec());
 
     if (count == 3)
         frame.shut_down();
 
-    return true;
+    return run_continue;
 });
 
 return frame.run();
@@ -104,7 +104,7 @@ input.key.listeners.add([&](key_event::ref event) {
     if (event.pressed(key::escape))
         return frame.shut_down();
     
-    return false;
+    return input_ignore;
 });
 
 frame.add_run([&]() {
@@ -113,7 +113,7 @@ frame.add_run([&]() {
     if (window.close_request())
         frame.shut_down();
 
-    return true;
+    return run_continue;
 });
 
 return frame.run();
@@ -141,7 +141,7 @@ input.key.listeners.add([&](key_event::ref event) {
     if (event.pressed(key::escape))
         return frame.shut_down();
 
-    return false;
+    return input_ignore;
 });
 
 auto device = frame.create_device();
@@ -163,17 +163,17 @@ VkCommandBuffers cmd_bufs(frame_count);
 
 auto build_cmd_bufs = [&]() {
     if (!device->vkCreateCommandPool(device->graphics_queue().family, &cmd_pool))
-        return false;
+        return build_failed;
 
     if (!device->vkAllocateCommandBuffers(cmd_pool, frame_count, cmd_bufs.data()))
-        return false;
+        return build_failed;
 
     VkCommandBufferBeginInfo const begin_info{
         .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
         .flags = VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT,
     };
 
-    VkClearColorValue const clear_color = { random(0.f, 1.f), random(0.f, 1.f), random(0.f, 1.f), 0.f };
+    VkClearColorValue const clear_color = { random(1.f), random(1.f), random(1.f), 0.f };
 
     VkImageSubresourceRange const image_range{
         .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
@@ -186,7 +186,7 @@ auto build_cmd_bufs = [&]() {
         auto frame_image = render_target->get_image(i);
 
         if (failed(device->call().vkBeginCommandBuffer(cmd_buf, &begin_info)))
-            return false;
+            return build_failed;
 
         insert_image_memory_barrier(device, cmd_buf, frame_image,
                                     VK_ACCESS_MEMORY_READ_BIT, VK_ACCESS_TRANSFER_WRITE_BIT,
@@ -204,10 +204,10 @@ auto build_cmd_bufs = [&]() {
                                     image_range);
 
         if (failed(device->call().vkEndCommandBuffer(cmd_buf)))
-            return false;
+            return build_failed;
     }
 
-    return true;
+    return build_done;
 };
 
 auto clean_cmd_bufs = [&]() {
@@ -232,7 +232,7 @@ frame.add_run([&]() {
 
     auto frame_index = plotter.begin_frame();
     if (!frame_index)
-        return true;
+        return run_continue;
 
     return plotter.end_frame({ cmd_bufs[*frame_index] });
 });
@@ -285,7 +285,7 @@ if (!block.create(device, frame_count, device->graphics_queue().family))
     return error::create_failed;
 
 block.add_command([&](VkCommandBuffer cmd_buf) {
-    VkClearColorValue const clear_color = { random(0.f, 1.f), random(0.f, 1.f), random(0.f, 1.f), 0.f };
+    VkClearColorValue const clear_color = { random(1.f), random(1.f), random(1.f), 0.f };
 
     VkImageSubresourceRange const image_range{
         .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
@@ -324,7 +324,7 @@ All we need to do now is to process the block in the run loop:
 
 ```c++
 if (!block.process(*frame_index))
-    return false;
+    return run_abort;
 
 return plotter.end_frame(block.get_buffers());
 ```
@@ -474,6 +474,12 @@ You can use **liblava** as a *git submodule* in your project ➜ Like in the [st
 
 <br />
 
+### Conan Package Manager
+
+If you are familiar with [Conan](https://conan.io/) then you can build our [package recipe](https://github.com/liblava/conan-liblava)
+
+<br />
+
 Alternatively - You can compile and install a specific version for multiple projects: 
 
 ```bash
diff --git a/liblava/base/base.hpp b/liblava/base/base.hpp
index 5a5d8f31..fc17c948 100644
--- a/liblava/base/base.hpp
+++ b/liblava/base/base.hpp
@@ -78,6 +78,9 @@ namespace lava {
         }
     };
 
+    constexpr bool const build_failed = false;
+    constexpr bool const build_done = true;
+
     using VkAttachments = std::vector<VkImageViews>;
     using VkAttachmentsRef = VkAttachments const&;
 
diff --git a/liblava/core/math.hpp b/liblava/core/math.hpp
index c61cea95..234efca7 100644
--- a/liblava/core/math.hpp
+++ b/liblava/core/math.hpp
@@ -81,6 +81,6 @@ namespace lava {
         return (x + y - 1) / y;
     }
 
-    v3 const default_color = v3{ 0.8118f, 0.0627f, 0.1255f }; // #CF1020 : 207, 16, 32
+    constexpr v3 const default_color = v3{ 0.8118f, 0.0627f, 0.1255f }; // #CF1020 : 207, 16, 32
 
 } // namespace lava
diff --git a/liblava/core/time.hpp b/liblava/core/time.hpp
index 0f43380f..080d8966 100644
--- a/liblava/core/time.hpp
+++ b/liblava/core/time.hpp
@@ -15,6 +15,8 @@ namespace lava {
     using milliseconds = std::chrono::milliseconds;
     using ms = milliseconds;
 
+    constexpr seconds const one_second = seconds(1);
+
     using clock = std::chrono::high_resolution_clock;
     using time_point = clock::time_point;
     using duration = clock::duration;
diff --git a/liblava/frame/frame.hpp b/liblava/frame/frame.hpp
index de04cb7f..dca2a760 100644
--- a/liblava/frame/frame.hpp
+++ b/liblava/frame/frame.hpp
@@ -39,6 +39,9 @@ namespace lava {
 
     ms now();
 
+    constexpr bool const run_abort = false;
+    constexpr bool const run_continue = true;
+
     struct frame : interface, no_copy_no_move {
         using ptr = std::shared_ptr<frame>;
 
@@ -76,6 +79,10 @@ namespace lava {
             return now() - start_time;
         }
 
+        r64 get_running_time_sec() const {
+            return to_sec(get_running_time());
+        }
+
         argh::parser const& get_cmd_line() const {
             return config.cmd_line;
         }
diff --git a/liblava/frame/input.hpp b/liblava/frame/input.hpp
index 1568024a..3d87762d 100644
--- a/liblava/frame/input.hpp
+++ b/liblava/frame/input.hpp
@@ -319,6 +319,9 @@ namespace lava {
         id_listeners<T> listeners;
     };
 
+    constexpr bool const input_ignore = false;
+    constexpr bool const input_done = true;
+
     struct input : id_obj {
         input_events<key_event> key;
         input_events<scroll_event> scroll;
diff --git a/liblava/util/random.hpp b/liblava/util/random.hpp
index 3ea2ba2c..7515d48b 100644
--- a/liblava/util/random.hpp
+++ b/liblava/util/random.hpp
@@ -40,6 +40,11 @@ namespace lava {
         return random_generator::instance().get(low, high);
     }
 
+    template<typename T>
+    inline T random(T high) {
+        return random_generator::instance().get({}, high);
+    }
+
     struct pseudo_random_generator {
         explicit pseudo_random_generator(ui32 seed)
         : seed(seed) {}
diff --git a/tests/tests.cpp b/tests/tests.cpp
index 99371880..0db5d2df 100644
--- a/tests/tests.cpp
+++ b/tests/tests.cpp
@@ -20,15 +20,15 @@ LAVA_TEST(2, "run loop") {
     auto count = 0;
 
     frame.add_run([&]() {
-        sleep(seconds(1));
+        sleep(one_second);
         count++;
 
-        log()->debug("{} - running {} sec", count, to_sec(frame.get_running_time()));
+        log()->debug("{} - running {} sec", count, frame.get_running_time_sec());
 
         if (count == 3)
             frame.shut_down();
 
-        return true;
+        return run_continue;
     });
 
     return frame.run();
@@ -50,7 +50,7 @@ LAVA_TEST(3, "window input") {
         if (event.pressed(key::escape))
             return frame.shut_down();
 
-        return false;
+        return input_ignore;
     });
 
     frame.add_run([&]() {
@@ -59,7 +59,7 @@ LAVA_TEST(3, "window input") {
         if (window.close_request())
             frame.shut_down();
 
-        return true;
+        return run_continue;
     });
 
     return frame.run();
@@ -81,7 +81,7 @@ LAVA_TEST(4, "clear color") {
         if (event.pressed(key::escape))
             return frame.shut_down();
 
-        return false;
+        return input_ignore;
     });
 
     auto device = frame.create_device();
@@ -103,17 +103,17 @@ LAVA_TEST(4, "clear color") {
 
     auto build_cmd_bufs = [&]() {
         if (!device->vkCreateCommandPool(device->graphics_queue().family, &cmd_pool))
-            return false;
+            return build_failed;
 
         if (!device->vkAllocateCommandBuffers(cmd_pool, frame_count, cmd_bufs.data()))
-            return false;
+            return build_failed;
 
         VkCommandBufferBeginInfo const begin_info{
             .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
             .flags = VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT,
         };
 
-        VkClearColorValue const clear_color = { lava::random(0.f, 1.f), lava::random(0.f, 1.f), lava::random(0.f, 1.f), 0.f };
+        VkClearColorValue const clear_color = { lava::random(1.f), lava::random(1.f), lava::random(1.f), 0.f };
 
         VkImageSubresourceRange const image_range{
             .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
@@ -126,7 +126,7 @@ LAVA_TEST(4, "clear color") {
             auto frame_image = render_target->get_image(i);
 
             if (failed(device->call().vkBeginCommandBuffer(cmd_buf, &begin_info)))
-                return false;
+                return build_failed;
 
             insert_image_memory_barrier(device, cmd_buf, frame_image,
                                         VK_ACCESS_MEMORY_READ_BIT, VK_ACCESS_TRANSFER_WRITE_BIT,
@@ -141,10 +141,10 @@ LAVA_TEST(4, "clear color") {
                                         VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, image_range);
 
             if (failed(device->call().vkEndCommandBuffer(cmd_buf)))
-                return false;
+                return build_failed;
         }
 
-        return true;
+        return build_done;
     };
 
     auto clean_cmd_bufs = [&]() {
@@ -169,7 +169,7 @@ LAVA_TEST(4, "clear color") {
 
         auto frame_index = plotter.begin_frame();
         if (!frame_index)
-            return true;
+            return run_continue;
 
         return plotter.end_frame({ cmd_bufs[*frame_index] });
     });
@@ -200,7 +200,7 @@ LAVA_TEST(5, "color block") {
         if (event.pressed(key::escape))
             return frame.shut_down();
 
-        return false;
+        return input_ignore;
     });
 
     auto device = frame.create_device();
@@ -223,7 +223,7 @@ LAVA_TEST(5, "color block") {
         return error::create_failed;
 
     block.add_command([&](VkCommandBuffer cmd_buf) {
-        VkClearColorValue const clear_color = { lava::random(0.f, 1.f), lava::random(0.f, 1.f), lava::random(0.f, 1.f), 0.f };
+        VkClearColorValue const clear_color = { lava::random(1.f), lava::random(1.f), lava::random(1.f), 0.f };
 
         VkImageSubresourceRange const image_range{
             .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
@@ -257,10 +257,10 @@ LAVA_TEST(5, "color block") {
 
         auto frame_index = plotter.begin_frame();
         if (!frame_index)
-            return true;
+            return run_continue;
 
         if (!block.process(*frame_index))
-            return false;
+            return run_abort;
 
         return plotter.end_frame(block.get_buffers());
     });
@@ -291,7 +291,7 @@ LAVA_TEST(6, "forward shading") {
         if (event.pressed(key::escape))
             return frame.shut_down();
 
-        return false;
+        return input_ignore;
     });
 
     auto device = frame.create_device();
@@ -310,10 +310,10 @@ LAVA_TEST(6, "forward shading") {
 
     block block;
     if (!block.create(device, render_target->get_frame_count(), device->graphics_queue().family))
-        return false;
+        return error::create_failed;
 
     block.add_command([&](VkCommandBuffer cmd_buf) {
-        render_pass->set_clear_color({ lava::random(0.f, 1.f), lava::random(0.f, 1.f), lava::random(0.f, 1.f) });
+        render_pass->set_clear_color({ lava::random(1.f), lava::random(1.f), lava::random(1.f) });
         render_pass->process(cmd_buf, block.get_current_frame());
     });
 
@@ -332,7 +332,7 @@ LAVA_TEST(6, "forward shading") {
 
         if (window.iconified()) {
             frame.set_wait_for_events(true);
-            return true;
+            return run_continue;
         } else {
             if (frame.waiting_for_events())
                 frame.set_wait_for_events(false);
@@ -340,10 +340,10 @@ LAVA_TEST(6, "forward shading") {
 
         auto frame_index = plotter.begin_frame();
         if (!frame_index)
-            return true;
+            return run_continue;
 
         if (!block.process(*frame_index))
-            return false;
+            return run_abort;
 
         return plotter.end_frame(block.get_buffers());
     });
@@ -372,16 +372,21 @@ LAVA_TEST(7, "gamepad") {
         else
             log()->info("gamepad {} - inactive", id);
 
-        return false;
+        return input_ignore;
     });
 
     for (auto& pad : gamepads())
         log()->info("gamepad {} - active ({})", pad.get_id(), pad.get_name());
 
+    log()->info("Waiting some seconds for gamepads...");
+
     frame.add_run([&]() {
-        sleep(seconds(1));
+        sleep(one_second);
+
+        if (frame.get_running_time_sec() > 10.)
+            frame.shut_down();
 
-        return true;
+        return run_continue;
     });
 
     return frame.run();
-- 
GitLab