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