diff --git a/DOCS.md b/DOCS.md index 6445afee5ab0f9f22a53b9d53c7083367bf2a57b..def688fa4c011b9fe234b7bfc1cfd2fccd657d90 100644 --- a/DOCS.md +++ b/DOCS.md @@ -111,7 +111,7 @@ frame.add_run([&]() { input.handle_events(); if (window.close_request()) - frame.shut_down(); + return frame.shut_down(); return run_continue; }); @@ -472,9 +472,7 @@ make You can use **liblava** as a *git submodule* in your project ➜ Like in the [starter template](https://git.io/liblava-template) and [demo](https://git.io/liblava-demo) -<br /> - -### Conan Package Manager +#### 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) diff --git a/liblava/app/app.cpp b/liblava/app/app.cpp index 04ceb02028a7c0346db2681f5f6b34e70939addd..9ccfce5e4dc3a7b724ce74f53fb86eb637d911f2 100644 --- a/liblava/app/app.cpp +++ b/liblava/app/app.cpp @@ -10,6 +10,97 @@ namespace lava { + constexpr name _window_file_ = "window.json"; + + bool window_file() { + return file_system::exists(_window_file_); + } + + void to_json(json& j, window::state const& w) { + j = json{ { _x_, w.x }, { _y_, w.y }, { _width_, w.width }, { _height_, w.height }, { _fullscreen_, w.fullscreen }, { _floating_, w.floating }, { _resizable_, w.resizable }, { _decorated_, w.decorated }, { _maximized_, w.maximized }, { _monitor_, w.monitor } }; + } + + void from_json(json const& j, window::state& w) { + if (j.count(_x_)) + w.x = j.at(_x_).get<int>(); + if (j.count(_y_)) + w.y = j.at(_y_).get<int>(); + if (j.count(_width_)) + w.width = j.at(_width_).get<int>(); + if (j.count(_height_)) + w.height = j.at(_height_).get<int>(); + if (j.count(_fullscreen_)) + w.fullscreen = j.at(_fullscreen_).get<bool>(); + if (j.count(_floating_)) + w.floating = j.at(_floating_).get<bool>(); + if (j.count(_resizable_)) + w.resizable = j.at(_resizable_).get<bool>(); + if (j.count(_decorated_)) + w.decorated = j.at(_decorated_).get<bool>(); + if (j.count(_maximized_)) + w.maximized = j.at(_maximized_).get<bool>(); + if (j.count(_monitor_)) + w.monitor = j.at(_monitor_).get<int>(); + } + + bool load_window_file(window::state& state, name save_name) { + scope_data data; + if (!load_file_data(_window_file_, data)) + return false; + + auto j = json::parse(data.ptr, data.ptr + data.size); + + if (!j.count(save_name)) + return false; + + log()->trace("load window {}", str(j.dump())); + + state = j[save_name]; + return true; + } + + window::state::optional load_window_state(name save_name) { + if (!window_file()) + return {}; + + window::state window_state; + if (!load_window_file(window_state, save_name)) + return {}; + + return window_state; + } + + void save_window_file(window::ref window) { + auto state = window.get_state(); + auto index = window.get_save_name(); + + json j; + + scope_data data; + if (load_file_data(_window_file_, data)) { + j = json::parse(data.ptr, data.ptr + data.size); + + json d; + d[index] = state; + + j.merge_patch(d); + } else { + j[index] = state; + } + + file file(str(_window_file_), true); + if (!file.opened()) { + log()->error("save window {}", str(j.dump())); + return; + } + + auto jString = j.dump(4); + + file.write(jString.data(), jString.size()); + + log()->trace("save window {}", str(j.dump())); + } + app::app(frame_config config) : frame(config), window(config.app) {} @@ -77,7 +168,7 @@ namespace lava { auto current_frame = block.get_current_frame(); { - scoped_label stage_label(cmd_buf, _lava_texture_stage_, { 0.f, 0.13f, 0.4f, 1.f }); + scoped_label stage_label(cmd_buf, _lava_texture_staging_, { 0.f, 0.13f, 0.4f, 1.f }); staging.stage(cmd_buf, current_frame); } @@ -369,7 +460,7 @@ namespace lava { void app::render() { add_run([&]() { if (window.iconified()) { - sleep(ms(1)); + sleep(one_ms); return true; } @@ -412,93 +503,4 @@ namespace lava { window.set_icon(icon.data, icon.size); } - void to_json(json& j, window::state const& w) { - j = json{ { _x_, w.x }, { _y_, w.y }, { _width_, w.width }, { _height_, w.height }, { _fullscreen_, w.fullscreen }, { _floating_, w.floating }, { _resizable_, w.resizable }, { _decorated_, w.decorated }, { _maximized_, w.maximized }, { _monitor_, w.monitor } }; - } - - void from_json(json const& j, window::state& w) { - if (j.count(_x_)) - w.x = j.at(_x_).get<int>(); - if (j.count(_y_)) - w.y = j.at(_y_).get<int>(); - if (j.count(_width_)) - w.width = j.at(_width_).get<int>(); - if (j.count(_height_)) - w.height = j.at(_height_).get<int>(); - if (j.count(_fullscreen_)) - w.fullscreen = j.at(_fullscreen_).get<bool>(); - if (j.count(_floating_)) - w.floating = j.at(_floating_).get<bool>(); - if (j.count(_resizable_)) - w.resizable = j.at(_resizable_).get<bool>(); - if (j.count(_decorated_)) - w.decorated = j.at(_decorated_).get<bool>(); - if (j.count(_maximized_)) - w.maximized = j.at(_maximized_).get<bool>(); - if (j.count(_monitor_)) - w.monitor = j.at(_monitor_).get<int>(); - } - } // namespace lava - -bool lava::window_file() { - return file_system::exists(_window_file_); -} - -lava::window::state::optional lava::load_window_state(name save_name) { - if (!window_file()) - return {}; - - window::state window_state; - if (!load_window_file(window_state, save_name)) - return {}; - - return window_state; -} - -bool lava::load_window_file(window::state& state, name save_name) { - scope_data data; - if (!load_file_data(_window_file_, data)) - return false; - - auto j = json::parse(data.ptr, data.ptr + data.size); - - if (!j.count(save_name)) - return false; - - log()->trace("load window {}", str(j.dump())); - - state = j[save_name]; - return true; -} - -void lava::save_window_file(window::ref window) { - window::state state = window.get_state(); - auto index = window.get_save_name(); - - json j; - - scope_data data; - if (load_file_data(_window_file_, data)) { - j = json::parse(data.ptr, data.ptr + data.size); - - json d; - d[index] = state; - - j.merge_patch(d); - } else { - j[index] = state; - } - - file file(str(_window_file_), true); - if (!file.opened()) { - log()->error("save window {}", str(j.dump())); - return; - } - - auto jString = j.dump(4); - - file.write(jString.data(), jString.size()); - - log()->trace("save window {}", str(j.dump())); -} diff --git a/liblava/app/app.hpp b/liblava/app/app.hpp index d47b3c55a9650392cc885c42901206419829c475..0c7e5607b3e3e95e56ddd0255ed51733d027f47e 100644 --- a/liblava/app/app.hpp +++ b/liblava/app/app.hpp @@ -67,6 +67,12 @@ namespace lava { } void draw_about(bool separator = true) const; + void draw_about_with_separator() const { + draw_about(); + } + void draw_about_without_separator() const { + draw_about(false); + } config config; json_file config_file; @@ -105,12 +111,4 @@ namespace lava { id block_command; }; - bool window_file(); - - window::state::optional load_window_state(name save_name = _default_); - - bool load_window_file(window::state& state, name save_name); - - void save_window_file(window::ref window); - } // namespace lava diff --git a/liblava/app/camera.cpp b/liblava/app/camera.cpp index b03d928d14c4dfa6c1b963eac3c8552ced25653b..c22297e26ece9b4358b1d2e973399b801f555a0f 100644 --- a/liblava/app/camera.cpp +++ b/liblava/app/camera.cpp @@ -99,8 +99,8 @@ namespace lava { } void camera::update_view(delta dt, gamepad::ref pad) { - const r32 dead_zone = 0.2f; - const r32 range = 1.f - dead_zone; + const auto dead_zone = 0.2f; + const auto range = 1.f - dead_zone; if (type == camera_type::first_person) { v3 front; @@ -179,10 +179,10 @@ namespace lava { break; } default: - return false; + return input_ignore; } - return true; + return input_done; } bool camera::handle(mouse_button_event::ref event, mouse_position mouse_pos) { @@ -193,16 +193,16 @@ namespace lava { mouse_pos_x = mouse_pos.x; mouse_pos_y = mouse_pos.y; - return true; + return input_done; } - return false; + return input_ignore; } bool camera::handle(scroll_event::ref event) { scroll_pos += event.offset.y; - return true; + return input_done; } void camera::stop() { diff --git a/liblava/app/def.hpp b/liblava/app/def.hpp index 35afb30d78b88988c90b8758e8bb4b09962095cf..63bbd2ca34d26905bab662a3a89483fa9699aa4b 100644 --- a/liblava/app/def.hpp +++ b/liblava/app/def.hpp @@ -23,6 +23,6 @@ namespace lava { // debug utils constexpr name _lava_block_ = "lava block"; constexpr name _lava_gui_ = "lava gui"; - constexpr name _lava_texture_stage_ = "lava texture stage"; + constexpr name _lava_texture_staging_ = "lava texture staging"; } // namespace lava diff --git a/liblava/app/gui.cpp b/liblava/app/gui.cpp index a61b9a9d89e6a995a05935152b6406b8770cf913..9462025f8855eb63a82e2ba9175456ae2ac46062 100644 --- a/liblava/app/gui.cpp +++ b/liblava/app/gui.cpp @@ -62,7 +62,7 @@ namespace lava { mouse_just_pressed[i] = false; } - ImVec2 const mouse_pos_backup = io.MousePos; + auto const mouse_pos_backup = io.MousePos; io.MousePos = ImVec2(-FLT_MAX, -FLT_MAX); if (glfwGetWindowAttrib(window, GLFW_FOCUSED)) { @@ -81,7 +81,7 @@ namespace lava { if ((io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange) || glfwGetInputMode(window, GLFW_CURSOR) == GLFW_CURSOR_DISABLED) return; - ImGuiMouseCursor imgui_cursor = ImGui::GetMouseCursor(); + auto const imgui_cursor = ImGui::GetMouseCursor(); if (imgui_cursor == ImGuiMouseCursor_None || io.MouseDrawCursor) { glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN); } else { @@ -240,8 +240,8 @@ namespace lava { memset(io.NavInputs, 0, sizeof(io.NavInputs)); if (io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) { int axes_count = 0, buttons_count = 0; - float const* axes = glfwGetJoystickAxes(GLFW_JOYSTICK_1, &axes_count); - unsigned char const* buttons = glfwGetJoystickButtons(GLFW_JOYSTICK_1, &buttons_count); + auto const* axes = glfwGetJoystickAxes(GLFW_JOYSTICK_1, &axes_count); + auto const* buttons = glfwGetJoystickButtons(GLFW_JOYSTICK_1, &buttons_count); MAP_BUTTON(ImGuiNavInput_Activate, 0); // Cross / A MAP_BUTTON(ImGuiNavInput_Cancel, 1); // Circle / B diff --git a/liblava/asset/texture_loader.cpp b/liblava/asset/texture_loader.cpp index c6bf757fed3d1d7419ea4c3fd7f62782929a7221..61114e19a14d1f65744e8c9ea1941b081cf2b018 100644 --- a/liblava/asset/texture_loader.cpp +++ b/liblava/asset/texture_loader.cpp @@ -154,7 +154,7 @@ namespace lava { if (!texture->create(device, size, VK_FORMAT_R8G8B8A8_UNORM)) return nullptr; - const i32 tex_channels = 4; + auto const tex_channels = 4; auto uploadSize = tex_width * tex_height * tex_channels * sizeof(char); auto result = texture->upload(data, uploadSize); diff --git a/liblava/base/device.cpp b/liblava/base/device.cpp index ce40bdcc934b108e692018f4750c336105f8b559..17e004d72e9774baa86296b721a186adf57aeb40 100644 --- a/liblava/base/device.cpp +++ b/liblava/base/device.cpp @@ -18,7 +18,7 @@ namespace lava { for (size_t i = 0, e = param.queue_info_list.size(); i != e; ++i) { queue_create_info_list[i].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; - ui32 index = 0; + auto index = 0u; if (!physical_device->get_queue_family(index, param.queue_info_list[i].flags)) { log()->error("create device queue family"); return false; diff --git a/liblava/base/instance.cpp b/liblava/base/instance.cpp index b35de413aefcdc3030bd9d9e9be2e980b43768bd..ff6904b9aa667c5dc65594e9a3a30478cd99ebf3 100644 --- a/liblava/base/instance.cpp +++ b/liblava/base/instance.cpp @@ -105,9 +105,9 @@ namespace lava { void instance::destroy() { if (!vk_instance) - return + return; - physical_devices.clear(); + physical_devices.clear(); if (debug.utils) destroy_validation_report(); diff --git a/liblava/block/subpass.hpp b/liblava/block/subpass.hpp index 4092140ac279dd97c3dd45cc87440bd7db0c2741..84e9f755a1d16eb01a9138828139784ba51b27ea 100644 --- a/liblava/block/subpass.hpp +++ b/liblava/block/subpass.hpp @@ -29,7 +29,6 @@ namespace lava { void clear_pipelines(); void process(VkCommandBuffer cmd_buf, uv2 size); - ; VkSubpassDescription get_description() const { return description; diff --git a/liblava/core/data.hpp b/liblava/core/data.hpp index ae53d64104bb9047d0460d63fc192d745f1477a8..62c21eaa42024c0e113ab64026c07f0dd82dfe4a 100644 --- a/liblava/core/data.hpp +++ b/liblava/core/data.hpp @@ -136,11 +136,11 @@ namespace lava { #endif inline char* human_readable(size_t const sz) { - static ui32 const buffer_size = 32; + static auto const buffer_size = 32; char const prefixes[] = "KMGTPEZY"; char buf[buffer_size]; - i32 which = -1; + auto which = -1; auto result = to_r64(sz); while (result > 1024 && which < 7) { diff --git a/liblava/core/time.hpp b/liblava/core/time.hpp index 080d89663e079fd7a5700a5fdcbd87c85a7e17f8..61f45941a9979569b2177acfe216a20875498b77 100644 --- a/liblava/core/time.hpp +++ b/liblava/core/time.hpp @@ -16,6 +16,7 @@ namespace lava { using ms = milliseconds; constexpr seconds const one_second = seconds(1); + constexpr ms const one_ms = ms(1); using clock = std::chrono::high_resolution_clock; using time_point = clock::time_point; @@ -71,8 +72,8 @@ namespace lava { inline string time_stamp(const typename CLOCK_TYPE::time_point& time_point, string_ref format = "%Y-%m-%d %H-%M-%S") { auto ms = std::chrono::duration_cast<milliseconds>(time_point.time_since_epoch()) % 1000; - const std::time_t t = CLOCK_TYPE::to_time_t(time_point); - const std::tm tm = *std::localtime(std::addressof(t)); + auto const t = CLOCK_TYPE::to_time_t(time_point); + auto const tm = *std::localtime(std::addressof(t)); std::ostringstream stm; stm << std::put_time(std::addressof(tm), str(format)) << '.' << std::setfill('0') << std::setw(3) << ms.count(); diff --git a/liblava/core/types.hpp b/liblava/core/types.hpp index e5e3e174ace7e320ed46528b3fa75f57d151c910..2787ac68a7836a060ae5690af5ca71c7e0c73f67 100644 --- a/liblava/core/types.hpp +++ b/liblava/core/types.hpp @@ -87,7 +87,9 @@ namespace lava { constexpr name _lava_ = "lava"; constexpr name _liblava_ = "liblava"; + constexpr name _zip_ = "zip"; + constexpr name _default_ = "default"; inline name str(string_ref value) { return value.c_str(); diff --git a/liblava/frame/frame.cpp b/liblava/frame/frame.cpp index d893ed17ba22e55135147b12e18c13fb217c3ec0..3ab4dcaabb6c37968bc2bc71b3e256cfd3a9b809 100644 --- a/liblava/frame/frame.cpp +++ b/liblava/frame/frame.cpp @@ -20,8 +20,8 @@ void hide_console(lava::name program) { auto version_str = fmt::format("{} {}", lava::_liblava_, lava::str(lava::to_string(lava::_version))); std::cout << version_str.c_str() << std::endl; - const auto dot_count = 5; - const auto sleep_ms = lava::to_i32(1.0 / dot_count * 1000.f); + auto const dot_count = 5; + auto const sleep_ms = lava::to_i32(1.0 / dot_count * 1000.f); for (auto i = 0u; i < dot_count; ++i) { lava::sleep(lava::ms(sleep_ms)); diff --git a/liblava/frame/window.hpp b/liblava/frame/window.hpp index 2cb703a2be156a49aadea2de14db10b7b686e7a7..d9d02c29810c259edc1ebc1fdfdd77fca67b07ca 100644 --- a/liblava/frame/window.hpp +++ b/liblava/frame/window.hpp @@ -17,9 +17,6 @@ struct GLFWwindow; namespace lava { - constexpr name _default_ = "default"; - - constexpr name _window_file_ = "window.json"; constexpr name _x_ = "x"; constexpr name _y_ = "y"; constexpr name _width_ = "width"; diff --git a/tests/tests.cpp b/tests/tests.cpp index fc69bc4982bffa544a110af3ff64f84d76a82b8e..52a43dd26ae5f9a30eda3f08d2310a2cc2269b90 100644 --- a/tests/tests.cpp +++ b/tests/tests.cpp @@ -57,7 +57,7 @@ LAVA_TEST(3, "window input") { input.handle_events(); if (window.close_request()) - frame.shut_down(); + return frame.shut_down(); return run_continue; }); @@ -384,7 +384,7 @@ LAVA_TEST(7, "gamepad") { sleep(one_second); if (frame.get_running_time_sec() > 10.) - frame.shut_down(); + return frame.shut_down(); return run_continue; });