From b9761a5cfc780e2e8f079081c097c7a455bb4191 Mon Sep 17 00:00:00 2001 From: Karn Kaul Date: Mon, 24 Oct 2022 08:35:31 -0700 Subject: [PATCH 01/10] Move Renderer to render/; DearImGui to src/detail/ --- facade-lib/CMakeLists.txt | 8 +-- facade-lib/include/facade/engine/engine.hpp | 2 + .../facade/{scene => render}/renderer.hpp | 0 facade-lib/include/facade/util/delegate.hpp | 53 +++++++++++++++++ facade-lib/include/facade/util/enumerate.hpp | 50 ++++++++++++++++ facade-lib/include/facade/util/signal.hpp | 43 ++++++++++++++ .../src/{dear_imgui => detail}/dear_imgui.cpp | 19 ++++--- .../dear_imgui => src/detail}/dear_imgui.hpp | 8 +-- facade-lib/src/engine/engine.cpp | 13 ++++- facade-lib/src/{scene => render}/renderer.cpp | 8 +-- facade-lib/src/scene/scene.cpp | 2 +- src/main.cpp | 57 ++++++++++++------- 12 files changed, 217 insertions(+), 46 deletions(-) rename facade-lib/include/facade/{scene => render}/renderer.hpp (100%) create mode 100644 facade-lib/include/facade/util/delegate.hpp create mode 100644 facade-lib/include/facade/util/enumerate.hpp create mode 100644 facade-lib/include/facade/util/signal.hpp rename facade-lib/src/{dear_imgui => detail}/dear_imgui.cpp (86%) rename facade-lib/{include/facade/dear_imgui => src/detail}/dear_imgui.hpp (81%) rename facade-lib/src/{scene => render}/renderer.cpp (98%) diff --git a/facade-lib/CMakeLists.txt b/facade-lib/CMakeLists.txt index 1abcc22..d09772c 100644 --- a/facade-lib/CMakeLists.txt +++ b/facade-lib/CMakeLists.txt @@ -110,7 +110,7 @@ target_sources(${PROJECT_NAME} PRIVATE include/facade/glfw/glfw.hpp include/facade/glfw/input.hpp - include/facade/dear_imgui/dear_imgui.hpp + include/facade/render/renderer.hpp include/facade/scene/camera.hpp include/facade/scene/fly_cam.hpp @@ -120,7 +120,6 @@ target_sources(${PROJECT_NAME} PRIVATE include/facade/scene/node_data.hpp include/facade/scene/node.hpp include/facade/scene/rect.hpp - include/facade/scene/renderer.hpp include/facade/scene/scene.hpp include/facade/scene/transform.hpp @@ -157,14 +156,15 @@ target_sources(${PROJECT_NAME} PRIVATE src/glfw/glfw.cpp - src/dear_imgui/dear_imgui.cpp + src/detail/dear_imgui.cpp + src/detail/dear_imgui.hpp + src/render/renderer.cpp src/detail/gltf.cpp src/detail/gltf.hpp src/scene/camera.cpp src/scene/material.cpp - src/scene/renderer.cpp src/scene/scene.cpp src/scene/transform.cpp diff --git a/facade-lib/include/facade/engine/engine.hpp b/facade-lib/include/facade/engine/engine.hpp index 202f34f..5c8ef89 100644 --- a/facade-lib/include/facade/engine/engine.hpp +++ b/facade-lib/include/facade/engine/engine.hpp @@ -35,6 +35,8 @@ class Engine { void render(Scene& scene) const; void request_stop(); + void reload(CreateInfo const& info); + Glfw::Window window() const; Gfx const& gfx() const; Input const& input() const; diff --git a/facade-lib/include/facade/scene/renderer.hpp b/facade-lib/include/facade/render/renderer.hpp similarity index 100% rename from facade-lib/include/facade/scene/renderer.hpp rename to facade-lib/include/facade/render/renderer.hpp diff --git a/facade-lib/include/facade/util/delegate.hpp b/facade-lib/include/facade/util/delegate.hpp new file mode 100644 index 0000000..98151ec --- /dev/null +++ b/facade-lib/include/facade/util/delegate.hpp @@ -0,0 +1,53 @@ +#pragma once +#include +#include +#include +#include + +namespace facade { +/// +/// \brief Holds an ordered list of callback Fns, each associated with a unique Id +/// +template +class Delegate { + public: + using Id = std::uint64_t; + using Fn = std::function; + + /// + /// \brief Attach a callback + /// \returns Associated Id (use to detach) + /// + Id attach(Fn fn) { + if (!fn) { return {}; } + auto const id = ++m_next_id; + m_entries.push_back(Entry{.fn = std::move(fn), .id = id}); + return id; + } + + /// + /// \brief Detach callback associated with id + /// + void detach(Id id) { + std::erase_if(m_entries, [id](Entry const& e) { return e.id == id; }); + } + + /// + /// \brief Dispatch all stored callbacks + /// + void dispatch(Args const&... args) const { + for (auto const& [fn, _] : m_entries) { fn(args...); } + } + + void operator()(Args const&... args) const { dispatch(args...); } + + private: + struct Entry { + Fn fn{}; + Id id{}; + }; + + std::vector m_entries{}; + Id m_next_id{}; +}; +} // namespace facade diff --git a/facade-lib/include/facade/util/enumerate.hpp b/facade-lib/include/facade/util/enumerate.hpp new file mode 100644 index 0000000..afe2d50 --- /dev/null +++ b/facade-lib/include/facade/util/enumerate.hpp @@ -0,0 +1,50 @@ +#pragma once +#include +#include + +namespace facade { +template +class Enumerator { + public: + using value_type = decltype(*std::declval()); + + struct Entry { + value_type value; + Index index; + }; + + class iterator { + public: + using value_type = Entry; + using difference_type = void; + + constexpr iterator(It it, Index index) : m_it(it), m_index(index) {} + + constexpr value_type operator*() const { return {*m_it, m_index}; } + constexpr iterator& operator++() { return (++m_it, ++m_index, *this); } + + constexpr bool operator==(iterator const&) const = default; + + private: + It m_it{}; + Index m_index{}; + }; + using const_iterator = iterator; + + constexpr Enumerator(It first, It last, Index offset) : m_begin(first), m_end(last), m_offset(offset), m_size(std::distance(m_begin, m_end)) {} + + constexpr iterator begin() const { return {m_begin, m_offset}; } + constexpr iterator end() const { return {m_end, m_offset + m_size}; } + + private: + It m_begin; + It m_end; + Index m_offset; + std::size_t m_size; +}; + +template +constexpr auto enumerate(Container&& container, Index offset = {}) { + return Enumerator{container.begin(), container.end(), offset}; +} +} // namespace facade diff --git a/facade-lib/include/facade/util/signal.hpp b/facade-lib/include/facade/util/signal.hpp new file mode 100644 index 0000000..b016368 --- /dev/null +++ b/facade-lib/include/facade/util/signal.hpp @@ -0,0 +1,43 @@ +#include +#include + +namespace facade { +/// +/// \brief RAII observer handle for a shared_ptr> +/// +template +class Signal { + public: + using Id = typename Delegate::Id; + using Fn = typename Delegate::Fn; + + Signal() = default; + /// + /// \brief Attach callback fn to delegate (and store associated Id) + /// + Signal(std::shared_ptr> const& delegate, Fn fn) : m_delegate(delegate), m_id(delegate->attach(std::move(fn))) {} + + Signal(Signal&& rhs) = default; + Signal& operator=(Signal&& rhs) = default; + + ~Signal() { reset(); } + + /// + /// \brief Detach associated callback (if attached) + /// + void reset() { + if (auto delegate = m_delegate.lock()) { + delegate->detach(m_id); + m_delegate = {}; + } + } + + explicit operator bool() const { return m_delegate.lock() != nullptr; } + + private: + std::weak_ptr> m_delegate{}; + Id m_id{}; + + friend class Delegate; +}; +} // namespace facade diff --git a/facade-lib/src/dear_imgui/dear_imgui.cpp b/facade-lib/src/detail/dear_imgui.cpp similarity index 86% rename from facade-lib/src/dear_imgui/dear_imgui.cpp rename to facade-lib/src/detail/dear_imgui.cpp index f66f585..6dbc1b6 100644 --- a/facade-lib/src/dear_imgui/dear_imgui.cpp +++ b/facade-lib/src/detail/dear_imgui.cpp @@ -1,9 +1,10 @@ #include #include #include -#include -#include +#include #include +#include +#include namespace facade { namespace { @@ -22,17 +23,19 @@ vk::UniqueDescriptorPool make_pool(vk::Device const device) { return device.createDescriptorPoolUnique(pool_info); } +glm::vec4 to_linear(glm::vec4 const& srgb) { return glm::convertSRGBToLinear(srgb); } + void correct_style() { auto* colours = ImGui::GetStyle().Colors; for (int i = 0; i < ImGuiCol_COUNT; ++i) { auto& colour = colours[i]; - auto const corrected = Material::to_linear(glm::vec4{colour.x, colour.y, colour.z, colour.w}); + auto const corrected = to_linear(glm::vec4{colour.x, colour.y, colour.z, colour.w}); colour = {corrected.x, corrected.y, corrected.z, corrected.w}; } } } // namespace -DearImgui::DearImgui(CreateInfo const& info) { +DearImGui::DearImGui(CreateInfo const& info) { m_pool = make_pool(info.gfx.device); IMGUI_CHECKVERSION(); @@ -73,7 +76,7 @@ DearImgui::DearImgui(CreateInfo const& info) { ImGui_ImplVulkan_DestroyFontUploadObjects(); } -DearImgui::~DearImgui() { +DearImGui::~DearImGui() { if (!m_pool) { return; } m_pool.getOwner().waitIdle(); ImGui_ImplVulkan_Shutdown(); @@ -81,16 +84,16 @@ DearImgui::~DearImgui() { ImGui::DestroyContext(); } -void DearImgui::new_frame() { +void DearImGui::new_frame() { ImGui_ImplVulkan_NewFrame(); ImGui_ImplGlfw_NewFrame(); ImGui::NewFrame(); } -void DearImgui::end_frame() { +void DearImGui::end_frame() { // ImGui::Render calls ImGui::EndFrame ImGui::Render(); } -void DearImgui::render(vk::CommandBuffer const cb) { ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), cb); } +void DearImGui::render(vk::CommandBuffer const cb) { ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), cb); } } // namespace facade diff --git a/facade-lib/include/facade/dear_imgui/dear_imgui.hpp b/facade-lib/src/detail/dear_imgui.hpp similarity index 81% rename from facade-lib/include/facade/dear_imgui/dear_imgui.hpp rename to facade-lib/src/detail/dear_imgui.hpp index a4ba9c0..9182c3a 100644 --- a/facade-lib/include/facade/dear_imgui/dear_imgui.hpp +++ b/facade-lib/src/detail/dear_imgui.hpp @@ -5,7 +5,7 @@ #include namespace facade { -class DearImgui { +class DearImGui { public: struct CreateInfo { Gfx gfx{}; @@ -15,14 +15,14 @@ class DearImgui { ColourSpace swapchain{ColourSpace::eSrgb}; }; - DearImgui(CreateInfo const& info); - ~DearImgui(); + DearImGui(CreateInfo const& info); + ~DearImGui(); void new_frame(); void end_frame(); void render(vk::CommandBuffer cb); - DearImgui& operator=(DearImgui&&) = delete; + DearImGui& operator=(DearImGui&&) = delete; private: vk::UniqueDescriptorPool m_pool{}; diff --git a/facade-lib/src/engine/engine.cpp b/facade-lib/src/engine/engine.cpp index 18913d0..7466616 100644 --- a/facade-lib/src/engine/engine.cpp +++ b/facade-lib/src/engine/engine.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include @@ -71,14 +71,21 @@ float Engine::next_frame() { return m_impl->dt(); } -void Engine::request_stop() { glfwSetWindowShouldClose(m_impl->window.get(), GLFW_TRUE); } - void Engine::render(Scene& scene) const { if (m_impl->cb) { scene.render(m_impl->renderer, *m_impl->cb); } m_impl->renderer.render(); m_impl->cb.reset(); } +void Engine::request_stop() { glfwSetWindowShouldClose(m_impl->window.get(), GLFW_TRUE); } + +void Engine::reload(CreateInfo const& info) { + m_impl->gfx.device.waitIdle(); + m_impl.reset(); + m_impl = std::make_unique(info); + show(true); +} + Gfx const& Engine::gfx() const { return m_impl->gfx; } Glfw::Window Engine::window() const { return m_impl->window; } Input const& Engine::input() const { return m_impl->window.get().state().input; } diff --git a/facade-lib/src/scene/renderer.cpp b/facade-lib/src/render/renderer.cpp similarity index 98% rename from facade-lib/src/scene/renderer.cpp rename to facade-lib/src/render/renderer.cpp index 0e1a399..6d08ad6 100644 --- a/facade-lib/src/scene/renderer.cpp +++ b/facade-lib/src/render/renderer.cpp @@ -1,5 +1,5 @@ -#include -#include +#include +#include #include #include #include @@ -44,7 +44,7 @@ struct Renderer::Impl { Pipes pipes; RenderPass render_pass; RenderFrames<> render_frames; - DearImgui dear_imgui; + DearImGui dear_imgui; Shader::Db shader_db{}; std::optional render_target{}; @@ -73,7 +73,7 @@ struct Renderer::Impl { Impl(Gfx gfx, Glfw::Window window, Renderer::CreateInfo const& info) : gfx{gfx}, window{window}, swapchain{gfx, GlfwWsi{window}.make_surface(gfx.instance)}, pipes(gfx, info.samples), render_pass(gfx, info.samples, this->swapchain.info.imageFormat, depth_format(gfx.gpu)), render_frames(make_render_frames(gfx, info.command_buffers)), - dear_imgui(DearImgui::CreateInfo{ + dear_imgui(DearImGui::CreateInfo{ gfx, window, render_pass.render_pass(), diff --git a/facade-lib/src/scene/scene.cpp b/facade-lib/src/scene/scene.cpp index 53ca4b3..d96e24e 100644 --- a/facade-lib/src/scene/scene.cpp +++ b/facade-lib/src/scene/scene.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include #include #include diff --git a/src/main.cpp b/src/main.cpp index 368a561..3010878 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,12 +7,10 @@ #include #include -#include - #include +#include #include -#include #include #include @@ -25,6 +23,8 @@ #include +#include + using namespace facade; namespace { @@ -240,38 +240,43 @@ struct MainMenu { void run() { auto engine = Engine{}; - auto lit = shaders::lit(); - lit.id = "default"; - engine.add_shader(lit); - engine.add_shader(shaders::unlit()); - struct DummyDataProvider : DataProvider { ByteBuffer load(std::string_view) const override { return {}; } }; - auto scene = Scene{engine.gfx()}; - scene.dir_lights.push_back(DirLight{.direction = glm::normalize(glm::vec3{-1.0f, -1.0f, -1.0f}), .diffuse = glm::vec3{5.0f}}); + auto scene = std::optional{}; auto material_id = Id{}; auto node_id = Id{}; auto post_scene_load = [&] { - scene.camera().transform.set_position({0.0f, 0.0f, 5.0f}); + scene->camera().transform.set_position({0.0f, 0.0f, 5.0f}); auto material = std::make_unique(); material->albedo = {1.0f, 0.0f, 0.0f}; - material_id = scene.add(std::move(material)); - auto static_mesh_id = scene.add(StaticMesh{engine.gfx(), make_cubed_sphere(1.0f, 32)}); - auto mesh_id = scene.add(Mesh{.primitives = {Mesh::Primitive{static_mesh_id, material_id}}}); + material_id = scene->add(std::move(material)); + auto static_mesh_id = scene->add(StaticMesh{engine.gfx(), make_cubed_sphere(1.0f, 32)}); + auto mesh_id = scene->add(Mesh{.primitives = {Mesh::Primitive{static_mesh_id, material_id}}}); auto node = Node{}; node.attach(mesh_id); node.instances.emplace_back().set_position({1.0f, -5.0f, -20.0f}); node.instances.emplace_back().set_position({-1.0f, 1.0f, 0.0f}); - node_id = scene.add(std::move(node), 0); + node_id = scene->add(std::move(node), 0); + }; + + auto init = [&] { + auto lit = shaders::lit(); + lit.id = "default"; + engine.add_shader(lit); + engine.add_shader(shaders::unlit()); + + scene.emplace(engine.gfx()); + scene->dir_lights.push_back(DirLight{.direction = glm::normalize(glm::vec3{-1.0f, -1.0f, -1.0f}), .diffuse = glm::vec3{5.0f}}); + scene->load_gltf(dj::Json::parse(test_json_v), DummyDataProvider{}); + post_scene_load(); }; - scene.load_gltf(dj::Json::parse(test_json_v), DummyDataProvider{}); - post_scene_load(); + init(); float const drot_z[] = {100.0f, -150.0f}; @@ -289,14 +294,14 @@ void run() { if (!state.file_drops.empty()) { auto const& file = state.file_drops.front(); - if (!load_gltf(scene, file)) { + if (!load_gltf(*scene, file)) { logger::warn("Failed to load GLTF: [{}]", file); } else { post_scene_load(); } } - auto& camera = scene.camera(); + auto& camera = scene->camera(); if (auto fly_cam = FlyCam{camera.transform}) { if (input.keyboard.held(GLFW_KEY_A) || input.keyboard.held(GLFW_KEY_LEFT)) { fly_cam.move_right(-dt); } if (input.keyboard.held(GLFW_KEY_D) || input.keyboard.held(GLFW_KEY_RIGHT)) { fly_cam.move_right(dt); } @@ -307,17 +312,25 @@ void run() { if (mouse_look) { fly_cam.rotate({input.mouse.delta_pos().x, -input.mouse.delta_pos().y}); } } + if (input.keyboard.pressed(GLFW_KEY_R)) { + logger::info("Reloading..."); + scene.reset(); + engine.reload({}); + init(); + continue; + } + // TEMP CODE - auto* node = scene.find_node(node_id); + auto* node = scene->find_node(node_id); node->instances[0].rotate(glm::radians(drot_z[0]) * dt, {0.0f, 1.0f, 0.0f}); node->instances[1].rotate(glm::radians(drot_z[1]) * dt, {1.0f, 0.0f, 0.0f}); ImGui::ShowDemoWindow(); - main_menu.display(engine, scene, dt); + main_menu.display(engine, *scene, dt); // TEMP CODE - engine.render(scene); + engine.render(*scene); } } } // namespace From 88fa71dd3a3b5c5f70b905c10435bbdf1d2ebfb5 Mon Sep 17 00:00:00 2001 From: Karn Kaul Date: Mon, 24 Oct 2022 09:23:44 -0700 Subject: [PATCH 02/10] Move util/ to library --- CMakeLists.txt | 3 +- facade-lib/CMakeLists.txt | 61 ++++------------ facade-lib/interface/CMakeLists.txt | 69 ++++++++++++++++++ .../interface/include/facade/defines.hpp | 10 +++ .../src/make_unique_for_overwrite.cpp | 5 ++ facade-lib/util/CMakeLists.txt | 72 +++++++++++++++++++ .../include/facade/util/async_queue.hpp | 0 .../include/facade/util/byte_buffer.hpp | 0 .../include/facade/util/colour_space.hpp | 0 .../include/facade/util/data_provider.hpp | 0 .../include/facade/util/defer_queue.hpp | 0 .../include/facade/util/delegate.hpp | 0 .../include/facade/util/enum_array.hpp | 0 .../include/facade/util/enumerate.hpp | 0 .../{ => util}/include/facade/util/error.hpp | 0 .../include/facade/util/fixed_string.hpp | 0 .../include/facade/util/flex_array.hpp | 0 .../include/facade/util/geometry.hpp | 0 .../{ => util}/include/facade/util/image.hpp | 0 .../{ => util}/include/facade/util/logger.hpp | 0 .../{ => util}/include/facade/util/mufo.hpp | 0 .../{ => util}/include/facade/util/nvec3.hpp | 0 .../{ => util}/include/facade/util/pinned.hpp | 0 .../include/facade/util/ring_buffer.hpp | 0 .../{ => util}/include/facade/util/signal.hpp | 0 .../{ => util}/include/facade/util/time.hpp | 0 .../include/facade/util/type_id.hpp | 0 .../{ => util}/include/facade/util/unique.hpp | 0 .../include/facade/util/visitor.hpp | 0 .../{src/util => util/src}/data_provider.cpp | 0 .../{src/util => util/src}/geometry.cpp | 0 facade-lib/{src/util => util/src}/image.cpp | 0 facade-lib/{src/util => util/src}/logger.cpp | 0 facade-lib/{src/util => util/src}/time.cpp | 0 34 files changed, 171 insertions(+), 49 deletions(-) create mode 100644 facade-lib/interface/CMakeLists.txt create mode 100644 facade-lib/interface/include/facade/defines.hpp create mode 100644 facade-lib/interface/src/make_unique_for_overwrite.cpp create mode 100644 facade-lib/util/CMakeLists.txt rename facade-lib/{ => util}/include/facade/util/async_queue.hpp (100%) rename facade-lib/{ => util}/include/facade/util/byte_buffer.hpp (100%) rename facade-lib/{ => util}/include/facade/util/colour_space.hpp (100%) rename facade-lib/{ => util}/include/facade/util/data_provider.hpp (100%) rename facade-lib/{ => util}/include/facade/util/defer_queue.hpp (100%) rename facade-lib/{ => util}/include/facade/util/delegate.hpp (100%) rename facade-lib/{ => util}/include/facade/util/enum_array.hpp (100%) rename facade-lib/{ => util}/include/facade/util/enumerate.hpp (100%) rename facade-lib/{ => util}/include/facade/util/error.hpp (100%) rename facade-lib/{ => util}/include/facade/util/fixed_string.hpp (100%) rename facade-lib/{ => util}/include/facade/util/flex_array.hpp (100%) rename facade-lib/{ => util}/include/facade/util/geometry.hpp (100%) rename facade-lib/{ => util}/include/facade/util/image.hpp (100%) rename facade-lib/{ => util}/include/facade/util/logger.hpp (100%) rename facade-lib/{ => util}/include/facade/util/mufo.hpp (100%) rename facade-lib/{ => util}/include/facade/util/nvec3.hpp (100%) rename facade-lib/{ => util}/include/facade/util/pinned.hpp (100%) rename facade-lib/{ => util}/include/facade/util/ring_buffer.hpp (100%) rename facade-lib/{ => util}/include/facade/util/signal.hpp (100%) rename facade-lib/{ => util}/include/facade/util/time.hpp (100%) rename facade-lib/{ => util}/include/facade/util/type_id.hpp (100%) rename facade-lib/{ => util}/include/facade/util/unique.hpp (100%) rename facade-lib/{ => util}/include/facade/util/visitor.hpp (100%) rename facade-lib/{src/util => util/src}/data_provider.cpp (100%) rename facade-lib/{src/util => util/src}/geometry.cpp (100%) rename facade-lib/{src/util => util/src}/image.cpp (100%) rename facade-lib/{src/util => util/src}/logger.cpp (100%) rename facade-lib/{src/util => util/src}/time.cpp (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index f1ba947..4b4cb7c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,8 @@ set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) try_compile(has_make_unique_for_overwrite "${CMAKE_CURRENT_BINARY_DIR}" SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/cmake/src/make_unique_for_overwrite.cpp") add_subdirectory(ext) -add_subdirectory(cmake/interface) + +# add_subdirectory(cmake/interface) add_subdirectory(tools/embed_shader) add_subdirectory(facade-lib) diff --git a/facade-lib/CMakeLists.txt b/facade-lib/CMakeLists.txt index d09772c..728ce9f 100644 --- a/facade-lib/CMakeLists.txt +++ b/facade-lib/CMakeLists.txt @@ -1,9 +1,14 @@ -project(facade-lib) +set(target_prefix facade) + +project(${target_prefix}-lib) + +add_subdirectory(interface) +add_subdirectory(util) find_package(Threads) add_library(${PROJECT_NAME}) -add_library(facade::lib ALIAS ${PROJECT_NAME}) +add_library(${target_prefix}::lib ALIAS ${PROJECT_NAME}) target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20) @@ -11,17 +16,16 @@ target_link_libraries(${PROJECT_NAME} PUBLIC glfw::glfw glm::glm - facade::vk - facade::vma - facade::dear_imgui + ${target_prefix}::vk + ${target_prefix}::vma + ${target_prefix}::dear_imgui + ${target_prefix}::util djson::djson - fmt::fmt PRIVATE spirv-cross-glsl - facade::compile-options - facade::stb-image - Threads::Threads + ${target_prefix}::compile-options + ${target_prefix}::pch ) if(CMAKE_SYSTEM_NAME STREQUAL Linux) @@ -50,42 +54,9 @@ target_include_directories(${PROJECT_NAME} src ) -target_compile_definitions(${PROJECT_NAME} - PUBLIC - GLM_FORCE_XYZW_ONLY - GLM_FORCE_RADIANS - GLM_FORCE_DEPTH_ZERO_TO_ONE - GLM_FORCE_SILENT_WARNINGS - GLM_ENABLE_EXPERIMENTAL - GLM_EXT_INCLUDED - $<$:FACADE_DEBUG> - $<$:FACADE_MUFO> -) - target_sources(${PROJECT_NAME} PRIVATE include/facade/defines.hpp - include/facade/util/async_queue.hpp - include/facade/util/byte_buffer.hpp - include/facade/util/colour_space.hpp - include/facade/util/data_provider.hpp - include/facade/util/defer_queue.hpp - include/facade/util/enum_array.hpp - include/facade/util/error.hpp - include/facade/util/fixed_string.hpp - include/facade/util/flex_array.hpp - include/facade/util/geometry.hpp - include/facade/util/image.hpp - include/facade/util/logger.hpp - include/facade/util/mufo.hpp - include/facade/util/nvec3.hpp - include/facade/util/pinned.hpp - include/facade/util/ring_buffer.hpp - include/facade/util/time.hpp - include/facade/util/type_id.hpp - include/facade/util/unique.hpp - include/facade/util/visitor.hpp - include/facade/vk/buffer.hpp include/facade/vk/cmd.hpp include/facade/vk/defer.hpp @@ -130,12 +101,6 @@ target_sources(${PROJECT_NAME} PRIVATE include/facade/editor/log.hpp include/facade/editor/scene_tree.hpp - src/util/data_provider.cpp - src/util/geometry.cpp - src/util/image.cpp - src/util/logger.cpp - src/util/time.cpp - src/vk/buffer.cpp src/vk/cmd.cpp src/vk/descriptor_set.cpp diff --git a/facade-lib/interface/CMakeLists.txt b/facade-lib/interface/CMakeLists.txt new file mode 100644 index 0000000..a15b888 --- /dev/null +++ b/facade-lib/interface/CMakeLists.txt @@ -0,0 +1,69 @@ +if("${target_prefix}" STREQUAL "") + message(FATAL_ERROR "target_prefix unset") +endif() + +string(TOUPPER ${target_prefix} define_prefix) + +project(${target_prefix}-interface) + +option(${target_prefix}_PCH "Use PCH" ON) + +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) +try_compile(has_make_unique_for_overwrite "${CMAKE_CURRENT_BINARY_DIR}" SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/make_unique_for_overwrite.cpp") + +add_library(${target_prefix}-interface INTERFACE) +add_library(${target_prefix}::interface ALIAS ${target_prefix}-interface) + +target_compile_definitions(${target_prefix}-interface + INTERFACE + $<$:${define_prefix}_DEBUG> + $<$:${define_prefix}_MUFO> +) + +target_include_directories(${target_prefix}-interface INTERFACE include) + +target_sources(${target_prefix}-interface PRIVATE + include/${target_prefix}/defines.hpp +) + +add_library(${target_prefix}-compile-options INTERFACE) +add_library(${target_prefix}::compile-options ALIAS ${target_prefix}-compile-options) + +if(CMAKE_CXX_COMPILER_ID STREQUAL Clang OR CMAKE_CXX_COMPILER_ID STREQUAL GNU) + target_compile_options(${target_prefix}-compile-options INTERFACE + -Wall -Wextra -Wpedantic -Werror=return-type + ) + + if(CMAKE_CXX_COMPILER_ID STREQUAL GNU AND NOT CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64) + target_compile_options(${target_prefix}-compile-options INTERFACE -Wconversion) + endif() +endif() + +if(CMAKE_GENERATOR MATCHES "^(Visual Studio)") + target_compile_options(${target_prefix}-compile-options INTERFACE /MP) +endif() + +add_library(${target_prefix}-pch INTERFACE) +add_library(${target_prefix}::pch ALIAS ${target_prefix}-pch) + +if(${${target_prefix}_PCH}) + # Single PCH is shared across all targets, so it links to all dependencies + target_link_libraries(${target_prefix}-pch INTERFACE + ${target_prefix}::vma + fmt::fmt + ) + + target_precompile_headers(${target_prefix}-pch INTERFACE + + + + + + + + + + + + ) +endif() diff --git a/facade-lib/interface/include/facade/defines.hpp b/facade-lib/interface/include/facade/defines.hpp new file mode 100644 index 0000000..dcd950b --- /dev/null +++ b/facade-lib/interface/include/facade/defines.hpp @@ -0,0 +1,10 @@ +#pragma once + +namespace facade { +constexpr bool debug_v = +#if defined(FACADE_DEBUG) + true; +#else + false; +#endif +} // namespace facade diff --git a/facade-lib/interface/src/make_unique_for_overwrite.cpp b/facade-lib/interface/src/make_unique_for_overwrite.cpp new file mode 100644 index 0000000..6941c45 --- /dev/null +++ b/facade-lib/interface/src/make_unique_for_overwrite.cpp @@ -0,0 +1,5 @@ +#include + +namespace { +[[maybe_unused]] auto make(std::size_t n) { return std::make_unique_for_overwrite(n); } +} // namespace diff --git a/facade-lib/util/CMakeLists.txt b/facade-lib/util/CMakeLists.txt new file mode 100644 index 0000000..5474c5d --- /dev/null +++ b/facade-lib/util/CMakeLists.txt @@ -0,0 +1,72 @@ +if("${target_prefix}" STREQUAL "") + message(FATAL_ERROR "target_prefix unset") +endif() + +project(${target_prefix}-util) + +find_package(Threads) + +add_library(${PROJECT_NAME}) +add_library(${target_prefix}::util ALIAS ${PROJECT_NAME}) + +target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20) + +target_include_directories(${PROJECT_NAME} + PUBLIC + include + + PRIVATE + src +) + +target_link_libraries(${PROJECT_NAME} + PUBLIC + fmt::fmt + glm::glm + ${target_prefix}::interface + + PRIVATE + ${target_prefix}::stb-image + ${target_prefix}::compile-options + ${target_prefix}::pch + Threads::Threads +) + +target_compile_definitions(${PROJECT_NAME} + PUBLIC + GLM_FORCE_XYZW_ONLY + GLM_FORCE_RADIANS + GLM_FORCE_DEPTH_ZERO_TO_ONE + GLM_FORCE_SILENT_WARNINGS + GLM_ENABLE_EXPERIMENTAL + GLM_EXT_INCLUDED +) + +target_sources(${PROJECT_NAME} PRIVATE + include/${target_prefix}/util/async_queue.hpp + include/${target_prefix}/util/byte_buffer.hpp + include/${target_prefix}/util/colour_space.hpp + include/${target_prefix}/util/data_provider.hpp + include/${target_prefix}/util/defer_queue.hpp + include/${target_prefix}/util/enum_array.hpp + include/${target_prefix}/util/error.hpp + include/${target_prefix}/util/fixed_string.hpp + include/${target_prefix}/util/flex_array.hpp + include/${target_prefix}/util/geometry.hpp + include/${target_prefix}/util/image.hpp + include/${target_prefix}/util/logger.hpp + include/${target_prefix}/util/mufo.hpp + include/${target_prefix}/util/nvec3.hpp + include/${target_prefix}/util/pinned.hpp + include/${target_prefix}/util/ring_buffer.hpp + include/${target_prefix}/util/time.hpp + include/${target_prefix}/util/type_id.hpp + include/${target_prefix}/util/unique.hpp + include/${target_prefix}/util/visitor.hpp + + src/data_provider.cpp + src/geometry.cpp + src/image.cpp + src/logger.cpp + src/time.cpp +) diff --git a/facade-lib/include/facade/util/async_queue.hpp b/facade-lib/util/include/facade/util/async_queue.hpp similarity index 100% rename from facade-lib/include/facade/util/async_queue.hpp rename to facade-lib/util/include/facade/util/async_queue.hpp diff --git a/facade-lib/include/facade/util/byte_buffer.hpp b/facade-lib/util/include/facade/util/byte_buffer.hpp similarity index 100% rename from facade-lib/include/facade/util/byte_buffer.hpp rename to facade-lib/util/include/facade/util/byte_buffer.hpp diff --git a/facade-lib/include/facade/util/colour_space.hpp b/facade-lib/util/include/facade/util/colour_space.hpp similarity index 100% rename from facade-lib/include/facade/util/colour_space.hpp rename to facade-lib/util/include/facade/util/colour_space.hpp diff --git a/facade-lib/include/facade/util/data_provider.hpp b/facade-lib/util/include/facade/util/data_provider.hpp similarity index 100% rename from facade-lib/include/facade/util/data_provider.hpp rename to facade-lib/util/include/facade/util/data_provider.hpp diff --git a/facade-lib/include/facade/util/defer_queue.hpp b/facade-lib/util/include/facade/util/defer_queue.hpp similarity index 100% rename from facade-lib/include/facade/util/defer_queue.hpp rename to facade-lib/util/include/facade/util/defer_queue.hpp diff --git a/facade-lib/include/facade/util/delegate.hpp b/facade-lib/util/include/facade/util/delegate.hpp similarity index 100% rename from facade-lib/include/facade/util/delegate.hpp rename to facade-lib/util/include/facade/util/delegate.hpp diff --git a/facade-lib/include/facade/util/enum_array.hpp b/facade-lib/util/include/facade/util/enum_array.hpp similarity index 100% rename from facade-lib/include/facade/util/enum_array.hpp rename to facade-lib/util/include/facade/util/enum_array.hpp diff --git a/facade-lib/include/facade/util/enumerate.hpp b/facade-lib/util/include/facade/util/enumerate.hpp similarity index 100% rename from facade-lib/include/facade/util/enumerate.hpp rename to facade-lib/util/include/facade/util/enumerate.hpp diff --git a/facade-lib/include/facade/util/error.hpp b/facade-lib/util/include/facade/util/error.hpp similarity index 100% rename from facade-lib/include/facade/util/error.hpp rename to facade-lib/util/include/facade/util/error.hpp diff --git a/facade-lib/include/facade/util/fixed_string.hpp b/facade-lib/util/include/facade/util/fixed_string.hpp similarity index 100% rename from facade-lib/include/facade/util/fixed_string.hpp rename to facade-lib/util/include/facade/util/fixed_string.hpp diff --git a/facade-lib/include/facade/util/flex_array.hpp b/facade-lib/util/include/facade/util/flex_array.hpp similarity index 100% rename from facade-lib/include/facade/util/flex_array.hpp rename to facade-lib/util/include/facade/util/flex_array.hpp diff --git a/facade-lib/include/facade/util/geometry.hpp b/facade-lib/util/include/facade/util/geometry.hpp similarity index 100% rename from facade-lib/include/facade/util/geometry.hpp rename to facade-lib/util/include/facade/util/geometry.hpp diff --git a/facade-lib/include/facade/util/image.hpp b/facade-lib/util/include/facade/util/image.hpp similarity index 100% rename from facade-lib/include/facade/util/image.hpp rename to facade-lib/util/include/facade/util/image.hpp diff --git a/facade-lib/include/facade/util/logger.hpp b/facade-lib/util/include/facade/util/logger.hpp similarity index 100% rename from facade-lib/include/facade/util/logger.hpp rename to facade-lib/util/include/facade/util/logger.hpp diff --git a/facade-lib/include/facade/util/mufo.hpp b/facade-lib/util/include/facade/util/mufo.hpp similarity index 100% rename from facade-lib/include/facade/util/mufo.hpp rename to facade-lib/util/include/facade/util/mufo.hpp diff --git a/facade-lib/include/facade/util/nvec3.hpp b/facade-lib/util/include/facade/util/nvec3.hpp similarity index 100% rename from facade-lib/include/facade/util/nvec3.hpp rename to facade-lib/util/include/facade/util/nvec3.hpp diff --git a/facade-lib/include/facade/util/pinned.hpp b/facade-lib/util/include/facade/util/pinned.hpp similarity index 100% rename from facade-lib/include/facade/util/pinned.hpp rename to facade-lib/util/include/facade/util/pinned.hpp diff --git a/facade-lib/include/facade/util/ring_buffer.hpp b/facade-lib/util/include/facade/util/ring_buffer.hpp similarity index 100% rename from facade-lib/include/facade/util/ring_buffer.hpp rename to facade-lib/util/include/facade/util/ring_buffer.hpp diff --git a/facade-lib/include/facade/util/signal.hpp b/facade-lib/util/include/facade/util/signal.hpp similarity index 100% rename from facade-lib/include/facade/util/signal.hpp rename to facade-lib/util/include/facade/util/signal.hpp diff --git a/facade-lib/include/facade/util/time.hpp b/facade-lib/util/include/facade/util/time.hpp similarity index 100% rename from facade-lib/include/facade/util/time.hpp rename to facade-lib/util/include/facade/util/time.hpp diff --git a/facade-lib/include/facade/util/type_id.hpp b/facade-lib/util/include/facade/util/type_id.hpp similarity index 100% rename from facade-lib/include/facade/util/type_id.hpp rename to facade-lib/util/include/facade/util/type_id.hpp diff --git a/facade-lib/include/facade/util/unique.hpp b/facade-lib/util/include/facade/util/unique.hpp similarity index 100% rename from facade-lib/include/facade/util/unique.hpp rename to facade-lib/util/include/facade/util/unique.hpp diff --git a/facade-lib/include/facade/util/visitor.hpp b/facade-lib/util/include/facade/util/visitor.hpp similarity index 100% rename from facade-lib/include/facade/util/visitor.hpp rename to facade-lib/util/include/facade/util/visitor.hpp diff --git a/facade-lib/src/util/data_provider.cpp b/facade-lib/util/src/data_provider.cpp similarity index 100% rename from facade-lib/src/util/data_provider.cpp rename to facade-lib/util/src/data_provider.cpp diff --git a/facade-lib/src/util/geometry.cpp b/facade-lib/util/src/geometry.cpp similarity index 100% rename from facade-lib/src/util/geometry.cpp rename to facade-lib/util/src/geometry.cpp diff --git a/facade-lib/src/util/image.cpp b/facade-lib/util/src/image.cpp similarity index 100% rename from facade-lib/src/util/image.cpp rename to facade-lib/util/src/image.cpp diff --git a/facade-lib/src/util/logger.cpp b/facade-lib/util/src/logger.cpp similarity index 100% rename from facade-lib/src/util/logger.cpp rename to facade-lib/util/src/logger.cpp diff --git a/facade-lib/src/util/time.cpp b/facade-lib/util/src/time.cpp similarity index 100% rename from facade-lib/src/util/time.cpp rename to facade-lib/util/src/time.cpp From a0da89a2bb6e70888b53a03bfd8a8db393eb8635 Mon Sep 17 00:00:00 2001 From: Karn Kaul Date: Mon, 24 Oct 2022 10:38:35 -0700 Subject: [PATCH 03/10] Move vk, glfw to library targets --- ext/CMakeLists.txt | 2 +- facade-lib/CMakeLists.txt | 70 +----------------- facade-lib/glfw/CMakeLists.txt | 37 ++++++++++ .../{ => glfw}/include/facade/glfw/glfw.hpp | 0 .../{ => glfw}/include/facade/glfw/input.hpp | 0 facade-lib/{src/glfw => glfw/src}/glfw.cpp | 0 facade-lib/util/CMakeLists.txt | 4 ++ facade-lib/vk/CMakeLists.txt | 72 +++++++++++++++++++ .../{ => vk}/include/facade/vk/buffer.hpp | 0 facade-lib/{ => vk}/include/facade/vk/cmd.hpp | 0 .../{ => vk}/include/facade/vk/defer.hpp | 0 .../include/facade/vk/descriptor_set.hpp | 0 .../{ => vk}/include/facade/vk/drawer.hpp | 0 facade-lib/{ => vk}/include/facade/vk/gfx.hpp | 0 .../{ => vk}/include/facade/vk/pipeline.hpp | 0 .../{ => vk}/include/facade/vk/pipes.hpp | 0 .../include/facade/vk/render_frame.hpp | 0 .../include/facade/vk/render_pass.hpp | 0 .../include/facade/vk/render_target.hpp | 0 .../include/facade/vk/set_allocator.hpp | 0 .../{ => vk}/include/facade/vk/shader.hpp | 0 .../{ => vk}/include/facade/vk/spir_v.hpp | 0 .../include/facade/vk/static_mesh.hpp | 0 .../{ => vk}/include/facade/vk/swapchain.hpp | 0 .../{ => vk}/include/facade/vk/texture.hpp | 0 facade-lib/{ => vk}/include/facade/vk/vk.hpp | 0 facade-lib/{ => vk}/include/facade/vk/vma.hpp | 0 facade-lib/{ => vk}/include/facade/vk/wsi.hpp | 0 facade-lib/{src/vk => vk/src}/buffer.cpp | 0 facade-lib/{src/vk => vk/src}/cmd.cpp | 0 .../{src/vk => vk/src}/descriptor_set.cpp | 0 facade-lib/{src/vk => vk/src}/drawer.cpp | 0 facade-lib/{src/vk => vk/src}/gfx.cpp | 0 facade-lib/{src/vk => vk/src}/pipeline.cpp | 0 facade-lib/{src/vk => vk/src}/pipes.cpp | 0 .../{src/vk => vk/src}/render_frame.cpp | 0 facade-lib/{src/vk => vk/src}/render_pass.cpp | 0 .../{src/vk => vk/src}/set_allocator.cpp | 0 facade-lib/{src/vk => vk/src}/shader.cpp | 0 facade-lib/{src/vk => vk/src}/spir_v.cpp | 0 facade-lib/{src/vk => vk/src}/static_mesh.cpp | 0 facade-lib/{src/vk => vk/src}/swapchain.cpp | 0 facade-lib/{src/vk => vk/src}/texture.cpp | 0 facade-lib/{src/vk => vk/src}/vk.cpp | 0 facade-lib/{src/vk => vk/src}/vma.cpp | 0 45 files changed, 117 insertions(+), 68 deletions(-) create mode 100644 facade-lib/glfw/CMakeLists.txt rename facade-lib/{ => glfw}/include/facade/glfw/glfw.hpp (100%) rename facade-lib/{ => glfw}/include/facade/glfw/input.hpp (100%) rename facade-lib/{src/glfw => glfw/src}/glfw.cpp (100%) create mode 100644 facade-lib/vk/CMakeLists.txt rename facade-lib/{ => vk}/include/facade/vk/buffer.hpp (100%) rename facade-lib/{ => vk}/include/facade/vk/cmd.hpp (100%) rename facade-lib/{ => vk}/include/facade/vk/defer.hpp (100%) rename facade-lib/{ => vk}/include/facade/vk/descriptor_set.hpp (100%) rename facade-lib/{ => vk}/include/facade/vk/drawer.hpp (100%) rename facade-lib/{ => vk}/include/facade/vk/gfx.hpp (100%) rename facade-lib/{ => vk}/include/facade/vk/pipeline.hpp (100%) rename facade-lib/{ => vk}/include/facade/vk/pipes.hpp (100%) rename facade-lib/{ => vk}/include/facade/vk/render_frame.hpp (100%) rename facade-lib/{ => vk}/include/facade/vk/render_pass.hpp (100%) rename facade-lib/{ => vk}/include/facade/vk/render_target.hpp (100%) rename facade-lib/{ => vk}/include/facade/vk/set_allocator.hpp (100%) rename facade-lib/{ => vk}/include/facade/vk/shader.hpp (100%) rename facade-lib/{ => vk}/include/facade/vk/spir_v.hpp (100%) rename facade-lib/{ => vk}/include/facade/vk/static_mesh.hpp (100%) rename facade-lib/{ => vk}/include/facade/vk/swapchain.hpp (100%) rename facade-lib/{ => vk}/include/facade/vk/texture.hpp (100%) rename facade-lib/{ => vk}/include/facade/vk/vk.hpp (100%) rename facade-lib/{ => vk}/include/facade/vk/vma.hpp (100%) rename facade-lib/{ => vk}/include/facade/vk/wsi.hpp (100%) rename facade-lib/{src/vk => vk/src}/buffer.cpp (100%) rename facade-lib/{src/vk => vk/src}/cmd.cpp (100%) rename facade-lib/{src/vk => vk/src}/descriptor_set.cpp (100%) rename facade-lib/{src/vk => vk/src}/drawer.cpp (100%) rename facade-lib/{src/vk => vk/src}/gfx.cpp (100%) rename facade-lib/{src/vk => vk/src}/pipeline.cpp (100%) rename facade-lib/{src/vk => vk/src}/pipes.cpp (100%) rename facade-lib/{src/vk => vk/src}/render_frame.cpp (100%) rename facade-lib/{src/vk => vk/src}/render_pass.cpp (100%) rename facade-lib/{src/vk => vk/src}/set_allocator.cpp (100%) rename facade-lib/{src/vk => vk/src}/shader.cpp (100%) rename facade-lib/{src/vk => vk/src}/spir_v.cpp (100%) rename facade-lib/{src/vk => vk/src}/static_mesh.cpp (100%) rename facade-lib/{src/vk => vk/src}/swapchain.cpp (100%) rename facade-lib/{src/vk => vk/src}/texture.cpp (100%) rename facade-lib/{src/vk => vk/src}/vk.cpp (100%) rename facade-lib/{src/vk => vk/src}/vma.cpp (100%) diff --git a/ext/CMakeLists.txt b/ext/CMakeLists.txt index a7745a3..1e91cfa 100644 --- a/ext/CMakeLists.txt +++ b/ext/CMakeLists.txt @@ -1,7 +1,7 @@ file(ARCHIVE_EXTRACT INPUT "${CMAKE_CURRENT_SOURCE_DIR}/src.zip" DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}") add_subdirectory(src/vk_dynamic) -add_library(${PROJECT_NAME}::vk ALIAS vk-dynamic) +add_library(${PROJECT_NAME}::vk-dynamic ALIAS vk-dynamic) add_subdirectory(src/vma) add_library(${PROJECT_NAME}::vma ALIAS vma) diff --git a/facade-lib/CMakeLists.txt b/facade-lib/CMakeLists.txt index 728ce9f..acd1460 100644 --- a/facade-lib/CMakeLists.txt +++ b/facade-lib/CMakeLists.txt @@ -4,6 +4,8 @@ project(${target_prefix}-lib) add_subdirectory(interface) add_subdirectory(util) +add_subdirectory(vk) +add_subdirectory(glfw) find_package(Threads) @@ -14,38 +16,16 @@ target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20) target_link_libraries(${PROJECT_NAME} PUBLIC - glfw::glfw glm::glm - ${target_prefix}::vk - ${target_prefix}::vma + ${target_prefix}::glfw ${target_prefix}::dear_imgui - ${target_prefix}::util djson::djson PRIVATE - spirv-cross-glsl ${target_prefix}::compile-options ${target_prefix}::pch ) -if(CMAKE_SYSTEM_NAME STREQUAL Linux) - target_link_libraries(${PROJECT_NAME} PRIVATE pthread) -endif() - -target_precompile_headers(${PROJECT_NAME} PUBLIC - - - - - - - - - - - -) - target_include_directories(${PROJECT_NAME} PUBLIC include @@ -57,30 +37,6 @@ target_include_directories(${PROJECT_NAME} target_sources(${PROJECT_NAME} PRIVATE include/facade/defines.hpp - include/facade/vk/buffer.hpp - include/facade/vk/cmd.hpp - include/facade/vk/defer.hpp - include/facade/vk/descriptor_set.hpp - include/facade/vk/drawer.hpp - include/facade/vk/gfx.hpp - include/facade/vk/pipeline.hpp - include/facade/vk/pipes.hpp - include/facade/vk/render_frame.hpp - include/facade/vk/render_pass.hpp - include/facade/vk/render_target.hpp - include/facade/vk/set_allocator.hpp - include/facade/vk/shader.hpp - include/facade/vk/spir_v.hpp - include/facade/vk/static_mesh.hpp - include/facade/vk/swapchain.hpp - include/facade/vk/texture.hpp - include/facade/vk/vk.hpp - include/facade/vk/vma.hpp - include/facade/vk/wsi.hpp - - include/facade/glfw/glfw.hpp - include/facade/glfw/input.hpp - include/facade/render/renderer.hpp include/facade/scene/camera.hpp @@ -101,26 +57,6 @@ target_sources(${PROJECT_NAME} PRIVATE include/facade/editor/log.hpp include/facade/editor/scene_tree.hpp - src/vk/buffer.cpp - src/vk/cmd.cpp - src/vk/descriptor_set.cpp - src/vk/drawer.cpp - src/vk/gfx.cpp - src/vk/pipeline.cpp - src/vk/pipes.cpp - src/vk/render_frame.cpp - src/vk/render_pass.cpp - src/vk/set_allocator.cpp - src/vk/shader.cpp - src/vk/spir_v.cpp - src/vk/static_mesh.cpp - src/vk/swapchain.cpp - src/vk/texture.cpp - src/vk/vk.cpp - src/vk/vma.cpp - - src/glfw/glfw.cpp - src/detail/dear_imgui.cpp src/detail/dear_imgui.hpp src/render/renderer.cpp diff --git a/facade-lib/glfw/CMakeLists.txt b/facade-lib/glfw/CMakeLists.txt new file mode 100644 index 0000000..218d063 --- /dev/null +++ b/facade-lib/glfw/CMakeLists.txt @@ -0,0 +1,37 @@ +if("${target_prefix}" STREQUAL "") + message(FATAL_ERROR "target_prefix unset") +endif() + +project(${target_prefix}-glfw) + +find_package(Threads) + +add_library(${PROJECT_NAME}) +add_library(${target_prefix}::glfw ALIAS ${PROJECT_NAME}) + +target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20) + +target_include_directories(${PROJECT_NAME} + PUBLIC + include + + PRIVATE + src +) + +target_link_libraries(${PROJECT_NAME} + PUBLIC + ${target_prefix}::vk + glfw::glfw + + PRIVATE + ${target_prefix}::compile-options + ${target_prefix}::pch +) + +target_sources(${PROJECT_NAME} PRIVATE + include/facade/glfw/glfw.hpp + include/facade/glfw/input.hpp + + src/glfw.cpp +) diff --git a/facade-lib/include/facade/glfw/glfw.hpp b/facade-lib/glfw/include/facade/glfw/glfw.hpp similarity index 100% rename from facade-lib/include/facade/glfw/glfw.hpp rename to facade-lib/glfw/include/facade/glfw/glfw.hpp diff --git a/facade-lib/include/facade/glfw/input.hpp b/facade-lib/glfw/include/facade/glfw/input.hpp similarity index 100% rename from facade-lib/include/facade/glfw/input.hpp rename to facade-lib/glfw/include/facade/glfw/input.hpp diff --git a/facade-lib/src/glfw/glfw.cpp b/facade-lib/glfw/src/glfw.cpp similarity index 100% rename from facade-lib/src/glfw/glfw.cpp rename to facade-lib/glfw/src/glfw.cpp diff --git a/facade-lib/util/CMakeLists.txt b/facade-lib/util/CMakeLists.txt index 5474c5d..807151e 100644 --- a/facade-lib/util/CMakeLists.txt +++ b/facade-lib/util/CMakeLists.txt @@ -32,6 +32,10 @@ target_link_libraries(${PROJECT_NAME} Threads::Threads ) +if(CMAKE_SYSTEM_NAME STREQUAL Linux) + target_link_libraries(${PROJECT_NAME} PRIVATE pthread) +endif() + target_compile_definitions(${PROJECT_NAME} PUBLIC GLM_FORCE_XYZW_ONLY diff --git a/facade-lib/vk/CMakeLists.txt b/facade-lib/vk/CMakeLists.txt new file mode 100644 index 0000000..f174b32 --- /dev/null +++ b/facade-lib/vk/CMakeLists.txt @@ -0,0 +1,72 @@ +if("${target_prefix}" STREQUAL "") + message(FATAL_ERROR "target_prefix unset") +endif() + +project(${target_prefix}-vk) + +find_package(Threads) + +add_library(${PROJECT_NAME}) +add_library(${target_prefix}::vk ALIAS ${PROJECT_NAME}) + +target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20) + +target_include_directories(${PROJECT_NAME} + PUBLIC + include + + PRIVATE + src +) + +target_link_libraries(${PROJECT_NAME} + PUBLIC + ${target_prefix}::vma + ${target_prefix}::util + + PRIVATE + spirv-cross-glsl + ${target_prefix}::compile-options + ${target_prefix}::pch +) + +target_sources(${PROJECT_NAME} PRIVATE + include/facade/vk/buffer.hpp + include/facade/vk/cmd.hpp + include/facade/vk/defer.hpp + include/facade/vk/descriptor_set.hpp + include/facade/vk/drawer.hpp + include/facade/vk/gfx.hpp + include/facade/vk/pipeline.hpp + include/facade/vk/pipes.hpp + include/facade/vk/render_frame.hpp + include/facade/vk/render_pass.hpp + include/facade/vk/render_target.hpp + include/facade/vk/set_allocator.hpp + include/facade/vk/shader.hpp + include/facade/vk/spir_v.hpp + include/facade/vk/static_mesh.hpp + include/facade/vk/swapchain.hpp + include/facade/vk/texture.hpp + include/facade/vk/vk.hpp + include/facade/vk/vma.hpp + include/facade/vk/wsi.hpp + + src/buffer.cpp + src/cmd.cpp + src/descriptor_set.cpp + src/drawer.cpp + src/gfx.cpp + src/pipeline.cpp + src/pipes.cpp + src/render_frame.cpp + src/render_pass.cpp + src/set_allocator.cpp + src/shader.cpp + src/spir_v.cpp + src/static_mesh.cpp + src/swapchain.cpp + src/texture.cpp + src/vk.cpp + src/vma.cpp +) diff --git a/facade-lib/include/facade/vk/buffer.hpp b/facade-lib/vk/include/facade/vk/buffer.hpp similarity index 100% rename from facade-lib/include/facade/vk/buffer.hpp rename to facade-lib/vk/include/facade/vk/buffer.hpp diff --git a/facade-lib/include/facade/vk/cmd.hpp b/facade-lib/vk/include/facade/vk/cmd.hpp similarity index 100% rename from facade-lib/include/facade/vk/cmd.hpp rename to facade-lib/vk/include/facade/vk/cmd.hpp diff --git a/facade-lib/include/facade/vk/defer.hpp b/facade-lib/vk/include/facade/vk/defer.hpp similarity index 100% rename from facade-lib/include/facade/vk/defer.hpp rename to facade-lib/vk/include/facade/vk/defer.hpp diff --git a/facade-lib/include/facade/vk/descriptor_set.hpp b/facade-lib/vk/include/facade/vk/descriptor_set.hpp similarity index 100% rename from facade-lib/include/facade/vk/descriptor_set.hpp rename to facade-lib/vk/include/facade/vk/descriptor_set.hpp diff --git a/facade-lib/include/facade/vk/drawer.hpp b/facade-lib/vk/include/facade/vk/drawer.hpp similarity index 100% rename from facade-lib/include/facade/vk/drawer.hpp rename to facade-lib/vk/include/facade/vk/drawer.hpp diff --git a/facade-lib/include/facade/vk/gfx.hpp b/facade-lib/vk/include/facade/vk/gfx.hpp similarity index 100% rename from facade-lib/include/facade/vk/gfx.hpp rename to facade-lib/vk/include/facade/vk/gfx.hpp diff --git a/facade-lib/include/facade/vk/pipeline.hpp b/facade-lib/vk/include/facade/vk/pipeline.hpp similarity index 100% rename from facade-lib/include/facade/vk/pipeline.hpp rename to facade-lib/vk/include/facade/vk/pipeline.hpp diff --git a/facade-lib/include/facade/vk/pipes.hpp b/facade-lib/vk/include/facade/vk/pipes.hpp similarity index 100% rename from facade-lib/include/facade/vk/pipes.hpp rename to facade-lib/vk/include/facade/vk/pipes.hpp diff --git a/facade-lib/include/facade/vk/render_frame.hpp b/facade-lib/vk/include/facade/vk/render_frame.hpp similarity index 100% rename from facade-lib/include/facade/vk/render_frame.hpp rename to facade-lib/vk/include/facade/vk/render_frame.hpp diff --git a/facade-lib/include/facade/vk/render_pass.hpp b/facade-lib/vk/include/facade/vk/render_pass.hpp similarity index 100% rename from facade-lib/include/facade/vk/render_pass.hpp rename to facade-lib/vk/include/facade/vk/render_pass.hpp diff --git a/facade-lib/include/facade/vk/render_target.hpp b/facade-lib/vk/include/facade/vk/render_target.hpp similarity index 100% rename from facade-lib/include/facade/vk/render_target.hpp rename to facade-lib/vk/include/facade/vk/render_target.hpp diff --git a/facade-lib/include/facade/vk/set_allocator.hpp b/facade-lib/vk/include/facade/vk/set_allocator.hpp similarity index 100% rename from facade-lib/include/facade/vk/set_allocator.hpp rename to facade-lib/vk/include/facade/vk/set_allocator.hpp diff --git a/facade-lib/include/facade/vk/shader.hpp b/facade-lib/vk/include/facade/vk/shader.hpp similarity index 100% rename from facade-lib/include/facade/vk/shader.hpp rename to facade-lib/vk/include/facade/vk/shader.hpp diff --git a/facade-lib/include/facade/vk/spir_v.hpp b/facade-lib/vk/include/facade/vk/spir_v.hpp similarity index 100% rename from facade-lib/include/facade/vk/spir_v.hpp rename to facade-lib/vk/include/facade/vk/spir_v.hpp diff --git a/facade-lib/include/facade/vk/static_mesh.hpp b/facade-lib/vk/include/facade/vk/static_mesh.hpp similarity index 100% rename from facade-lib/include/facade/vk/static_mesh.hpp rename to facade-lib/vk/include/facade/vk/static_mesh.hpp diff --git a/facade-lib/include/facade/vk/swapchain.hpp b/facade-lib/vk/include/facade/vk/swapchain.hpp similarity index 100% rename from facade-lib/include/facade/vk/swapchain.hpp rename to facade-lib/vk/include/facade/vk/swapchain.hpp diff --git a/facade-lib/include/facade/vk/texture.hpp b/facade-lib/vk/include/facade/vk/texture.hpp similarity index 100% rename from facade-lib/include/facade/vk/texture.hpp rename to facade-lib/vk/include/facade/vk/texture.hpp diff --git a/facade-lib/include/facade/vk/vk.hpp b/facade-lib/vk/include/facade/vk/vk.hpp similarity index 100% rename from facade-lib/include/facade/vk/vk.hpp rename to facade-lib/vk/include/facade/vk/vk.hpp diff --git a/facade-lib/include/facade/vk/vma.hpp b/facade-lib/vk/include/facade/vk/vma.hpp similarity index 100% rename from facade-lib/include/facade/vk/vma.hpp rename to facade-lib/vk/include/facade/vk/vma.hpp diff --git a/facade-lib/include/facade/vk/wsi.hpp b/facade-lib/vk/include/facade/vk/wsi.hpp similarity index 100% rename from facade-lib/include/facade/vk/wsi.hpp rename to facade-lib/vk/include/facade/vk/wsi.hpp diff --git a/facade-lib/src/vk/buffer.cpp b/facade-lib/vk/src/buffer.cpp similarity index 100% rename from facade-lib/src/vk/buffer.cpp rename to facade-lib/vk/src/buffer.cpp diff --git a/facade-lib/src/vk/cmd.cpp b/facade-lib/vk/src/cmd.cpp similarity index 100% rename from facade-lib/src/vk/cmd.cpp rename to facade-lib/vk/src/cmd.cpp diff --git a/facade-lib/src/vk/descriptor_set.cpp b/facade-lib/vk/src/descriptor_set.cpp similarity index 100% rename from facade-lib/src/vk/descriptor_set.cpp rename to facade-lib/vk/src/descriptor_set.cpp diff --git a/facade-lib/src/vk/drawer.cpp b/facade-lib/vk/src/drawer.cpp similarity index 100% rename from facade-lib/src/vk/drawer.cpp rename to facade-lib/vk/src/drawer.cpp diff --git a/facade-lib/src/vk/gfx.cpp b/facade-lib/vk/src/gfx.cpp similarity index 100% rename from facade-lib/src/vk/gfx.cpp rename to facade-lib/vk/src/gfx.cpp diff --git a/facade-lib/src/vk/pipeline.cpp b/facade-lib/vk/src/pipeline.cpp similarity index 100% rename from facade-lib/src/vk/pipeline.cpp rename to facade-lib/vk/src/pipeline.cpp diff --git a/facade-lib/src/vk/pipes.cpp b/facade-lib/vk/src/pipes.cpp similarity index 100% rename from facade-lib/src/vk/pipes.cpp rename to facade-lib/vk/src/pipes.cpp diff --git a/facade-lib/src/vk/render_frame.cpp b/facade-lib/vk/src/render_frame.cpp similarity index 100% rename from facade-lib/src/vk/render_frame.cpp rename to facade-lib/vk/src/render_frame.cpp diff --git a/facade-lib/src/vk/render_pass.cpp b/facade-lib/vk/src/render_pass.cpp similarity index 100% rename from facade-lib/src/vk/render_pass.cpp rename to facade-lib/vk/src/render_pass.cpp diff --git a/facade-lib/src/vk/set_allocator.cpp b/facade-lib/vk/src/set_allocator.cpp similarity index 100% rename from facade-lib/src/vk/set_allocator.cpp rename to facade-lib/vk/src/set_allocator.cpp diff --git a/facade-lib/src/vk/shader.cpp b/facade-lib/vk/src/shader.cpp similarity index 100% rename from facade-lib/src/vk/shader.cpp rename to facade-lib/vk/src/shader.cpp diff --git a/facade-lib/src/vk/spir_v.cpp b/facade-lib/vk/src/spir_v.cpp similarity index 100% rename from facade-lib/src/vk/spir_v.cpp rename to facade-lib/vk/src/spir_v.cpp diff --git a/facade-lib/src/vk/static_mesh.cpp b/facade-lib/vk/src/static_mesh.cpp similarity index 100% rename from facade-lib/src/vk/static_mesh.cpp rename to facade-lib/vk/src/static_mesh.cpp diff --git a/facade-lib/src/vk/swapchain.cpp b/facade-lib/vk/src/swapchain.cpp similarity index 100% rename from facade-lib/src/vk/swapchain.cpp rename to facade-lib/vk/src/swapchain.cpp diff --git a/facade-lib/src/vk/texture.cpp b/facade-lib/vk/src/texture.cpp similarity index 100% rename from facade-lib/src/vk/texture.cpp rename to facade-lib/vk/src/texture.cpp diff --git a/facade-lib/src/vk/vk.cpp b/facade-lib/vk/src/vk.cpp similarity index 100% rename from facade-lib/src/vk/vk.cpp rename to facade-lib/vk/src/vk.cpp diff --git a/facade-lib/src/vk/vma.cpp b/facade-lib/vk/src/vma.cpp similarity index 100% rename from facade-lib/src/vk/vma.cpp rename to facade-lib/vk/src/vma.cpp From 6c2988218325546bf879ed4699d0c4909d28c8a5 Mon Sep 17 00:00:00 2001 From: Karn Kaul Date: Mon, 24 Oct 2022 10:47:58 -0700 Subject: [PATCH 04/10] Move render to library target; fix errors; cleanup scripts --- facade-lib/CMakeLists.txt | 11 +-- facade-lib/render/CMakeLists.txt | 36 +++++++ .../include/facade/render/renderer.hpp | 0 facade-lib/render/src/detail/dear_imgui.cpp | 99 +++++++++++++++++++ facade-lib/render/src/detail/dear_imgui.hpp | 30 ++++++ .../{src/render => render/src}/renderer.cpp | 0 .../util/include/facade/util/delegate.hpp | 53 ---------- .../util/include/facade/util/enumerate.hpp | 50 ---------- .../util/include/facade/util/signal.hpp | 43 -------- facade-lib/vk/CMakeLists.txt | 2 - facade-lib/vk/include/facade/vk/spir_v.hpp | 1 + 11 files changed, 168 insertions(+), 157 deletions(-) create mode 100644 facade-lib/render/CMakeLists.txt rename facade-lib/{ => render}/include/facade/render/renderer.hpp (100%) create mode 100644 facade-lib/render/src/detail/dear_imgui.cpp create mode 100644 facade-lib/render/src/detail/dear_imgui.hpp rename facade-lib/{src/render => render/src}/renderer.cpp (100%) delete mode 100644 facade-lib/util/include/facade/util/delegate.hpp delete mode 100644 facade-lib/util/include/facade/util/enumerate.hpp delete mode 100644 facade-lib/util/include/facade/util/signal.hpp diff --git a/facade-lib/CMakeLists.txt b/facade-lib/CMakeLists.txt index acd1460..7741517 100644 --- a/facade-lib/CMakeLists.txt +++ b/facade-lib/CMakeLists.txt @@ -6,6 +6,7 @@ add_subdirectory(interface) add_subdirectory(util) add_subdirectory(vk) add_subdirectory(glfw) +add_subdirectory(render) find_package(Threads) @@ -16,9 +17,7 @@ target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20) target_link_libraries(${PROJECT_NAME} PUBLIC - glm::glm - ${target_prefix}::glfw - ${target_prefix}::dear_imgui + ${target_prefix}::render djson::djson PRIVATE @@ -37,8 +36,6 @@ target_include_directories(${PROJECT_NAME} target_sources(${PROJECT_NAME} PRIVATE include/facade/defines.hpp - include/facade/render/renderer.hpp - include/facade/scene/camera.hpp include/facade/scene/fly_cam.hpp include/facade/scene/id.hpp @@ -57,10 +54,6 @@ target_sources(${PROJECT_NAME} PRIVATE include/facade/editor/log.hpp include/facade/editor/scene_tree.hpp - src/detail/dear_imgui.cpp - src/detail/dear_imgui.hpp - src/render/renderer.cpp - src/detail/gltf.cpp src/detail/gltf.hpp diff --git a/facade-lib/render/CMakeLists.txt b/facade-lib/render/CMakeLists.txt new file mode 100644 index 0000000..240f6de --- /dev/null +++ b/facade-lib/render/CMakeLists.txt @@ -0,0 +1,36 @@ +if("${target_prefix}" STREQUAL "") + message(FATAL_ERROR "target_prefix unset") +endif() + +project(${target_prefix}-render) + +add_library(${PROJECT_NAME}) +add_library(${target_prefix}::render ALIAS ${PROJECT_NAME}) + +target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20) + +target_include_directories(${PROJECT_NAME} + PUBLIC + include + + PRIVATE + src +) + +target_link_libraries(${PROJECT_NAME} + PUBLIC + ${target_prefix}::glfw + ${target_prefix}::dear_imgui + + PRIVATE + ${target_prefix}::compile-options + ${target_prefix}::pch +) + +target_sources(${PROJECT_NAME} PRIVATE + include/facade/render/renderer.hpp + + src/detail/dear_imgui.cpp + src/detail/dear_imgui.hpp + src/renderer.cpp +) diff --git a/facade-lib/include/facade/render/renderer.hpp b/facade-lib/render/include/facade/render/renderer.hpp similarity index 100% rename from facade-lib/include/facade/render/renderer.hpp rename to facade-lib/render/include/facade/render/renderer.hpp diff --git a/facade-lib/render/src/detail/dear_imgui.cpp b/facade-lib/render/src/detail/dear_imgui.cpp new file mode 100644 index 0000000..6dbc1b6 --- /dev/null +++ b/facade-lib/render/src/detail/dear_imgui.cpp @@ -0,0 +1,99 @@ +#include +#include +#include +#include +#include +#include +#include + +namespace facade { +namespace { +vk::UniqueDescriptorPool make_pool(vk::Device const device) { + vk::DescriptorPoolSize pool_sizes[] = { + {vk::DescriptorType::eSampledImage, 1000}, {vk::DescriptorType::eCombinedImageSampler, 1000}, {vk::DescriptorType::eSampledImage, 1000}, + {vk::DescriptorType::eStorageImage, 1000}, {vk::DescriptorType::eUniformTexelBuffer, 1000}, {vk::DescriptorType::eStorageTexelBuffer, 1000}, + {vk::DescriptorType::eUniformBuffer, 1000}, {vk::DescriptorType::eStorageBuffer, 1000}, {vk::DescriptorType::eUniformBufferDynamic, 1000}, + {vk::DescriptorType::eStorageBufferDynamic, 1000}, {vk::DescriptorType::eInputAttachment, 1000}, + }; + auto pool_info = vk::DescriptorPoolCreateInfo{}; + pool_info.flags = vk::DescriptorPoolCreateFlagBits::eFreeDescriptorSet; + pool_info.maxSets = 1000 * std::size(pool_sizes); + pool_info.poolSizeCount = static_cast(std::size(pool_sizes)); + pool_info.pPoolSizes = pool_sizes; + return device.createDescriptorPoolUnique(pool_info); +} + +glm::vec4 to_linear(glm::vec4 const& srgb) { return glm::convertSRGBToLinear(srgb); } + +void correct_style() { + auto* colours = ImGui::GetStyle().Colors; + for (int i = 0; i < ImGuiCol_COUNT; ++i) { + auto& colour = colours[i]; + auto const corrected = to_linear(glm::vec4{colour.x, colour.y, colour.z, colour.w}); + colour = {corrected.x, corrected.y, corrected.z, corrected.w}; + } +} +} // namespace + +DearImGui::DearImGui(CreateInfo const& info) { + m_pool = make_pool(info.gfx.device); + + IMGUI_CHECKVERSION(); + ImGui::CreateContext(); + ImGuiIO& io = ImGui::GetIO(); + io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls + io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls + + ImGui::StyleColorsDark(); + if (info.swapchain == ColourSpace::eSrgb) { correct_style(); } + + auto loader = vk::DynamicLoader{}; + auto get_fn = [&loader](char const* name) { return loader.getProcAddress(name); }; + auto lambda = +[](char const* name, void* ud) { + auto const* gf = reinterpret_cast(ud); + return (*gf)(name); + }; + ImGui_ImplVulkan_LoadFunctions(lambda, &get_fn); + ImGui_ImplGlfw_InitForVulkan(info.window, true); + ImGui_ImplVulkan_InitInfo init_info = {}; + init_info.Instance = info.gfx.instance; + init_info.PhysicalDevice = info.gfx.gpu; + init_info.Device = info.gfx.device; + init_info.QueueFamily = info.gfx.queue_family; + init_info.Queue = info.gfx.queue; + init_info.DescriptorPool = *m_pool; + init_info.Subpass = 0; + init_info.MinImageCount = 2; + init_info.ImageCount = 2; + init_info.MSAASamples = static_cast(info.samples); + + ImGui_ImplVulkan_Init(&init_info, info.render_pass); + + { + auto cmd = Cmd{info.gfx}; + ImGui_ImplVulkan_CreateFontsTexture(cmd.cb); + } + ImGui_ImplVulkan_DestroyFontUploadObjects(); +} + +DearImGui::~DearImGui() { + if (!m_pool) { return; } + m_pool.getOwner().waitIdle(); + ImGui_ImplVulkan_Shutdown(); + ImGui_ImplGlfw_Shutdown(); + ImGui::DestroyContext(); +} + +void DearImGui::new_frame() { + ImGui_ImplVulkan_NewFrame(); + ImGui_ImplGlfw_NewFrame(); + ImGui::NewFrame(); +} + +void DearImGui::end_frame() { + // ImGui::Render calls ImGui::EndFrame + ImGui::Render(); +} + +void DearImGui::render(vk::CommandBuffer const cb) { ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), cb); } +} // namespace facade diff --git a/facade-lib/render/src/detail/dear_imgui.hpp b/facade-lib/render/src/detail/dear_imgui.hpp new file mode 100644 index 0000000..9182c3a --- /dev/null +++ b/facade-lib/render/src/detail/dear_imgui.hpp @@ -0,0 +1,30 @@ +#pragma once +#include +#include +#include +#include + +namespace facade { +class DearImGui { + public: + struct CreateInfo { + Gfx gfx{}; + Glfw::Window window{}; + vk::RenderPass render_pass{}; + vk::SampleCountFlagBits samples{vk::SampleCountFlagBits::e1}; + ColourSpace swapchain{ColourSpace::eSrgb}; + }; + + DearImGui(CreateInfo const& info); + ~DearImGui(); + + void new_frame(); + void end_frame(); + void render(vk::CommandBuffer cb); + + DearImGui& operator=(DearImGui&&) = delete; + + private: + vk::UniqueDescriptorPool m_pool{}; +}; +} // namespace facade diff --git a/facade-lib/src/render/renderer.cpp b/facade-lib/render/src/renderer.cpp similarity index 100% rename from facade-lib/src/render/renderer.cpp rename to facade-lib/render/src/renderer.cpp diff --git a/facade-lib/util/include/facade/util/delegate.hpp b/facade-lib/util/include/facade/util/delegate.hpp deleted file mode 100644 index 98151ec..0000000 --- a/facade-lib/util/include/facade/util/delegate.hpp +++ /dev/null @@ -1,53 +0,0 @@ -#pragma once -#include -#include -#include -#include - -namespace facade { -/// -/// \brief Holds an ordered list of callback Fns, each associated with a unique Id -/// -template -class Delegate { - public: - using Id = std::uint64_t; - using Fn = std::function; - - /// - /// \brief Attach a callback - /// \returns Associated Id (use to detach) - /// - Id attach(Fn fn) { - if (!fn) { return {}; } - auto const id = ++m_next_id; - m_entries.push_back(Entry{.fn = std::move(fn), .id = id}); - return id; - } - - /// - /// \brief Detach callback associated with id - /// - void detach(Id id) { - std::erase_if(m_entries, [id](Entry const& e) { return e.id == id; }); - } - - /// - /// \brief Dispatch all stored callbacks - /// - void dispatch(Args const&... args) const { - for (auto const& [fn, _] : m_entries) { fn(args...); } - } - - void operator()(Args const&... args) const { dispatch(args...); } - - private: - struct Entry { - Fn fn{}; - Id id{}; - }; - - std::vector m_entries{}; - Id m_next_id{}; -}; -} // namespace facade diff --git a/facade-lib/util/include/facade/util/enumerate.hpp b/facade-lib/util/include/facade/util/enumerate.hpp deleted file mode 100644 index afe2d50..0000000 --- a/facade-lib/util/include/facade/util/enumerate.hpp +++ /dev/null @@ -1,50 +0,0 @@ -#pragma once -#include -#include - -namespace facade { -template -class Enumerator { - public: - using value_type = decltype(*std::declval()); - - struct Entry { - value_type value; - Index index; - }; - - class iterator { - public: - using value_type = Entry; - using difference_type = void; - - constexpr iterator(It it, Index index) : m_it(it), m_index(index) {} - - constexpr value_type operator*() const { return {*m_it, m_index}; } - constexpr iterator& operator++() { return (++m_it, ++m_index, *this); } - - constexpr bool operator==(iterator const&) const = default; - - private: - It m_it{}; - Index m_index{}; - }; - using const_iterator = iterator; - - constexpr Enumerator(It first, It last, Index offset) : m_begin(first), m_end(last), m_offset(offset), m_size(std::distance(m_begin, m_end)) {} - - constexpr iterator begin() const { return {m_begin, m_offset}; } - constexpr iterator end() const { return {m_end, m_offset + m_size}; } - - private: - It m_begin; - It m_end; - Index m_offset; - std::size_t m_size; -}; - -template -constexpr auto enumerate(Container&& container, Index offset = {}) { - return Enumerator{container.begin(), container.end(), offset}; -} -} // namespace facade diff --git a/facade-lib/util/include/facade/util/signal.hpp b/facade-lib/util/include/facade/util/signal.hpp deleted file mode 100644 index b016368..0000000 --- a/facade-lib/util/include/facade/util/signal.hpp +++ /dev/null @@ -1,43 +0,0 @@ -#include -#include - -namespace facade { -/// -/// \brief RAII observer handle for a shared_ptr> -/// -template -class Signal { - public: - using Id = typename Delegate::Id; - using Fn = typename Delegate::Fn; - - Signal() = default; - /// - /// \brief Attach callback fn to delegate (and store associated Id) - /// - Signal(std::shared_ptr> const& delegate, Fn fn) : m_delegate(delegate), m_id(delegate->attach(std::move(fn))) {} - - Signal(Signal&& rhs) = default; - Signal& operator=(Signal&& rhs) = default; - - ~Signal() { reset(); } - - /// - /// \brief Detach associated callback (if attached) - /// - void reset() { - if (auto delegate = m_delegate.lock()) { - delegate->detach(m_id); - m_delegate = {}; - } - } - - explicit operator bool() const { return m_delegate.lock() != nullptr; } - - private: - std::weak_ptr> m_delegate{}; - Id m_id{}; - - friend class Delegate; -}; -} // namespace facade diff --git a/facade-lib/vk/CMakeLists.txt b/facade-lib/vk/CMakeLists.txt index f174b32..fa01dfe 100644 --- a/facade-lib/vk/CMakeLists.txt +++ b/facade-lib/vk/CMakeLists.txt @@ -4,8 +4,6 @@ endif() project(${target_prefix}-vk) -find_package(Threads) - add_library(${PROJECT_NAME}) add_library(${target_prefix}::vk ALIAS ${PROJECT_NAME}) diff --git a/facade-lib/vk/include/facade/vk/spir_v.hpp b/facade-lib/vk/include/facade/vk/spir_v.hpp index ff46465..1f46c14 100644 --- a/facade-lib/vk/include/facade/vk/spir_v.hpp +++ b/facade-lib/vk/include/facade/vk/spir_v.hpp @@ -1,6 +1,7 @@ #pragma once #include #include +#include namespace facade { struct SpirV { From 27859d90110834d62026e7c8c765d63949ad3030 Mon Sep 17 00:00:00 2001 From: Karn Kaul Date: Mon, 24 Oct 2022 11:41:33 -0700 Subject: [PATCH 05/10] Move scene to library target --- facade-lib/CMakeLists.txt | 23 +---- facade-lib/scene/CMakeLists.txt | 49 +++++++++ .../include/facade/scene/camera.hpp | 0 .../include/facade/scene/fly_cam.hpp | 0 .../{ => scene}/include/facade/scene/id.hpp | 0 .../include/facade/scene/lights.hpp | 0 .../include/facade/scene/material.hpp | 0 .../{ => scene}/include/facade/scene/node.hpp | 0 .../include/facade/scene/node_data.hpp | 0 .../{ => scene}/include/facade/scene/rect.hpp | 0 .../include/facade/scene/scene.hpp | 0 .../include/facade/scene/transform.hpp | 0 .../{src/scene => scene/src}/camera.cpp | 0 facade-lib/{ => scene}/src/detail/gltf.cpp | 0 facade-lib/{ => scene}/src/detail/gltf.hpp | 0 .../{src/scene => scene/src}/material.cpp | 0 facade-lib/{src/scene => scene/src}/scene.cpp | 0 .../{src/scene => scene/src}/transform.cpp | 0 facade-lib/src/detail/dear_imgui.cpp | 99 ------------------- facade-lib/src/detail/dear_imgui.hpp | 30 ------ 20 files changed, 51 insertions(+), 150 deletions(-) create mode 100644 facade-lib/scene/CMakeLists.txt rename facade-lib/{ => scene}/include/facade/scene/camera.hpp (100%) rename facade-lib/{ => scene}/include/facade/scene/fly_cam.hpp (100%) rename facade-lib/{ => scene}/include/facade/scene/id.hpp (100%) rename facade-lib/{ => scene}/include/facade/scene/lights.hpp (100%) rename facade-lib/{ => scene}/include/facade/scene/material.hpp (100%) rename facade-lib/{ => scene}/include/facade/scene/node.hpp (100%) rename facade-lib/{ => scene}/include/facade/scene/node_data.hpp (100%) rename facade-lib/{ => scene}/include/facade/scene/rect.hpp (100%) rename facade-lib/{ => scene}/include/facade/scene/scene.hpp (100%) rename facade-lib/{ => scene}/include/facade/scene/transform.hpp (100%) rename facade-lib/{src/scene => scene/src}/camera.cpp (100%) rename facade-lib/{ => scene}/src/detail/gltf.cpp (100%) rename facade-lib/{ => scene}/src/detail/gltf.hpp (100%) rename facade-lib/{src/scene => scene/src}/material.cpp (100%) rename facade-lib/{src/scene => scene/src}/scene.cpp (100%) rename facade-lib/{src/scene => scene/src}/transform.cpp (100%) delete mode 100644 facade-lib/src/detail/dear_imgui.cpp delete mode 100644 facade-lib/src/detail/dear_imgui.hpp diff --git a/facade-lib/CMakeLists.txt b/facade-lib/CMakeLists.txt index 7741517..9de64b9 100644 --- a/facade-lib/CMakeLists.txt +++ b/facade-lib/CMakeLists.txt @@ -7,6 +7,7 @@ add_subdirectory(util) add_subdirectory(vk) add_subdirectory(glfw) add_subdirectory(render) +add_subdirectory(scene) find_package(Threads) @@ -17,8 +18,7 @@ target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20) target_link_libraries(${PROJECT_NAME} PUBLIC - ${target_prefix}::render - djson::djson + ${target_prefix}::scene PRIVATE ${target_prefix}::compile-options @@ -36,17 +36,6 @@ target_include_directories(${PROJECT_NAME} target_sources(${PROJECT_NAME} PRIVATE include/facade/defines.hpp - include/facade/scene/camera.hpp - include/facade/scene/fly_cam.hpp - include/facade/scene/id.hpp - include/facade/scene/lights.hpp - include/facade/scene/material.hpp - include/facade/scene/node_data.hpp - include/facade/scene/node.hpp - include/facade/scene/rect.hpp - include/facade/scene/scene.hpp - include/facade/scene/transform.hpp - include/facade/engine/engine.hpp include/facade/editor/common.hpp @@ -54,14 +43,6 @@ target_sources(${PROJECT_NAME} PRIVATE include/facade/editor/log.hpp include/facade/editor/scene_tree.hpp - src/detail/gltf.cpp - src/detail/gltf.hpp - - src/scene/camera.cpp - src/scene/material.cpp - src/scene/scene.cpp - src/scene/transform.cpp - src/engine/engine.cpp src/editor/common.cpp diff --git a/facade-lib/scene/CMakeLists.txt b/facade-lib/scene/CMakeLists.txt new file mode 100644 index 0000000..45c9ce5 --- /dev/null +++ b/facade-lib/scene/CMakeLists.txt @@ -0,0 +1,49 @@ +if("${target_prefix}" STREQUAL "") + message(FATAL_ERROR "target_prefix unset") +endif() + +project(${target_prefix}-scene) + +add_library(${PROJECT_NAME}) +add_library(${target_prefix}::scene ALIAS ${PROJECT_NAME}) + +target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20) + +target_include_directories(${PROJECT_NAME} + PUBLIC + include + + PRIVATE + src +) + +target_link_libraries(${PROJECT_NAME} + PUBLIC + ${target_prefix}::render + djson::djson + + PRIVATE + ${target_prefix}::compile-options + ${target_prefix}::pch +) + +target_sources(${PROJECT_NAME} PRIVATE + include/facade/scene/camera.hpp + include/facade/scene/fly_cam.hpp + include/facade/scene/id.hpp + include/facade/scene/lights.hpp + include/facade/scene/material.hpp + include/facade/scene/node_data.hpp + include/facade/scene/node.hpp + include/facade/scene/rect.hpp + include/facade/scene/scene.hpp + include/facade/scene/transform.hpp + + src/detail/gltf.cpp + src/detail/gltf.hpp + + src/camera.cpp + src/material.cpp + src/scene.cpp + src/transform.cpp +) diff --git a/facade-lib/include/facade/scene/camera.hpp b/facade-lib/scene/include/facade/scene/camera.hpp similarity index 100% rename from facade-lib/include/facade/scene/camera.hpp rename to facade-lib/scene/include/facade/scene/camera.hpp diff --git a/facade-lib/include/facade/scene/fly_cam.hpp b/facade-lib/scene/include/facade/scene/fly_cam.hpp similarity index 100% rename from facade-lib/include/facade/scene/fly_cam.hpp rename to facade-lib/scene/include/facade/scene/fly_cam.hpp diff --git a/facade-lib/include/facade/scene/id.hpp b/facade-lib/scene/include/facade/scene/id.hpp similarity index 100% rename from facade-lib/include/facade/scene/id.hpp rename to facade-lib/scene/include/facade/scene/id.hpp diff --git a/facade-lib/include/facade/scene/lights.hpp b/facade-lib/scene/include/facade/scene/lights.hpp similarity index 100% rename from facade-lib/include/facade/scene/lights.hpp rename to facade-lib/scene/include/facade/scene/lights.hpp diff --git a/facade-lib/include/facade/scene/material.hpp b/facade-lib/scene/include/facade/scene/material.hpp similarity index 100% rename from facade-lib/include/facade/scene/material.hpp rename to facade-lib/scene/include/facade/scene/material.hpp diff --git a/facade-lib/include/facade/scene/node.hpp b/facade-lib/scene/include/facade/scene/node.hpp similarity index 100% rename from facade-lib/include/facade/scene/node.hpp rename to facade-lib/scene/include/facade/scene/node.hpp diff --git a/facade-lib/include/facade/scene/node_data.hpp b/facade-lib/scene/include/facade/scene/node_data.hpp similarity index 100% rename from facade-lib/include/facade/scene/node_data.hpp rename to facade-lib/scene/include/facade/scene/node_data.hpp diff --git a/facade-lib/include/facade/scene/rect.hpp b/facade-lib/scene/include/facade/scene/rect.hpp similarity index 100% rename from facade-lib/include/facade/scene/rect.hpp rename to facade-lib/scene/include/facade/scene/rect.hpp diff --git a/facade-lib/include/facade/scene/scene.hpp b/facade-lib/scene/include/facade/scene/scene.hpp similarity index 100% rename from facade-lib/include/facade/scene/scene.hpp rename to facade-lib/scene/include/facade/scene/scene.hpp diff --git a/facade-lib/include/facade/scene/transform.hpp b/facade-lib/scene/include/facade/scene/transform.hpp similarity index 100% rename from facade-lib/include/facade/scene/transform.hpp rename to facade-lib/scene/include/facade/scene/transform.hpp diff --git a/facade-lib/src/scene/camera.cpp b/facade-lib/scene/src/camera.cpp similarity index 100% rename from facade-lib/src/scene/camera.cpp rename to facade-lib/scene/src/camera.cpp diff --git a/facade-lib/src/detail/gltf.cpp b/facade-lib/scene/src/detail/gltf.cpp similarity index 100% rename from facade-lib/src/detail/gltf.cpp rename to facade-lib/scene/src/detail/gltf.cpp diff --git a/facade-lib/src/detail/gltf.hpp b/facade-lib/scene/src/detail/gltf.hpp similarity index 100% rename from facade-lib/src/detail/gltf.hpp rename to facade-lib/scene/src/detail/gltf.hpp diff --git a/facade-lib/src/scene/material.cpp b/facade-lib/scene/src/material.cpp similarity index 100% rename from facade-lib/src/scene/material.cpp rename to facade-lib/scene/src/material.cpp diff --git a/facade-lib/src/scene/scene.cpp b/facade-lib/scene/src/scene.cpp similarity index 100% rename from facade-lib/src/scene/scene.cpp rename to facade-lib/scene/src/scene.cpp diff --git a/facade-lib/src/scene/transform.cpp b/facade-lib/scene/src/transform.cpp similarity index 100% rename from facade-lib/src/scene/transform.cpp rename to facade-lib/scene/src/transform.cpp diff --git a/facade-lib/src/detail/dear_imgui.cpp b/facade-lib/src/detail/dear_imgui.cpp deleted file mode 100644 index 6dbc1b6..0000000 --- a/facade-lib/src/detail/dear_imgui.cpp +++ /dev/null @@ -1,99 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -namespace facade { -namespace { -vk::UniqueDescriptorPool make_pool(vk::Device const device) { - vk::DescriptorPoolSize pool_sizes[] = { - {vk::DescriptorType::eSampledImage, 1000}, {vk::DescriptorType::eCombinedImageSampler, 1000}, {vk::DescriptorType::eSampledImage, 1000}, - {vk::DescriptorType::eStorageImage, 1000}, {vk::DescriptorType::eUniformTexelBuffer, 1000}, {vk::DescriptorType::eStorageTexelBuffer, 1000}, - {vk::DescriptorType::eUniformBuffer, 1000}, {vk::DescriptorType::eStorageBuffer, 1000}, {vk::DescriptorType::eUniformBufferDynamic, 1000}, - {vk::DescriptorType::eStorageBufferDynamic, 1000}, {vk::DescriptorType::eInputAttachment, 1000}, - }; - auto pool_info = vk::DescriptorPoolCreateInfo{}; - pool_info.flags = vk::DescriptorPoolCreateFlagBits::eFreeDescriptorSet; - pool_info.maxSets = 1000 * std::size(pool_sizes); - pool_info.poolSizeCount = static_cast(std::size(pool_sizes)); - pool_info.pPoolSizes = pool_sizes; - return device.createDescriptorPoolUnique(pool_info); -} - -glm::vec4 to_linear(glm::vec4 const& srgb) { return glm::convertSRGBToLinear(srgb); } - -void correct_style() { - auto* colours = ImGui::GetStyle().Colors; - for (int i = 0; i < ImGuiCol_COUNT; ++i) { - auto& colour = colours[i]; - auto const corrected = to_linear(glm::vec4{colour.x, colour.y, colour.z, colour.w}); - colour = {corrected.x, corrected.y, corrected.z, corrected.w}; - } -} -} // namespace - -DearImGui::DearImGui(CreateInfo const& info) { - m_pool = make_pool(info.gfx.device); - - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); - io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls - - ImGui::StyleColorsDark(); - if (info.swapchain == ColourSpace::eSrgb) { correct_style(); } - - auto loader = vk::DynamicLoader{}; - auto get_fn = [&loader](char const* name) { return loader.getProcAddress(name); }; - auto lambda = +[](char const* name, void* ud) { - auto const* gf = reinterpret_cast(ud); - return (*gf)(name); - }; - ImGui_ImplVulkan_LoadFunctions(lambda, &get_fn); - ImGui_ImplGlfw_InitForVulkan(info.window, true); - ImGui_ImplVulkan_InitInfo init_info = {}; - init_info.Instance = info.gfx.instance; - init_info.PhysicalDevice = info.gfx.gpu; - init_info.Device = info.gfx.device; - init_info.QueueFamily = info.gfx.queue_family; - init_info.Queue = info.gfx.queue; - init_info.DescriptorPool = *m_pool; - init_info.Subpass = 0; - init_info.MinImageCount = 2; - init_info.ImageCount = 2; - init_info.MSAASamples = static_cast(info.samples); - - ImGui_ImplVulkan_Init(&init_info, info.render_pass); - - { - auto cmd = Cmd{info.gfx}; - ImGui_ImplVulkan_CreateFontsTexture(cmd.cb); - } - ImGui_ImplVulkan_DestroyFontUploadObjects(); -} - -DearImGui::~DearImGui() { - if (!m_pool) { return; } - m_pool.getOwner().waitIdle(); - ImGui_ImplVulkan_Shutdown(); - ImGui_ImplGlfw_Shutdown(); - ImGui::DestroyContext(); -} - -void DearImGui::new_frame() { - ImGui_ImplVulkan_NewFrame(); - ImGui_ImplGlfw_NewFrame(); - ImGui::NewFrame(); -} - -void DearImGui::end_frame() { - // ImGui::Render calls ImGui::EndFrame - ImGui::Render(); -} - -void DearImGui::render(vk::CommandBuffer const cb) { ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), cb); } -} // namespace facade diff --git a/facade-lib/src/detail/dear_imgui.hpp b/facade-lib/src/detail/dear_imgui.hpp deleted file mode 100644 index 9182c3a..0000000 --- a/facade-lib/src/detail/dear_imgui.hpp +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once -#include -#include -#include -#include - -namespace facade { -class DearImGui { - public: - struct CreateInfo { - Gfx gfx{}; - Glfw::Window window{}; - vk::RenderPass render_pass{}; - vk::SampleCountFlagBits samples{vk::SampleCountFlagBits::e1}; - ColourSpace swapchain{ColourSpace::eSrgb}; - }; - - DearImGui(CreateInfo const& info); - ~DearImGui(); - - void new_frame(); - void end_frame(); - void render(vk::CommandBuffer cb); - - DearImGui& operator=(DearImGui&&) = delete; - - private: - vk::UniqueDescriptorPool m_pool{}; -}; -} // namespace facade From 1c1e3f1c3b19974753ec55f69635cd83c8cf19b5 Mon Sep 17 00:00:00 2001 From: Karn Kaul Date: Mon, 24 Oct 2022 14:08:13 -0700 Subject: [PATCH 06/10] WIP: Move engine, editor to library targets --- facade-lib/CMakeLists.txt | 20 +++---- facade-lib/editor/CMakeLists.txt | 40 ++++++++++++++ .../include/facade/editor/common.hpp | 0 .../include/facade/editor/inspector.hpp | 0 .../include/facade/editor/log.hpp | 0 .../include/facade/editor/scene_tree.hpp | 0 .../{src/editor => editor/src}/common.cpp | 0 .../{src/editor => editor/src}/inspector.cpp | 0 facade-lib/{src/editor => editor/src}/log.cpp | 0 .../{src/editor => editor/src}/scene_tree.cpp | 0 facade-lib/engine/CMakeLists.txt | 33 ++++++++++++ .../include/facade/engine/engine.hpp | 11 ++-- .../{src/engine => engine/src}/engine.cpp | 37 +++---------- facade-lib/glfw/CMakeLists.txt | 4 +- facade-lib/include/facade/defines.hpp | 10 ---- facade-lib/include/facade/facade.hpp | 28 ++++++++++ facade-lib/render/CMakeLists.txt | 2 +- facade-lib/scene/CMakeLists.txt | 20 +++---- facade-lib/scene/src/detail/gltf.cpp | 2 +- facade-lib/scene/src/detail/gltf.hpp | 2 +- facade-lib/src/facade.cpp | 22 ++++++++ facade-lib/util/CMakeLists.txt | 2 - facade-lib/vk/CMakeLists.txt | 42 ++++++++------- .../include/facade/vk}/geometry.hpp | 0 facade-lib/{util => vk}/src/geometry.cpp | 2 +- facade-lib/vk/src/pipes.cpp | 2 +- facade-lib/vk/src/static_mesh.cpp | 2 +- src/main.cpp | 54 +++++++++---------- 28 files changed, 206 insertions(+), 129 deletions(-) create mode 100644 facade-lib/editor/CMakeLists.txt rename facade-lib/{ => editor}/include/facade/editor/common.hpp (100%) rename facade-lib/{ => editor}/include/facade/editor/inspector.hpp (100%) rename facade-lib/{ => editor}/include/facade/editor/log.hpp (100%) rename facade-lib/{ => editor}/include/facade/editor/scene_tree.hpp (100%) rename facade-lib/{src/editor => editor/src}/common.cpp (100%) rename facade-lib/{src/editor => editor/src}/inspector.cpp (100%) rename facade-lib/{src/editor => editor/src}/log.cpp (100%) rename facade-lib/{src/editor => editor/src}/scene_tree.cpp (100%) create mode 100644 facade-lib/engine/CMakeLists.txt rename facade-lib/{ => engine}/include/facade/engine/engine.hpp (82%) rename facade-lib/{src/engine => engine/src}/engine.cpp (72%) delete mode 100644 facade-lib/include/facade/defines.hpp create mode 100644 facade-lib/include/facade/facade.hpp create mode 100644 facade-lib/src/facade.cpp rename facade-lib/{util/include/facade/util => vk/include/facade/vk}/geometry.hpp (100%) rename facade-lib/{util => vk}/src/geometry.cpp (99%) diff --git a/facade-lib/CMakeLists.txt b/facade-lib/CMakeLists.txt index 9de64b9..8a05184 100644 --- a/facade-lib/CMakeLists.txt +++ b/facade-lib/CMakeLists.txt @@ -8,6 +8,8 @@ add_subdirectory(vk) add_subdirectory(glfw) add_subdirectory(render) add_subdirectory(scene) +add_subdirectory(engine) +add_subdirectory(editor) find_package(Threads) @@ -19,6 +21,8 @@ target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20) target_link_libraries(${PROJECT_NAME} PUBLIC ${target_prefix}::scene + ${target_prefix}::engine + ${target_prefix}::editor PRIVATE ${target_prefix}::compile-options @@ -34,19 +38,7 @@ target_include_directories(${PROJECT_NAME} ) target_sources(${PROJECT_NAME} PRIVATE - include/facade/defines.hpp + include/facade/facade.hpp - include/facade/engine/engine.hpp - - include/facade/editor/common.hpp - include/facade/editor/inspector.hpp - include/facade/editor/log.hpp - include/facade/editor/scene_tree.hpp - - src/engine/engine.cpp - - src/editor/common.cpp - src/editor/inspector.cpp - src/editor/log.cpp - src/editor/scene_tree.cpp + src/facade.cpp ) diff --git a/facade-lib/editor/CMakeLists.txt b/facade-lib/editor/CMakeLists.txt new file mode 100644 index 0000000..9ea67aa --- /dev/null +++ b/facade-lib/editor/CMakeLists.txt @@ -0,0 +1,40 @@ +if("${target_prefix}" STREQUAL "") + message(FATAL_ERROR "target_prefix unset") +endif() + +project(${target_prefix}-editor) + +add_library(${PROJECT_NAME}) +add_library(${target_prefix}::editor ALIAS ${PROJECT_NAME}) + +target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20) + +target_include_directories(${PROJECT_NAME} + PUBLIC + include + + PRIVATE + src +) + +target_link_libraries(${PROJECT_NAME} + PUBLIC + ${target_prefix}::scene + ${target_prefix}::dear_imgui + + PRIVATE + ${target_prefix}::compile-options + ${target_prefix}::pch +) + +target_sources(${PROJECT_NAME} PRIVATE + include/${target_prefix}/editor/common.hpp + include/${target_prefix}/editor/inspector.hpp + include/${target_prefix}/editor/log.hpp + include/${target_prefix}/editor/scene_tree.hpp + + src/common.cpp + src/inspector.cpp + src/log.cpp + src/scene_tree.cpp +) diff --git a/facade-lib/include/facade/editor/common.hpp b/facade-lib/editor/include/facade/editor/common.hpp similarity index 100% rename from facade-lib/include/facade/editor/common.hpp rename to facade-lib/editor/include/facade/editor/common.hpp diff --git a/facade-lib/include/facade/editor/inspector.hpp b/facade-lib/editor/include/facade/editor/inspector.hpp similarity index 100% rename from facade-lib/include/facade/editor/inspector.hpp rename to facade-lib/editor/include/facade/editor/inspector.hpp diff --git a/facade-lib/include/facade/editor/log.hpp b/facade-lib/editor/include/facade/editor/log.hpp similarity index 100% rename from facade-lib/include/facade/editor/log.hpp rename to facade-lib/editor/include/facade/editor/log.hpp diff --git a/facade-lib/include/facade/editor/scene_tree.hpp b/facade-lib/editor/include/facade/editor/scene_tree.hpp similarity index 100% rename from facade-lib/include/facade/editor/scene_tree.hpp rename to facade-lib/editor/include/facade/editor/scene_tree.hpp diff --git a/facade-lib/src/editor/common.cpp b/facade-lib/editor/src/common.cpp similarity index 100% rename from facade-lib/src/editor/common.cpp rename to facade-lib/editor/src/common.cpp diff --git a/facade-lib/src/editor/inspector.cpp b/facade-lib/editor/src/inspector.cpp similarity index 100% rename from facade-lib/src/editor/inspector.cpp rename to facade-lib/editor/src/inspector.cpp diff --git a/facade-lib/src/editor/log.cpp b/facade-lib/editor/src/log.cpp similarity index 100% rename from facade-lib/src/editor/log.cpp rename to facade-lib/editor/src/log.cpp diff --git a/facade-lib/src/editor/scene_tree.cpp b/facade-lib/editor/src/scene_tree.cpp similarity index 100% rename from facade-lib/src/editor/scene_tree.cpp rename to facade-lib/editor/src/scene_tree.cpp diff --git a/facade-lib/engine/CMakeLists.txt b/facade-lib/engine/CMakeLists.txt new file mode 100644 index 0000000..78f7247 --- /dev/null +++ b/facade-lib/engine/CMakeLists.txt @@ -0,0 +1,33 @@ +if("${target_prefix}" STREQUAL "") + message(FATAL_ERROR "target_prefix unset") +endif() + +project(${target_prefix}-engine) + +add_library(${PROJECT_NAME}) +add_library(${target_prefix}::engine ALIAS ${PROJECT_NAME}) + +target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20) + +target_include_directories(${PROJECT_NAME} + PUBLIC + include + + PRIVATE + src +) + +target_link_libraries(${PROJECT_NAME} + PUBLIC + ${target_prefix}::render + + PRIVATE + ${target_prefix}::compile-options + ${target_prefix}::pch +) + +target_sources(${PROJECT_NAME} PRIVATE + include/${target_prefix}/engine/engine.hpp + + src/engine.cpp +) diff --git a/facade-lib/include/facade/engine/engine.hpp b/facade-lib/engine/include/facade/engine/engine.hpp similarity index 82% rename from facade-lib/include/facade/engine/engine.hpp rename to facade-lib/engine/include/facade/engine/engine.hpp index 5c8ef89..b0e08b7 100644 --- a/facade-lib/include/facade/engine/engine.hpp +++ b/facade-lib/engine/include/facade/engine/engine.hpp @@ -1,6 +1,5 @@ #pragma once #include -#include #include namespace facade { @@ -27,12 +26,12 @@ class Engine { explicit Engine(CreateInfo const& info = {}); bool add_shader(Shader shader); - void show(bool reset_dt); - void hide(); + void show_window(); + void hide_window(); bool running() const; - float next_frame(); - void render(Scene& scene) const; + bool next_frame(vk::CommandBuffer& out); + void submit(); void request_stop(); void reload(CreateInfo const& info); @@ -40,7 +39,7 @@ class Engine { Glfw::Window window() const; Gfx const& gfx() const; Input const& input() const; - Renderer const& renderer() const; + Renderer& renderer() const; private: struct Impl; diff --git a/facade-lib/src/engine/engine.cpp b/facade-lib/engine/src/engine.cpp similarity index 72% rename from facade-lib/src/engine/engine.cpp rename to facade-lib/engine/src/engine.cpp index 7466616..9311e99 100644 --- a/facade-lib/src/engine/engine.cpp +++ b/facade-lib/engine/src/engine.cpp @@ -1,6 +1,5 @@ #include #include -#include #include namespace facade { @@ -35,9 +34,6 @@ struct Engine::Impl { Renderer renderer; - DeltaTime dt{}; - std::optional cb{}; - Impl(CreateInfo const& info) : window(make_window(info.extent, info.title)), vulkan(GlfwWsi{window}), gfx{vulkan.gfx()}, renderer(gfx, window, make_renderer_info(vulkan.gpu(), info.msaa_samples)) {} @@ -48,46 +44,29 @@ Engine& Engine::operator=(Engine&&) noexcept = default; Engine::~Engine() noexcept = default; Engine::Engine(CreateInfo const& info) : m_impl(std::make_unique(info)) { - if (info.auto_show) { show(true); } + if (info.auto_show) { show_window(); } } bool Engine::add_shader(Shader shader) { return m_impl->renderer.add_shader(shader); } -void Engine::show(bool reset_dt) { - glfwShowWindow(m_impl->window.get()); - if (reset_dt) { m_impl->dt = {}; } -} +void Engine::show_window() { glfwShowWindow(m_impl->window.get()); } -void Engine::hide() { glfwHideWindow(m_impl->window.get()); } +void Engine::hide_window() { glfwHideWindow(m_impl->window.get()); } bool Engine::running() const { return !glfwWindowShouldClose(m_impl->window.get()); } -float Engine::next_frame() { - assert(!m_impl->cb); +bool Engine::next_frame(vk::CommandBuffer& out) { m_impl->window.get().glfw->poll_events(); - auto cb = vk::CommandBuffer{}; - if (!m_impl->renderer.next_frame({&cb, 1})) { return m_impl->dt(); } - m_impl->cb = cb; - return m_impl->dt(); + if (!m_impl->renderer.next_frame({&out, 1})) { return false; } + return true; } -void Engine::render(Scene& scene) const { - if (m_impl->cb) { scene.render(m_impl->renderer, *m_impl->cb); } - m_impl->renderer.render(); - m_impl->cb.reset(); -} +void Engine::submit() { m_impl->renderer.render(); } void Engine::request_stop() { glfwSetWindowShouldClose(m_impl->window.get(), GLFW_TRUE); } -void Engine::reload(CreateInfo const& info) { - m_impl->gfx.device.waitIdle(); - m_impl.reset(); - m_impl = std::make_unique(info); - show(true); -} - Gfx const& Engine::gfx() const { return m_impl->gfx; } Glfw::Window Engine::window() const { return m_impl->window; } Input const& Engine::input() const { return m_impl->window.get().state().input; } -Renderer const& Engine::renderer() const { return m_impl->renderer; } +Renderer& Engine::renderer() const { return m_impl->renderer; } } // namespace facade diff --git a/facade-lib/glfw/CMakeLists.txt b/facade-lib/glfw/CMakeLists.txt index 218d063..18ec6a7 100644 --- a/facade-lib/glfw/CMakeLists.txt +++ b/facade-lib/glfw/CMakeLists.txt @@ -30,8 +30,8 @@ target_link_libraries(${PROJECT_NAME} ) target_sources(${PROJECT_NAME} PRIVATE - include/facade/glfw/glfw.hpp - include/facade/glfw/input.hpp + include/${target_prefix}/glfw/glfw.hpp + include/${target_prefix}/glfw/input.hpp src/glfw.cpp ) diff --git a/facade-lib/include/facade/defines.hpp b/facade-lib/include/facade/defines.hpp deleted file mode 100644 index dcd950b..0000000 --- a/facade-lib/include/facade/defines.hpp +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once - -namespace facade { -constexpr bool debug_v = -#if defined(FACADE_DEBUG) - true; -#else - false; -#endif -} // namespace facade diff --git a/facade-lib/include/facade/facade.hpp b/facade-lib/include/facade/facade.hpp new file mode 100644 index 0000000..7294141 --- /dev/null +++ b/facade-lib/include/facade/facade.hpp @@ -0,0 +1,28 @@ +#pragma once +#include +#include +#include + +namespace facade { +class Context { + public: + Context(Engine::CreateInfo const& create_info = {}); + + void add_shader(Shader shader); + + void show(bool reset_dt); + + bool running() const { return engine.running(); } + float next_frame(); + + void request_stop() { engine.request_stop(); } + + Engine engine; + Scene scene; + + private: + DeltaTime m_dt{}; + vk::CommandBuffer m_cb{}; + bool m_ready_to_render{}; +}; +} // namespace facade diff --git a/facade-lib/render/CMakeLists.txt b/facade-lib/render/CMakeLists.txt index 240f6de..c2d5eac 100644 --- a/facade-lib/render/CMakeLists.txt +++ b/facade-lib/render/CMakeLists.txt @@ -28,7 +28,7 @@ target_link_libraries(${PROJECT_NAME} ) target_sources(${PROJECT_NAME} PRIVATE - include/facade/render/renderer.hpp + include/${target_prefix}/render/renderer.hpp src/detail/dear_imgui.cpp src/detail/dear_imgui.hpp diff --git a/facade-lib/scene/CMakeLists.txt b/facade-lib/scene/CMakeLists.txt index 45c9ce5..9a45397 100644 --- a/facade-lib/scene/CMakeLists.txt +++ b/facade-lib/scene/CMakeLists.txt @@ -28,16 +28,16 @@ target_link_libraries(${PROJECT_NAME} ) target_sources(${PROJECT_NAME} PRIVATE - include/facade/scene/camera.hpp - include/facade/scene/fly_cam.hpp - include/facade/scene/id.hpp - include/facade/scene/lights.hpp - include/facade/scene/material.hpp - include/facade/scene/node_data.hpp - include/facade/scene/node.hpp - include/facade/scene/rect.hpp - include/facade/scene/scene.hpp - include/facade/scene/transform.hpp + include/${target_prefix}/scene/camera.hpp + include/${target_prefix}/scene/fly_cam.hpp + include/${target_prefix}/scene/id.hpp + include/${target_prefix}/scene/lights.hpp + include/${target_prefix}/scene/material.hpp + include/${target_prefix}/scene/node_data.hpp + include/${target_prefix}/scene/node.hpp + include/${target_prefix}/scene/rect.hpp + include/${target_prefix}/scene/scene.hpp + include/${target_prefix}/scene/transform.hpp src/detail/gltf.cpp src/detail/gltf.hpp diff --git a/facade-lib/scene/src/detail/gltf.cpp b/facade-lib/scene/src/detail/gltf.cpp index 0cde933..df6810c 100644 --- a/facade-lib/scene/src/detail/gltf.cpp +++ b/facade-lib/scene/src/detail/gltf.cpp @@ -2,7 +2,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/facade-lib/scene/src/detail/gltf.hpp b/facade-lib/scene/src/detail/gltf.hpp index 096ba35..4a1077e 100644 --- a/facade-lib/scene/src/detail/gltf.hpp +++ b/facade-lib/scene/src/detail/gltf.hpp @@ -3,8 +3,8 @@ #include #include #include -#include #include +#include #include #include #include diff --git a/facade-lib/src/facade.cpp b/facade-lib/src/facade.cpp new file mode 100644 index 0000000..1460f53 --- /dev/null +++ b/facade-lib/src/facade.cpp @@ -0,0 +1,22 @@ +#include + +namespace facade { +Context::Context(Engine::CreateInfo const& create_info) : engine(create_info), scene(engine.gfx()) {} + +void Context::add_shader(Shader shader) { engine.add_shader(std::move(shader)); } + +void Context::show(bool reset_dt) { + engine.show_window(); + if (reset_dt) { m_dt = {}; } +} + +float Context::next_frame() { + if (m_ready_to_render) { + if (m_cb) { scene.render(engine.renderer(), m_cb); } + engine.submit(); + } + if (!engine.next_frame(m_cb)) { m_cb = vk::CommandBuffer{}; } + m_ready_to_render = true; + return m_dt(); +} +} // namespace facade diff --git a/facade-lib/util/CMakeLists.txt b/facade-lib/util/CMakeLists.txt index 807151e..f852a03 100644 --- a/facade-lib/util/CMakeLists.txt +++ b/facade-lib/util/CMakeLists.txt @@ -56,7 +56,6 @@ target_sources(${PROJECT_NAME} PRIVATE include/${target_prefix}/util/error.hpp include/${target_prefix}/util/fixed_string.hpp include/${target_prefix}/util/flex_array.hpp - include/${target_prefix}/util/geometry.hpp include/${target_prefix}/util/image.hpp include/${target_prefix}/util/logger.hpp include/${target_prefix}/util/mufo.hpp @@ -69,7 +68,6 @@ target_sources(${PROJECT_NAME} PRIVATE include/${target_prefix}/util/visitor.hpp src/data_provider.cpp - src/geometry.cpp src/image.cpp src/logger.cpp src/time.cpp diff --git a/facade-lib/vk/CMakeLists.txt b/facade-lib/vk/CMakeLists.txt index fa01dfe..ff2b12c 100644 --- a/facade-lib/vk/CMakeLists.txt +++ b/facade-lib/vk/CMakeLists.txt @@ -29,31 +29,33 @@ target_link_libraries(${PROJECT_NAME} ) target_sources(${PROJECT_NAME} PRIVATE - include/facade/vk/buffer.hpp - include/facade/vk/cmd.hpp - include/facade/vk/defer.hpp - include/facade/vk/descriptor_set.hpp - include/facade/vk/drawer.hpp - include/facade/vk/gfx.hpp - include/facade/vk/pipeline.hpp - include/facade/vk/pipes.hpp - include/facade/vk/render_frame.hpp - include/facade/vk/render_pass.hpp - include/facade/vk/render_target.hpp - include/facade/vk/set_allocator.hpp - include/facade/vk/shader.hpp - include/facade/vk/spir_v.hpp - include/facade/vk/static_mesh.hpp - include/facade/vk/swapchain.hpp - include/facade/vk/texture.hpp - include/facade/vk/vk.hpp - include/facade/vk/vma.hpp - include/facade/vk/wsi.hpp + include/${target_prefix}/vk/buffer.hpp + include/${target_prefix}/vk/cmd.hpp + include/${target_prefix}/vk/defer.hpp + include/${target_prefix}/vk/descriptor_set.hpp + include/${target_prefix}/vk/drawer.hpp + include/${target_prefix}/vk/geometry.hpp + include/${target_prefix}/vk/gfx.hpp + include/${target_prefix}/vk/pipeline.hpp + include/${target_prefix}/vk/pipes.hpp + include/${target_prefix}/vk/render_frame.hpp + include/${target_prefix}/vk/render_pass.hpp + include/${target_prefix}/vk/render_target.hpp + include/${target_prefix}/vk/set_allocator.hpp + include/${target_prefix}/vk/shader.hpp + include/${target_prefix}/vk/spir_v.hpp + include/${target_prefix}/vk/static_mesh.hpp + include/${target_prefix}/vk/swapchain.hpp + include/${target_prefix}/vk/texture.hpp + include/${target_prefix}/vk/vk.hpp + include/${target_prefix}/vk/vma.hpp + include/${target_prefix}/vk/wsi.hpp src/buffer.cpp src/cmd.cpp src/descriptor_set.cpp src/drawer.cpp + src/geometry.cpp src/gfx.cpp src/pipeline.cpp src/pipes.cpp diff --git a/facade-lib/util/include/facade/util/geometry.hpp b/facade-lib/vk/include/facade/vk/geometry.hpp similarity index 100% rename from facade-lib/util/include/facade/util/geometry.hpp rename to facade-lib/vk/include/facade/vk/geometry.hpp diff --git a/facade-lib/util/src/geometry.cpp b/facade-lib/vk/src/geometry.cpp similarity index 99% rename from facade-lib/util/src/geometry.cpp rename to facade-lib/vk/src/geometry.cpp index 6d839c4..e8d70c9 100644 --- a/facade-lib/util/src/geometry.cpp +++ b/facade-lib/vk/src/geometry.cpp @@ -1,6 +1,6 @@ #include -#include #include +#include #include auto facade::make_cube(glm::vec3 size, glm::vec3 rgb, glm::vec3 const o) -> Geometry { diff --git a/facade-lib/vk/src/pipes.cpp b/facade-lib/vk/src/pipes.cpp index 9614669..c9e5428 100644 --- a/facade-lib/vk/src/pipes.cpp +++ b/facade-lib/vk/src/pipes.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include #include diff --git a/facade-lib/vk/src/static_mesh.cpp b/facade-lib/vk/src/static_mesh.cpp index 5b6659c..d5c3a1d 100644 --- a/facade-lib/vk/src/static_mesh.cpp +++ b/facade-lib/vk/src/static_mesh.cpp @@ -1,5 +1,5 @@ -#include #include +#include #include #include diff --git a/src/main.cpp b/src/main.cpp index 3010878..4d71dd1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,16 +4,15 @@ #include #include #include -#include #include +#include #include #include #include -#include -#include +#include #include #include @@ -238,41 +237,40 @@ struct MainMenu { }; void run() { - auto engine = Engine{}; + auto context = std::optional{}; struct DummyDataProvider : DataProvider { ByteBuffer load(std::string_view) const override { return {}; } }; - auto scene = std::optional{}; - auto material_id = Id{}; auto node_id = Id{}; auto post_scene_load = [&] { - scene->camera().transform.set_position({0.0f, 0.0f, 5.0f}); + context->scene.camera().transform.set_position({0.0f, 0.0f, 5.0f}); auto material = std::make_unique(); material->albedo = {1.0f, 0.0f, 0.0f}; - material_id = scene->add(std::move(material)); - auto static_mesh_id = scene->add(StaticMesh{engine.gfx(), make_cubed_sphere(1.0f, 32)}); - auto mesh_id = scene->add(Mesh{.primitives = {Mesh::Primitive{static_mesh_id, material_id}}}); + material_id = context->scene.add(std::move(material)); + auto static_mesh_id = context->scene.add(StaticMesh{context->engine.gfx(), make_cubed_sphere(1.0f, 32)}); + auto mesh_id = context->scene.add(Mesh{.primitives = {Mesh::Primitive{static_mesh_id, material_id}}}); auto node = Node{}; node.attach(mesh_id); node.instances.emplace_back().set_position({1.0f, -5.0f, -20.0f}); node.instances.emplace_back().set_position({-1.0f, 1.0f, 0.0f}); - node_id = scene->add(std::move(node), 0); + node_id = context->scene.add(std::move(node), 0); + context->show(true); }; auto init = [&] { + context.emplace(); auto lit = shaders::lit(); lit.id = "default"; - engine.add_shader(lit); - engine.add_shader(shaders::unlit()); + context->add_shader(lit); + context->add_shader(shaders::unlit()); - scene.emplace(engine.gfx()); - scene->dir_lights.push_back(DirLight{.direction = glm::normalize(glm::vec3{-1.0f, -1.0f, -1.0f}), .diffuse = glm::vec3{5.0f}}); - scene->load_gltf(dj::Json::parse(test_json_v), DummyDataProvider{}); + context->scene.dir_lights.push_back(DirLight{.direction = glm::normalize(glm::vec3{-1.0f, -1.0f, -1.0f}), .diffuse = glm::vec3{5.0f}}); + context->scene.load_gltf(dj::Json::parse(test_json_v), DummyDataProvider{}); post_scene_load(); }; @@ -282,26 +280,25 @@ void run() { auto main_menu = MainMenu{}; - engine.show(true); - while (engine.running()) { - auto const dt = engine.next_frame(); - auto const& state = engine.window().state(); + while (context->running()) { + auto const dt = context->next_frame(); + auto const& state = context->engine.window().state(); auto const& input = state.input; bool const mouse_look = input.mouse.held(GLFW_MOUSE_BUTTON_RIGHT); - if (input.keyboard.pressed(GLFW_KEY_ESCAPE)) { engine.request_stop(); } - glfwSetInputMode(engine.window(), GLFW_CURSOR, mouse_look ? GLFW_CURSOR_DISABLED : GLFW_CURSOR_NORMAL); + if (input.keyboard.pressed(GLFW_KEY_ESCAPE)) { context->request_stop(); } + glfwSetInputMode(context->engine.window(), GLFW_CURSOR, mouse_look ? GLFW_CURSOR_DISABLED : GLFW_CURSOR_NORMAL); if (!state.file_drops.empty()) { auto const& file = state.file_drops.front(); - if (!load_gltf(*scene, file)) { + if (!load_gltf(context->scene, file)) { logger::warn("Failed to load GLTF: [{}]", file); } else { post_scene_load(); } } - auto& camera = scene->camera(); + auto& camera = context->scene.camera(); if (auto fly_cam = FlyCam{camera.transform}) { if (input.keyboard.held(GLFW_KEY_A) || input.keyboard.held(GLFW_KEY_LEFT)) { fly_cam.move_right(-dt); } if (input.keyboard.held(GLFW_KEY_D) || input.keyboard.held(GLFW_KEY_RIGHT)) { fly_cam.move_right(dt); } @@ -314,23 +311,20 @@ void run() { if (input.keyboard.pressed(GLFW_KEY_R)) { logger::info("Reloading..."); - scene.reset(); - engine.reload({}); + context.reset(); init(); continue; } // TEMP CODE - auto* node = scene->find_node(node_id); + auto* node = context->scene.find_node(node_id); node->instances[0].rotate(glm::radians(drot_z[0]) * dt, {0.0f, 1.0f, 0.0f}); node->instances[1].rotate(glm::radians(drot_z[1]) * dt, {1.0f, 0.0f, 0.0f}); ImGui::ShowDemoWindow(); - main_menu.display(engine, *scene, dt); + main_menu.display(context->engine, context->scene, dt); // TEMP CODE - - engine.render(*scene); } } } // namespace From fd6ac3f32fc8206fa0943ee41a4e84259d03e04f Mon Sep 17 00:00:00 2001 From: Karn Kaul Date: Mon, 24 Oct 2022 14:18:29 -0700 Subject: [PATCH 07/10] Remove facade-lib, finalize libs, move ext --- CMakeLists.txt | 19 ++++---- cmake/interface/CMakeLists.txt | 8 +++- facade-lib/CMakeLists.txt | 44 ------------------ lib/CMakeLists.txt | 22 +++++++++ lib/context/CMakeLists.txt | 34 ++++++++++++++ .../include/facade/context/context.hpp | 0 .../facade.cpp => lib/context/src/context.cpp | 2 +- {facade-lib => lib}/editor/CMakeLists.txt | 0 .../editor/include/facade/editor/common.hpp | 0 .../include/facade/editor/inspector.hpp | 0 .../editor/include/facade/editor/log.hpp | 0 .../include/facade/editor/scene_tree.hpp | 0 {facade-lib => lib}/editor/src/common.cpp | 0 {facade-lib => lib}/editor/src/inspector.cpp | 0 {facade-lib => lib}/editor/src/log.cpp | 0 {facade-lib => lib}/editor/src/scene_tree.cpp | 0 {facade-lib => lib}/engine/CMakeLists.txt | 0 .../engine/include/facade/engine/engine.hpp | 0 {facade-lib => lib}/engine/src/engine.cpp | 0 {ext => lib/ext}/.gitignore | 0 {ext => lib/ext}/CMakeLists.txt | 12 +++-- {ext => lib/ext}/src.zip | Bin {facade-lib => lib}/glfw/CMakeLists.txt | 0 .../glfw/include/facade/glfw/glfw.hpp | 0 .../glfw/include/facade/glfw/input.hpp | 0 {facade-lib => lib}/glfw/src/glfw.cpp | 0 {facade-lib => lib}/interface/CMakeLists.txt | 0 .../interface/include/facade/defines.hpp | 0 .../src/make_unique_for_overwrite.cpp | 0 {facade-lib => lib}/render/CMakeLists.txt | 0 .../render/include/facade/render/renderer.hpp | 0 .../render/src/detail/dear_imgui.cpp | 0 .../render/src/detail/dear_imgui.hpp | 0 {facade-lib => lib}/render/src/renderer.cpp | 0 {facade-lib => lib}/scene/CMakeLists.txt | 0 .../scene/include/facade/scene/camera.hpp | 0 .../scene/include/facade/scene/fly_cam.hpp | 0 .../scene/include/facade/scene/id.hpp | 0 .../scene/include/facade/scene/lights.hpp | 0 .../scene/include/facade/scene/material.hpp | 0 .../scene/include/facade/scene/node.hpp | 0 .../scene/include/facade/scene/node_data.hpp | 0 .../scene/include/facade/scene/rect.hpp | 0 .../scene/include/facade/scene/scene.hpp | 0 .../scene/include/facade/scene/transform.hpp | 0 {facade-lib => lib}/scene/src/camera.cpp | 0 {facade-lib => lib}/scene/src/detail/gltf.cpp | 0 {facade-lib => lib}/scene/src/detail/gltf.hpp | 0 {facade-lib => lib}/scene/src/material.cpp | 0 {facade-lib => lib}/scene/src/scene.cpp | 0 {facade-lib => lib}/scene/src/transform.cpp | 0 {facade-lib => lib}/util/CMakeLists.txt | 0 .../util/include/facade/util/async_queue.hpp | 0 .../util/include/facade/util/byte_buffer.hpp | 0 .../util/include/facade/util/colour_space.hpp | 0 .../include/facade/util/data_provider.hpp | 0 .../util/include/facade/util/defer_queue.hpp | 0 .../util/include/facade/util/enum_array.hpp | 0 .../util/include/facade/util/error.hpp | 0 .../util/include/facade/util/fixed_string.hpp | 0 .../util/include/facade/util/flex_array.hpp | 0 .../util/include/facade/util/image.hpp | 0 .../util/include/facade/util/logger.hpp | 0 .../util/include/facade/util/mufo.hpp | 0 .../util/include/facade/util/nvec3.hpp | 0 .../util/include/facade/util/pinned.hpp | 0 .../util/include/facade/util/ring_buffer.hpp | 0 .../util/include/facade/util/time.hpp | 0 .../util/include/facade/util/type_id.hpp | 0 .../util/include/facade/util/unique.hpp | 0 .../util/include/facade/util/visitor.hpp | 0 .../util/src/data_provider.cpp | 0 {facade-lib => lib}/util/src/image.cpp | 0 {facade-lib => lib}/util/src/logger.cpp | 0 {facade-lib => lib}/util/src/time.cpp | 0 {facade-lib => lib}/vk/CMakeLists.txt | 0 .../vk/include/facade/vk/buffer.hpp | 0 .../vk/include/facade/vk/cmd.hpp | 0 .../vk/include/facade/vk/defer.hpp | 0 .../vk/include/facade/vk/descriptor_set.hpp | 0 .../vk/include/facade/vk/drawer.hpp | 0 .../vk/include/facade/vk/geometry.hpp | 0 .../vk/include/facade/vk/gfx.hpp | 0 .../vk/include/facade/vk/pipeline.hpp | 0 .../vk/include/facade/vk/pipes.hpp | 0 .../vk/include/facade/vk/render_frame.hpp | 0 .../vk/include/facade/vk/render_pass.hpp | 0 .../vk/include/facade/vk/render_target.hpp | 0 .../vk/include/facade/vk/set_allocator.hpp | 0 .../vk/include/facade/vk/shader.hpp | 0 .../vk/include/facade/vk/spir_v.hpp | 0 .../vk/include/facade/vk/static_mesh.hpp | 0 .../vk/include/facade/vk/swapchain.hpp | 0 .../vk/include/facade/vk/texture.hpp | 0 .../vk/include/facade/vk/vk.hpp | 0 .../vk/include/facade/vk/vma.hpp | 0 .../vk/include/facade/vk/wsi.hpp | 0 {facade-lib => lib}/vk/src/buffer.cpp | 0 {facade-lib => lib}/vk/src/cmd.cpp | 0 {facade-lib => lib}/vk/src/descriptor_set.cpp | 0 {facade-lib => lib}/vk/src/drawer.cpp | 0 {facade-lib => lib}/vk/src/geometry.cpp | 0 {facade-lib => lib}/vk/src/gfx.cpp | 0 {facade-lib => lib}/vk/src/pipeline.cpp | 0 {facade-lib => lib}/vk/src/pipes.cpp | 0 {facade-lib => lib}/vk/src/render_frame.cpp | 0 {facade-lib => lib}/vk/src/render_pass.cpp | 0 {facade-lib => lib}/vk/src/set_allocator.cpp | 0 {facade-lib => lib}/vk/src/shader.cpp | 0 {facade-lib => lib}/vk/src/spir_v.cpp | 0 {facade-lib => lib}/vk/src/static_mesh.cpp | 0 {facade-lib => lib}/vk/src/swapchain.cpp | 0 {facade-lib => lib}/vk/src/texture.cpp | 0 {facade-lib => lib}/vk/src/vk.cpp | 0 {facade-lib => lib}/vk/src/vma.cpp | 0 src/main.cpp | 4 +- 116 files changed, 83 insertions(+), 62 deletions(-) delete mode 100644 facade-lib/CMakeLists.txt create mode 100644 lib/CMakeLists.txt create mode 100644 lib/context/CMakeLists.txt rename facade-lib/include/facade/facade.hpp => lib/context/include/facade/context/context.hpp (100%) rename facade-lib/src/facade.cpp => lib/context/src/context.cpp (93%) rename {facade-lib => lib}/editor/CMakeLists.txt (100%) rename {facade-lib => lib}/editor/include/facade/editor/common.hpp (100%) rename {facade-lib => lib}/editor/include/facade/editor/inspector.hpp (100%) rename {facade-lib => lib}/editor/include/facade/editor/log.hpp (100%) rename {facade-lib => lib}/editor/include/facade/editor/scene_tree.hpp (100%) rename {facade-lib => lib}/editor/src/common.cpp (100%) rename {facade-lib => lib}/editor/src/inspector.cpp (100%) rename {facade-lib => lib}/editor/src/log.cpp (100%) rename {facade-lib => lib}/editor/src/scene_tree.cpp (100%) rename {facade-lib => lib}/engine/CMakeLists.txt (100%) rename {facade-lib => lib}/engine/include/facade/engine/engine.hpp (100%) rename {facade-lib => lib}/engine/src/engine.cpp (100%) rename {ext => lib/ext}/.gitignore (100%) rename {ext => lib/ext}/CMakeLists.txt (79%) rename {ext => lib/ext}/src.zip (100%) rename {facade-lib => lib}/glfw/CMakeLists.txt (100%) rename {facade-lib => lib}/glfw/include/facade/glfw/glfw.hpp (100%) rename {facade-lib => lib}/glfw/include/facade/glfw/input.hpp (100%) rename {facade-lib => lib}/glfw/src/glfw.cpp (100%) rename {facade-lib => lib}/interface/CMakeLists.txt (100%) rename {facade-lib => lib}/interface/include/facade/defines.hpp (100%) rename {facade-lib => lib}/interface/src/make_unique_for_overwrite.cpp (100%) rename {facade-lib => lib}/render/CMakeLists.txt (100%) rename {facade-lib => lib}/render/include/facade/render/renderer.hpp (100%) rename {facade-lib => lib}/render/src/detail/dear_imgui.cpp (100%) rename {facade-lib => lib}/render/src/detail/dear_imgui.hpp (100%) rename {facade-lib => lib}/render/src/renderer.cpp (100%) rename {facade-lib => lib}/scene/CMakeLists.txt (100%) rename {facade-lib => lib}/scene/include/facade/scene/camera.hpp (100%) rename {facade-lib => lib}/scene/include/facade/scene/fly_cam.hpp (100%) rename {facade-lib => lib}/scene/include/facade/scene/id.hpp (100%) rename {facade-lib => lib}/scene/include/facade/scene/lights.hpp (100%) rename {facade-lib => lib}/scene/include/facade/scene/material.hpp (100%) rename {facade-lib => lib}/scene/include/facade/scene/node.hpp (100%) rename {facade-lib => lib}/scene/include/facade/scene/node_data.hpp (100%) rename {facade-lib => lib}/scene/include/facade/scene/rect.hpp (100%) rename {facade-lib => lib}/scene/include/facade/scene/scene.hpp (100%) rename {facade-lib => lib}/scene/include/facade/scene/transform.hpp (100%) rename {facade-lib => lib}/scene/src/camera.cpp (100%) rename {facade-lib => lib}/scene/src/detail/gltf.cpp (100%) rename {facade-lib => lib}/scene/src/detail/gltf.hpp (100%) rename {facade-lib => lib}/scene/src/material.cpp (100%) rename {facade-lib => lib}/scene/src/scene.cpp (100%) rename {facade-lib => lib}/scene/src/transform.cpp (100%) rename {facade-lib => lib}/util/CMakeLists.txt (100%) rename {facade-lib => lib}/util/include/facade/util/async_queue.hpp (100%) rename {facade-lib => lib}/util/include/facade/util/byte_buffer.hpp (100%) rename {facade-lib => lib}/util/include/facade/util/colour_space.hpp (100%) rename {facade-lib => lib}/util/include/facade/util/data_provider.hpp (100%) rename {facade-lib => lib}/util/include/facade/util/defer_queue.hpp (100%) rename {facade-lib => lib}/util/include/facade/util/enum_array.hpp (100%) rename {facade-lib => lib}/util/include/facade/util/error.hpp (100%) rename {facade-lib => lib}/util/include/facade/util/fixed_string.hpp (100%) rename {facade-lib => lib}/util/include/facade/util/flex_array.hpp (100%) rename {facade-lib => lib}/util/include/facade/util/image.hpp (100%) rename {facade-lib => lib}/util/include/facade/util/logger.hpp (100%) rename {facade-lib => lib}/util/include/facade/util/mufo.hpp (100%) rename {facade-lib => lib}/util/include/facade/util/nvec3.hpp (100%) rename {facade-lib => lib}/util/include/facade/util/pinned.hpp (100%) rename {facade-lib => lib}/util/include/facade/util/ring_buffer.hpp (100%) rename {facade-lib => lib}/util/include/facade/util/time.hpp (100%) rename {facade-lib => lib}/util/include/facade/util/type_id.hpp (100%) rename {facade-lib => lib}/util/include/facade/util/unique.hpp (100%) rename {facade-lib => lib}/util/include/facade/util/visitor.hpp (100%) rename {facade-lib => lib}/util/src/data_provider.cpp (100%) rename {facade-lib => lib}/util/src/image.cpp (100%) rename {facade-lib => lib}/util/src/logger.cpp (100%) rename {facade-lib => lib}/util/src/time.cpp (100%) rename {facade-lib => lib}/vk/CMakeLists.txt (100%) rename {facade-lib => lib}/vk/include/facade/vk/buffer.hpp (100%) rename {facade-lib => lib}/vk/include/facade/vk/cmd.hpp (100%) rename {facade-lib => lib}/vk/include/facade/vk/defer.hpp (100%) rename {facade-lib => lib}/vk/include/facade/vk/descriptor_set.hpp (100%) rename {facade-lib => lib}/vk/include/facade/vk/drawer.hpp (100%) rename {facade-lib => lib}/vk/include/facade/vk/geometry.hpp (100%) rename {facade-lib => lib}/vk/include/facade/vk/gfx.hpp (100%) rename {facade-lib => lib}/vk/include/facade/vk/pipeline.hpp (100%) rename {facade-lib => lib}/vk/include/facade/vk/pipes.hpp (100%) rename {facade-lib => lib}/vk/include/facade/vk/render_frame.hpp (100%) rename {facade-lib => lib}/vk/include/facade/vk/render_pass.hpp (100%) rename {facade-lib => lib}/vk/include/facade/vk/render_target.hpp (100%) rename {facade-lib => lib}/vk/include/facade/vk/set_allocator.hpp (100%) rename {facade-lib => lib}/vk/include/facade/vk/shader.hpp (100%) rename {facade-lib => lib}/vk/include/facade/vk/spir_v.hpp (100%) rename {facade-lib => lib}/vk/include/facade/vk/static_mesh.hpp (100%) rename {facade-lib => lib}/vk/include/facade/vk/swapchain.hpp (100%) rename {facade-lib => lib}/vk/include/facade/vk/texture.hpp (100%) rename {facade-lib => lib}/vk/include/facade/vk/vk.hpp (100%) rename {facade-lib => lib}/vk/include/facade/vk/vma.hpp (100%) rename {facade-lib => lib}/vk/include/facade/vk/wsi.hpp (100%) rename {facade-lib => lib}/vk/src/buffer.cpp (100%) rename {facade-lib => lib}/vk/src/cmd.cpp (100%) rename {facade-lib => lib}/vk/src/descriptor_set.cpp (100%) rename {facade-lib => lib}/vk/src/drawer.cpp (100%) rename {facade-lib => lib}/vk/src/geometry.cpp (100%) rename {facade-lib => lib}/vk/src/gfx.cpp (100%) rename {facade-lib => lib}/vk/src/pipeline.cpp (100%) rename {facade-lib => lib}/vk/src/pipes.cpp (100%) rename {facade-lib => lib}/vk/src/render_frame.cpp (100%) rename {facade-lib => lib}/vk/src/render_pass.cpp (100%) rename {facade-lib => lib}/vk/src/set_allocator.cpp (100%) rename {facade-lib => lib}/vk/src/shader.cpp (100%) rename {facade-lib => lib}/vk/src/spir_v.cpp (100%) rename {facade-lib => lib}/vk/src/static_mesh.cpp (100%) rename {facade-lib => lib}/vk/src/swapchain.cpp (100%) rename {facade-lib => lib}/vk/src/texture.cpp (100%) rename {facade-lib => lib}/vk/src/vk.cpp (100%) rename {facade-lib => lib}/vk/src/vma.cpp (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b4cb7c..6e39f8c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,8 @@ set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_DEBUG_POSTFIX "-d") +set(target_prefix facade) + project(facade) option(FACADE_BUILD_SHADERS "Build facade shaders" ON) @@ -17,15 +19,8 @@ if(FACADE_BUILD_SHADERS) endif() endif() -set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) -try_compile(has_make_unique_for_overwrite "${CMAKE_CURRENT_BINARY_DIR}" SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/cmake/src/make_unique_for_overwrite.cpp") - -add_subdirectory(ext) - -# add_subdirectory(cmake/interface) add_subdirectory(tools/embed_shader) - -add_subdirectory(facade-lib) +add_subdirectory(lib) if(FACADE_BUILD_SHADERS) message(STATUS "Adding build step to embed shaders") @@ -58,5 +53,11 @@ target_sources(${PROJECT_NAME} PRIVATE src/bin/unlit_frag.spv.hpp ) -target_link_libraries(${PROJECT_NAME} PRIVATE facade::lib facade::compile-options) +target_link_libraries(${PROJECT_NAME} PRIVATE + facade::context + facade::editor + facade::compile-options + facade::pch +) + target_include_directories(${PROJECT_NAME} PRIVATE src) diff --git a/cmake/interface/CMakeLists.txt b/cmake/interface/CMakeLists.txt index 2b7e5c4..23fecd8 100644 --- a/cmake/interface/CMakeLists.txt +++ b/cmake/interface/CMakeLists.txt @@ -1,7 +1,11 @@ -project(facade-compile-options) +if("${target_prefix}" STREQUAL "") + message(FATAL_ERROR "target_prefix unset") +endif() + +project(${target_prefix}-compile-options) add_library(${PROJECT_NAME} INTERFACE) -add_library(facade::compile-options ALIAS ${PROJECT_NAME}) +add_library(${target_prefix}::compile-options ALIAS ${PROJECT_NAME}) if(CMAKE_CXX_COMPILER_ID STREQUAL Clang OR CMAKE_CXX_COMPILER_ID STREQUAL GNU) target_compile_options(${PROJECT_NAME} INTERFACE diff --git a/facade-lib/CMakeLists.txt b/facade-lib/CMakeLists.txt deleted file mode 100644 index 8a05184..0000000 --- a/facade-lib/CMakeLists.txt +++ /dev/null @@ -1,44 +0,0 @@ -set(target_prefix facade) - -project(${target_prefix}-lib) - -add_subdirectory(interface) -add_subdirectory(util) -add_subdirectory(vk) -add_subdirectory(glfw) -add_subdirectory(render) -add_subdirectory(scene) -add_subdirectory(engine) -add_subdirectory(editor) - -find_package(Threads) - -add_library(${PROJECT_NAME}) -add_library(${target_prefix}::lib ALIAS ${PROJECT_NAME}) - -target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20) - -target_link_libraries(${PROJECT_NAME} - PUBLIC - ${target_prefix}::scene - ${target_prefix}::engine - ${target_prefix}::editor - - PRIVATE - ${target_prefix}::compile-options - ${target_prefix}::pch -) - -target_include_directories(${PROJECT_NAME} - PUBLIC - include - - PRIVATE - src -) - -target_sources(${PROJECT_NAME} PRIVATE - include/facade/facade.hpp - - src/facade.cpp -) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt new file mode 100644 index 0000000..bf57eaf --- /dev/null +++ b/lib/CMakeLists.txt @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 3.18 FATAL_ERROR) + +if("${target_prefix}" STREQUAL "") + message(FATAL_ERROR "target_prefix unset") +endif() + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_DEBUG_POSTFIX "-d") + +project(${target_prefix}-lib) + +add_subdirectory(ext) +add_subdirectory(interface) +add_subdirectory(util) +add_subdirectory(vk) +add_subdirectory(glfw) +add_subdirectory(render) +add_subdirectory(scene) +add_subdirectory(engine) +add_subdirectory(editor) +add_subdirectory(context) diff --git a/lib/context/CMakeLists.txt b/lib/context/CMakeLists.txt new file mode 100644 index 0000000..614373e --- /dev/null +++ b/lib/context/CMakeLists.txt @@ -0,0 +1,34 @@ +if("${target_prefix}" STREQUAL "") + message(FATAL_ERROR "target_prefix unset") +endif() + +project(${target_prefix}-context) + +add_library(${PROJECT_NAME}) +add_library(${target_prefix}::context ALIAS ${PROJECT_NAME}) + +target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20) + +target_include_directories(${PROJECT_NAME} + PUBLIC + include + + PRIVATE + src +) + +target_link_libraries(${PROJECT_NAME} + PUBLIC + ${target_prefix}::engine + ${target_prefix}::scene + + PRIVATE + ${target_prefix}::compile-options + ${target_prefix}::pch +) + +target_sources(${PROJECT_NAME} PRIVATE + include/${target_prefix}/context/context.hpp + + src/context.cpp +) diff --git a/facade-lib/include/facade/facade.hpp b/lib/context/include/facade/context/context.hpp similarity index 100% rename from facade-lib/include/facade/facade.hpp rename to lib/context/include/facade/context/context.hpp diff --git a/facade-lib/src/facade.cpp b/lib/context/src/context.cpp similarity index 93% rename from facade-lib/src/facade.cpp rename to lib/context/src/context.cpp index 1460f53..ece3c8a 100644 --- a/facade-lib/src/facade.cpp +++ b/lib/context/src/context.cpp @@ -1,4 +1,4 @@ -#include +#include namespace facade { Context::Context(Engine::CreateInfo const& create_info) : engine(create_info), scene(engine.gfx()) {} diff --git a/facade-lib/editor/CMakeLists.txt b/lib/editor/CMakeLists.txt similarity index 100% rename from facade-lib/editor/CMakeLists.txt rename to lib/editor/CMakeLists.txt diff --git a/facade-lib/editor/include/facade/editor/common.hpp b/lib/editor/include/facade/editor/common.hpp similarity index 100% rename from facade-lib/editor/include/facade/editor/common.hpp rename to lib/editor/include/facade/editor/common.hpp diff --git a/facade-lib/editor/include/facade/editor/inspector.hpp b/lib/editor/include/facade/editor/inspector.hpp similarity index 100% rename from facade-lib/editor/include/facade/editor/inspector.hpp rename to lib/editor/include/facade/editor/inspector.hpp diff --git a/facade-lib/editor/include/facade/editor/log.hpp b/lib/editor/include/facade/editor/log.hpp similarity index 100% rename from facade-lib/editor/include/facade/editor/log.hpp rename to lib/editor/include/facade/editor/log.hpp diff --git a/facade-lib/editor/include/facade/editor/scene_tree.hpp b/lib/editor/include/facade/editor/scene_tree.hpp similarity index 100% rename from facade-lib/editor/include/facade/editor/scene_tree.hpp rename to lib/editor/include/facade/editor/scene_tree.hpp diff --git a/facade-lib/editor/src/common.cpp b/lib/editor/src/common.cpp similarity index 100% rename from facade-lib/editor/src/common.cpp rename to lib/editor/src/common.cpp diff --git a/facade-lib/editor/src/inspector.cpp b/lib/editor/src/inspector.cpp similarity index 100% rename from facade-lib/editor/src/inspector.cpp rename to lib/editor/src/inspector.cpp diff --git a/facade-lib/editor/src/log.cpp b/lib/editor/src/log.cpp similarity index 100% rename from facade-lib/editor/src/log.cpp rename to lib/editor/src/log.cpp diff --git a/facade-lib/editor/src/scene_tree.cpp b/lib/editor/src/scene_tree.cpp similarity index 100% rename from facade-lib/editor/src/scene_tree.cpp rename to lib/editor/src/scene_tree.cpp diff --git a/facade-lib/engine/CMakeLists.txt b/lib/engine/CMakeLists.txt similarity index 100% rename from facade-lib/engine/CMakeLists.txt rename to lib/engine/CMakeLists.txt diff --git a/facade-lib/engine/include/facade/engine/engine.hpp b/lib/engine/include/facade/engine/engine.hpp similarity index 100% rename from facade-lib/engine/include/facade/engine/engine.hpp rename to lib/engine/include/facade/engine/engine.hpp diff --git a/facade-lib/engine/src/engine.cpp b/lib/engine/src/engine.cpp similarity index 100% rename from facade-lib/engine/src/engine.cpp rename to lib/engine/src/engine.cpp diff --git a/ext/.gitignore b/lib/ext/.gitignore similarity index 100% rename from ext/.gitignore rename to lib/ext/.gitignore diff --git a/ext/CMakeLists.txt b/lib/ext/CMakeLists.txt similarity index 79% rename from ext/CMakeLists.txt rename to lib/ext/CMakeLists.txt index 1e91cfa..1021fec 100644 --- a/ext/CMakeLists.txt +++ b/lib/ext/CMakeLists.txt @@ -1,10 +1,14 @@ +if("${target_prefix}" STREQUAL "") + message(FATAL_ERROR "target_prefix unset") +endif() + file(ARCHIVE_EXTRACT INPUT "${CMAKE_CURRENT_SOURCE_DIR}/src.zip" DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}") add_subdirectory(src/vk_dynamic) -add_library(${PROJECT_NAME}::vk-dynamic ALIAS vk-dynamic) +add_library(${target_prefix}::vk-dynamic ALIAS vk-dynamic) add_subdirectory(src/vma) -add_library(${PROJECT_NAME}::vma ALIAS vma) +add_library(${target_prefix}::vma ALIAS vma) set(GLFW_VULKAN_STATIC OFF) set(GLFW_INSTALL OFF) @@ -38,10 +42,10 @@ set(SPIRV_CROSS_SKIP_INSTALL ON) add_subdirectory(src/spirv_cross) add_subdirectory(src/dear_imgui) -add_library(${PROJECT_NAME}::dear_imgui ALIAS dear_imgui) +add_library(${target_prefix}::dear_imgui ALIAS dear_imgui) add_subdirectory(src/stb) -add_library(${PROJECT_NAME}::stb-image ALIAS stb-image) +add_library(${target_prefix}::stb-image ALIAS stb-image) add_subdirectory(src/djson) diff --git a/ext/src.zip b/lib/ext/src.zip similarity index 100% rename from ext/src.zip rename to lib/ext/src.zip diff --git a/facade-lib/glfw/CMakeLists.txt b/lib/glfw/CMakeLists.txt similarity index 100% rename from facade-lib/glfw/CMakeLists.txt rename to lib/glfw/CMakeLists.txt diff --git a/facade-lib/glfw/include/facade/glfw/glfw.hpp b/lib/glfw/include/facade/glfw/glfw.hpp similarity index 100% rename from facade-lib/glfw/include/facade/glfw/glfw.hpp rename to lib/glfw/include/facade/glfw/glfw.hpp diff --git a/facade-lib/glfw/include/facade/glfw/input.hpp b/lib/glfw/include/facade/glfw/input.hpp similarity index 100% rename from facade-lib/glfw/include/facade/glfw/input.hpp rename to lib/glfw/include/facade/glfw/input.hpp diff --git a/facade-lib/glfw/src/glfw.cpp b/lib/glfw/src/glfw.cpp similarity index 100% rename from facade-lib/glfw/src/glfw.cpp rename to lib/glfw/src/glfw.cpp diff --git a/facade-lib/interface/CMakeLists.txt b/lib/interface/CMakeLists.txt similarity index 100% rename from facade-lib/interface/CMakeLists.txt rename to lib/interface/CMakeLists.txt diff --git a/facade-lib/interface/include/facade/defines.hpp b/lib/interface/include/facade/defines.hpp similarity index 100% rename from facade-lib/interface/include/facade/defines.hpp rename to lib/interface/include/facade/defines.hpp diff --git a/facade-lib/interface/src/make_unique_for_overwrite.cpp b/lib/interface/src/make_unique_for_overwrite.cpp similarity index 100% rename from facade-lib/interface/src/make_unique_for_overwrite.cpp rename to lib/interface/src/make_unique_for_overwrite.cpp diff --git a/facade-lib/render/CMakeLists.txt b/lib/render/CMakeLists.txt similarity index 100% rename from facade-lib/render/CMakeLists.txt rename to lib/render/CMakeLists.txt diff --git a/facade-lib/render/include/facade/render/renderer.hpp b/lib/render/include/facade/render/renderer.hpp similarity index 100% rename from facade-lib/render/include/facade/render/renderer.hpp rename to lib/render/include/facade/render/renderer.hpp diff --git a/facade-lib/render/src/detail/dear_imgui.cpp b/lib/render/src/detail/dear_imgui.cpp similarity index 100% rename from facade-lib/render/src/detail/dear_imgui.cpp rename to lib/render/src/detail/dear_imgui.cpp diff --git a/facade-lib/render/src/detail/dear_imgui.hpp b/lib/render/src/detail/dear_imgui.hpp similarity index 100% rename from facade-lib/render/src/detail/dear_imgui.hpp rename to lib/render/src/detail/dear_imgui.hpp diff --git a/facade-lib/render/src/renderer.cpp b/lib/render/src/renderer.cpp similarity index 100% rename from facade-lib/render/src/renderer.cpp rename to lib/render/src/renderer.cpp diff --git a/facade-lib/scene/CMakeLists.txt b/lib/scene/CMakeLists.txt similarity index 100% rename from facade-lib/scene/CMakeLists.txt rename to lib/scene/CMakeLists.txt diff --git a/facade-lib/scene/include/facade/scene/camera.hpp b/lib/scene/include/facade/scene/camera.hpp similarity index 100% rename from facade-lib/scene/include/facade/scene/camera.hpp rename to lib/scene/include/facade/scene/camera.hpp diff --git a/facade-lib/scene/include/facade/scene/fly_cam.hpp b/lib/scene/include/facade/scene/fly_cam.hpp similarity index 100% rename from facade-lib/scene/include/facade/scene/fly_cam.hpp rename to lib/scene/include/facade/scene/fly_cam.hpp diff --git a/facade-lib/scene/include/facade/scene/id.hpp b/lib/scene/include/facade/scene/id.hpp similarity index 100% rename from facade-lib/scene/include/facade/scene/id.hpp rename to lib/scene/include/facade/scene/id.hpp diff --git a/facade-lib/scene/include/facade/scene/lights.hpp b/lib/scene/include/facade/scene/lights.hpp similarity index 100% rename from facade-lib/scene/include/facade/scene/lights.hpp rename to lib/scene/include/facade/scene/lights.hpp diff --git a/facade-lib/scene/include/facade/scene/material.hpp b/lib/scene/include/facade/scene/material.hpp similarity index 100% rename from facade-lib/scene/include/facade/scene/material.hpp rename to lib/scene/include/facade/scene/material.hpp diff --git a/facade-lib/scene/include/facade/scene/node.hpp b/lib/scene/include/facade/scene/node.hpp similarity index 100% rename from facade-lib/scene/include/facade/scene/node.hpp rename to lib/scene/include/facade/scene/node.hpp diff --git a/facade-lib/scene/include/facade/scene/node_data.hpp b/lib/scene/include/facade/scene/node_data.hpp similarity index 100% rename from facade-lib/scene/include/facade/scene/node_data.hpp rename to lib/scene/include/facade/scene/node_data.hpp diff --git a/facade-lib/scene/include/facade/scene/rect.hpp b/lib/scene/include/facade/scene/rect.hpp similarity index 100% rename from facade-lib/scene/include/facade/scene/rect.hpp rename to lib/scene/include/facade/scene/rect.hpp diff --git a/facade-lib/scene/include/facade/scene/scene.hpp b/lib/scene/include/facade/scene/scene.hpp similarity index 100% rename from facade-lib/scene/include/facade/scene/scene.hpp rename to lib/scene/include/facade/scene/scene.hpp diff --git a/facade-lib/scene/include/facade/scene/transform.hpp b/lib/scene/include/facade/scene/transform.hpp similarity index 100% rename from facade-lib/scene/include/facade/scene/transform.hpp rename to lib/scene/include/facade/scene/transform.hpp diff --git a/facade-lib/scene/src/camera.cpp b/lib/scene/src/camera.cpp similarity index 100% rename from facade-lib/scene/src/camera.cpp rename to lib/scene/src/camera.cpp diff --git a/facade-lib/scene/src/detail/gltf.cpp b/lib/scene/src/detail/gltf.cpp similarity index 100% rename from facade-lib/scene/src/detail/gltf.cpp rename to lib/scene/src/detail/gltf.cpp diff --git a/facade-lib/scene/src/detail/gltf.hpp b/lib/scene/src/detail/gltf.hpp similarity index 100% rename from facade-lib/scene/src/detail/gltf.hpp rename to lib/scene/src/detail/gltf.hpp diff --git a/facade-lib/scene/src/material.cpp b/lib/scene/src/material.cpp similarity index 100% rename from facade-lib/scene/src/material.cpp rename to lib/scene/src/material.cpp diff --git a/facade-lib/scene/src/scene.cpp b/lib/scene/src/scene.cpp similarity index 100% rename from facade-lib/scene/src/scene.cpp rename to lib/scene/src/scene.cpp diff --git a/facade-lib/scene/src/transform.cpp b/lib/scene/src/transform.cpp similarity index 100% rename from facade-lib/scene/src/transform.cpp rename to lib/scene/src/transform.cpp diff --git a/facade-lib/util/CMakeLists.txt b/lib/util/CMakeLists.txt similarity index 100% rename from facade-lib/util/CMakeLists.txt rename to lib/util/CMakeLists.txt diff --git a/facade-lib/util/include/facade/util/async_queue.hpp b/lib/util/include/facade/util/async_queue.hpp similarity index 100% rename from facade-lib/util/include/facade/util/async_queue.hpp rename to lib/util/include/facade/util/async_queue.hpp diff --git a/facade-lib/util/include/facade/util/byte_buffer.hpp b/lib/util/include/facade/util/byte_buffer.hpp similarity index 100% rename from facade-lib/util/include/facade/util/byte_buffer.hpp rename to lib/util/include/facade/util/byte_buffer.hpp diff --git a/facade-lib/util/include/facade/util/colour_space.hpp b/lib/util/include/facade/util/colour_space.hpp similarity index 100% rename from facade-lib/util/include/facade/util/colour_space.hpp rename to lib/util/include/facade/util/colour_space.hpp diff --git a/facade-lib/util/include/facade/util/data_provider.hpp b/lib/util/include/facade/util/data_provider.hpp similarity index 100% rename from facade-lib/util/include/facade/util/data_provider.hpp rename to lib/util/include/facade/util/data_provider.hpp diff --git a/facade-lib/util/include/facade/util/defer_queue.hpp b/lib/util/include/facade/util/defer_queue.hpp similarity index 100% rename from facade-lib/util/include/facade/util/defer_queue.hpp rename to lib/util/include/facade/util/defer_queue.hpp diff --git a/facade-lib/util/include/facade/util/enum_array.hpp b/lib/util/include/facade/util/enum_array.hpp similarity index 100% rename from facade-lib/util/include/facade/util/enum_array.hpp rename to lib/util/include/facade/util/enum_array.hpp diff --git a/facade-lib/util/include/facade/util/error.hpp b/lib/util/include/facade/util/error.hpp similarity index 100% rename from facade-lib/util/include/facade/util/error.hpp rename to lib/util/include/facade/util/error.hpp diff --git a/facade-lib/util/include/facade/util/fixed_string.hpp b/lib/util/include/facade/util/fixed_string.hpp similarity index 100% rename from facade-lib/util/include/facade/util/fixed_string.hpp rename to lib/util/include/facade/util/fixed_string.hpp diff --git a/facade-lib/util/include/facade/util/flex_array.hpp b/lib/util/include/facade/util/flex_array.hpp similarity index 100% rename from facade-lib/util/include/facade/util/flex_array.hpp rename to lib/util/include/facade/util/flex_array.hpp diff --git a/facade-lib/util/include/facade/util/image.hpp b/lib/util/include/facade/util/image.hpp similarity index 100% rename from facade-lib/util/include/facade/util/image.hpp rename to lib/util/include/facade/util/image.hpp diff --git a/facade-lib/util/include/facade/util/logger.hpp b/lib/util/include/facade/util/logger.hpp similarity index 100% rename from facade-lib/util/include/facade/util/logger.hpp rename to lib/util/include/facade/util/logger.hpp diff --git a/facade-lib/util/include/facade/util/mufo.hpp b/lib/util/include/facade/util/mufo.hpp similarity index 100% rename from facade-lib/util/include/facade/util/mufo.hpp rename to lib/util/include/facade/util/mufo.hpp diff --git a/facade-lib/util/include/facade/util/nvec3.hpp b/lib/util/include/facade/util/nvec3.hpp similarity index 100% rename from facade-lib/util/include/facade/util/nvec3.hpp rename to lib/util/include/facade/util/nvec3.hpp diff --git a/facade-lib/util/include/facade/util/pinned.hpp b/lib/util/include/facade/util/pinned.hpp similarity index 100% rename from facade-lib/util/include/facade/util/pinned.hpp rename to lib/util/include/facade/util/pinned.hpp diff --git a/facade-lib/util/include/facade/util/ring_buffer.hpp b/lib/util/include/facade/util/ring_buffer.hpp similarity index 100% rename from facade-lib/util/include/facade/util/ring_buffer.hpp rename to lib/util/include/facade/util/ring_buffer.hpp diff --git a/facade-lib/util/include/facade/util/time.hpp b/lib/util/include/facade/util/time.hpp similarity index 100% rename from facade-lib/util/include/facade/util/time.hpp rename to lib/util/include/facade/util/time.hpp diff --git a/facade-lib/util/include/facade/util/type_id.hpp b/lib/util/include/facade/util/type_id.hpp similarity index 100% rename from facade-lib/util/include/facade/util/type_id.hpp rename to lib/util/include/facade/util/type_id.hpp diff --git a/facade-lib/util/include/facade/util/unique.hpp b/lib/util/include/facade/util/unique.hpp similarity index 100% rename from facade-lib/util/include/facade/util/unique.hpp rename to lib/util/include/facade/util/unique.hpp diff --git a/facade-lib/util/include/facade/util/visitor.hpp b/lib/util/include/facade/util/visitor.hpp similarity index 100% rename from facade-lib/util/include/facade/util/visitor.hpp rename to lib/util/include/facade/util/visitor.hpp diff --git a/facade-lib/util/src/data_provider.cpp b/lib/util/src/data_provider.cpp similarity index 100% rename from facade-lib/util/src/data_provider.cpp rename to lib/util/src/data_provider.cpp diff --git a/facade-lib/util/src/image.cpp b/lib/util/src/image.cpp similarity index 100% rename from facade-lib/util/src/image.cpp rename to lib/util/src/image.cpp diff --git a/facade-lib/util/src/logger.cpp b/lib/util/src/logger.cpp similarity index 100% rename from facade-lib/util/src/logger.cpp rename to lib/util/src/logger.cpp diff --git a/facade-lib/util/src/time.cpp b/lib/util/src/time.cpp similarity index 100% rename from facade-lib/util/src/time.cpp rename to lib/util/src/time.cpp diff --git a/facade-lib/vk/CMakeLists.txt b/lib/vk/CMakeLists.txt similarity index 100% rename from facade-lib/vk/CMakeLists.txt rename to lib/vk/CMakeLists.txt diff --git a/facade-lib/vk/include/facade/vk/buffer.hpp b/lib/vk/include/facade/vk/buffer.hpp similarity index 100% rename from facade-lib/vk/include/facade/vk/buffer.hpp rename to lib/vk/include/facade/vk/buffer.hpp diff --git a/facade-lib/vk/include/facade/vk/cmd.hpp b/lib/vk/include/facade/vk/cmd.hpp similarity index 100% rename from facade-lib/vk/include/facade/vk/cmd.hpp rename to lib/vk/include/facade/vk/cmd.hpp diff --git a/facade-lib/vk/include/facade/vk/defer.hpp b/lib/vk/include/facade/vk/defer.hpp similarity index 100% rename from facade-lib/vk/include/facade/vk/defer.hpp rename to lib/vk/include/facade/vk/defer.hpp diff --git a/facade-lib/vk/include/facade/vk/descriptor_set.hpp b/lib/vk/include/facade/vk/descriptor_set.hpp similarity index 100% rename from facade-lib/vk/include/facade/vk/descriptor_set.hpp rename to lib/vk/include/facade/vk/descriptor_set.hpp diff --git a/facade-lib/vk/include/facade/vk/drawer.hpp b/lib/vk/include/facade/vk/drawer.hpp similarity index 100% rename from facade-lib/vk/include/facade/vk/drawer.hpp rename to lib/vk/include/facade/vk/drawer.hpp diff --git a/facade-lib/vk/include/facade/vk/geometry.hpp b/lib/vk/include/facade/vk/geometry.hpp similarity index 100% rename from facade-lib/vk/include/facade/vk/geometry.hpp rename to lib/vk/include/facade/vk/geometry.hpp diff --git a/facade-lib/vk/include/facade/vk/gfx.hpp b/lib/vk/include/facade/vk/gfx.hpp similarity index 100% rename from facade-lib/vk/include/facade/vk/gfx.hpp rename to lib/vk/include/facade/vk/gfx.hpp diff --git a/facade-lib/vk/include/facade/vk/pipeline.hpp b/lib/vk/include/facade/vk/pipeline.hpp similarity index 100% rename from facade-lib/vk/include/facade/vk/pipeline.hpp rename to lib/vk/include/facade/vk/pipeline.hpp diff --git a/facade-lib/vk/include/facade/vk/pipes.hpp b/lib/vk/include/facade/vk/pipes.hpp similarity index 100% rename from facade-lib/vk/include/facade/vk/pipes.hpp rename to lib/vk/include/facade/vk/pipes.hpp diff --git a/facade-lib/vk/include/facade/vk/render_frame.hpp b/lib/vk/include/facade/vk/render_frame.hpp similarity index 100% rename from facade-lib/vk/include/facade/vk/render_frame.hpp rename to lib/vk/include/facade/vk/render_frame.hpp diff --git a/facade-lib/vk/include/facade/vk/render_pass.hpp b/lib/vk/include/facade/vk/render_pass.hpp similarity index 100% rename from facade-lib/vk/include/facade/vk/render_pass.hpp rename to lib/vk/include/facade/vk/render_pass.hpp diff --git a/facade-lib/vk/include/facade/vk/render_target.hpp b/lib/vk/include/facade/vk/render_target.hpp similarity index 100% rename from facade-lib/vk/include/facade/vk/render_target.hpp rename to lib/vk/include/facade/vk/render_target.hpp diff --git a/facade-lib/vk/include/facade/vk/set_allocator.hpp b/lib/vk/include/facade/vk/set_allocator.hpp similarity index 100% rename from facade-lib/vk/include/facade/vk/set_allocator.hpp rename to lib/vk/include/facade/vk/set_allocator.hpp diff --git a/facade-lib/vk/include/facade/vk/shader.hpp b/lib/vk/include/facade/vk/shader.hpp similarity index 100% rename from facade-lib/vk/include/facade/vk/shader.hpp rename to lib/vk/include/facade/vk/shader.hpp diff --git a/facade-lib/vk/include/facade/vk/spir_v.hpp b/lib/vk/include/facade/vk/spir_v.hpp similarity index 100% rename from facade-lib/vk/include/facade/vk/spir_v.hpp rename to lib/vk/include/facade/vk/spir_v.hpp diff --git a/facade-lib/vk/include/facade/vk/static_mesh.hpp b/lib/vk/include/facade/vk/static_mesh.hpp similarity index 100% rename from facade-lib/vk/include/facade/vk/static_mesh.hpp rename to lib/vk/include/facade/vk/static_mesh.hpp diff --git a/facade-lib/vk/include/facade/vk/swapchain.hpp b/lib/vk/include/facade/vk/swapchain.hpp similarity index 100% rename from facade-lib/vk/include/facade/vk/swapchain.hpp rename to lib/vk/include/facade/vk/swapchain.hpp diff --git a/facade-lib/vk/include/facade/vk/texture.hpp b/lib/vk/include/facade/vk/texture.hpp similarity index 100% rename from facade-lib/vk/include/facade/vk/texture.hpp rename to lib/vk/include/facade/vk/texture.hpp diff --git a/facade-lib/vk/include/facade/vk/vk.hpp b/lib/vk/include/facade/vk/vk.hpp similarity index 100% rename from facade-lib/vk/include/facade/vk/vk.hpp rename to lib/vk/include/facade/vk/vk.hpp diff --git a/facade-lib/vk/include/facade/vk/vma.hpp b/lib/vk/include/facade/vk/vma.hpp similarity index 100% rename from facade-lib/vk/include/facade/vk/vma.hpp rename to lib/vk/include/facade/vk/vma.hpp diff --git a/facade-lib/vk/include/facade/vk/wsi.hpp b/lib/vk/include/facade/vk/wsi.hpp similarity index 100% rename from facade-lib/vk/include/facade/vk/wsi.hpp rename to lib/vk/include/facade/vk/wsi.hpp diff --git a/facade-lib/vk/src/buffer.cpp b/lib/vk/src/buffer.cpp similarity index 100% rename from facade-lib/vk/src/buffer.cpp rename to lib/vk/src/buffer.cpp diff --git a/facade-lib/vk/src/cmd.cpp b/lib/vk/src/cmd.cpp similarity index 100% rename from facade-lib/vk/src/cmd.cpp rename to lib/vk/src/cmd.cpp diff --git a/facade-lib/vk/src/descriptor_set.cpp b/lib/vk/src/descriptor_set.cpp similarity index 100% rename from facade-lib/vk/src/descriptor_set.cpp rename to lib/vk/src/descriptor_set.cpp diff --git a/facade-lib/vk/src/drawer.cpp b/lib/vk/src/drawer.cpp similarity index 100% rename from facade-lib/vk/src/drawer.cpp rename to lib/vk/src/drawer.cpp diff --git a/facade-lib/vk/src/geometry.cpp b/lib/vk/src/geometry.cpp similarity index 100% rename from facade-lib/vk/src/geometry.cpp rename to lib/vk/src/geometry.cpp diff --git a/facade-lib/vk/src/gfx.cpp b/lib/vk/src/gfx.cpp similarity index 100% rename from facade-lib/vk/src/gfx.cpp rename to lib/vk/src/gfx.cpp diff --git a/facade-lib/vk/src/pipeline.cpp b/lib/vk/src/pipeline.cpp similarity index 100% rename from facade-lib/vk/src/pipeline.cpp rename to lib/vk/src/pipeline.cpp diff --git a/facade-lib/vk/src/pipes.cpp b/lib/vk/src/pipes.cpp similarity index 100% rename from facade-lib/vk/src/pipes.cpp rename to lib/vk/src/pipes.cpp diff --git a/facade-lib/vk/src/render_frame.cpp b/lib/vk/src/render_frame.cpp similarity index 100% rename from facade-lib/vk/src/render_frame.cpp rename to lib/vk/src/render_frame.cpp diff --git a/facade-lib/vk/src/render_pass.cpp b/lib/vk/src/render_pass.cpp similarity index 100% rename from facade-lib/vk/src/render_pass.cpp rename to lib/vk/src/render_pass.cpp diff --git a/facade-lib/vk/src/set_allocator.cpp b/lib/vk/src/set_allocator.cpp similarity index 100% rename from facade-lib/vk/src/set_allocator.cpp rename to lib/vk/src/set_allocator.cpp diff --git a/facade-lib/vk/src/shader.cpp b/lib/vk/src/shader.cpp similarity index 100% rename from facade-lib/vk/src/shader.cpp rename to lib/vk/src/shader.cpp diff --git a/facade-lib/vk/src/spir_v.cpp b/lib/vk/src/spir_v.cpp similarity index 100% rename from facade-lib/vk/src/spir_v.cpp rename to lib/vk/src/spir_v.cpp diff --git a/facade-lib/vk/src/static_mesh.cpp b/lib/vk/src/static_mesh.cpp similarity index 100% rename from facade-lib/vk/src/static_mesh.cpp rename to lib/vk/src/static_mesh.cpp diff --git a/facade-lib/vk/src/swapchain.cpp b/lib/vk/src/swapchain.cpp similarity index 100% rename from facade-lib/vk/src/swapchain.cpp rename to lib/vk/src/swapchain.cpp diff --git a/facade-lib/vk/src/texture.cpp b/lib/vk/src/texture.cpp similarity index 100% rename from facade-lib/vk/src/texture.cpp rename to lib/vk/src/texture.cpp diff --git a/facade-lib/vk/src/vk.cpp b/lib/vk/src/vk.cpp similarity index 100% rename from facade-lib/vk/src/vk.cpp rename to lib/vk/src/vk.cpp diff --git a/facade-lib/vk/src/vma.cpp b/lib/vk/src/vma.cpp similarity index 100% rename from facade-lib/vk/src/vma.cpp rename to lib/vk/src/vma.cpp diff --git a/src/main.cpp b/src/main.cpp index 4d71dd1..246be44 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,12 +12,12 @@ #include #include -#include - #include #include #include +#include + #include #include From 1c30cef9c797e555aa317d5008d726717f50f2a5 Mon Sep 17 00:00:00 2001 From: Karn Kaul Date: Mon, 24 Oct 2022 14:59:42 -0700 Subject: [PATCH 08/10] Optimize PCH: maximize reuse --- CMakeLists.txt | 8 +++++++- lib/context/CMakeLists.txt | 7 ++++++- lib/editor/CMakeLists.txt | 7 ++++++- lib/engine/CMakeLists.txt | 7 ++++++- lib/glfw/CMakeLists.txt | 7 ++++++- lib/interface/CMakeLists.txt | 27 --------------------------- lib/render/CMakeLists.txt | 7 ++++++- lib/scene/CMakeLists.txt | 7 ++++++- lib/util/CMakeLists.txt | 18 +++++++++++++++++- lib/vk/CMakeLists.txt | 19 ++++++++++++++++++- 10 files changed, 78 insertions(+), 36 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6e39f8c..16dc3be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,7 @@ set(target_prefix facade) project(facade) option(FACADE_BUILD_SHADERS "Build facade shaders" ON) +option(FACADE_PCH "Use PCH" ON) if(FACADE_BUILD_SHADERS) find_program(glslc glslc) @@ -57,7 +58,12 @@ target_link_libraries(${PROJECT_NAME} PRIVATE facade::context facade::editor facade::compile-options - facade::pch ) +string(TOUPPER ${target_prefix} target_prefix_upper) + +if(${${target_prefix_upper}_PCH}) + target_precompile_headers(${PROJECT_NAME} REUSE_FROM ${target_prefix}-vk) +endif() + target_include_directories(${PROJECT_NAME} PRIVATE src) diff --git a/lib/context/CMakeLists.txt b/lib/context/CMakeLists.txt index 614373e..a3f2e5a 100644 --- a/lib/context/CMakeLists.txt +++ b/lib/context/CMakeLists.txt @@ -24,9 +24,14 @@ target_link_libraries(${PROJECT_NAME} PRIVATE ${target_prefix}::compile-options - ${target_prefix}::pch ) +string(TOUPPER ${target_prefix} target_prefix_upper) + +if(${${target_prefix_upper}_PCH}) + target_precompile_headers(${PROJECT_NAME} REUSE_FROM ${target_prefix}-vk) +endif() + target_sources(${PROJECT_NAME} PRIVATE include/${target_prefix}/context/context.hpp diff --git a/lib/editor/CMakeLists.txt b/lib/editor/CMakeLists.txt index 9ea67aa..60d4e18 100644 --- a/lib/editor/CMakeLists.txt +++ b/lib/editor/CMakeLists.txt @@ -24,9 +24,14 @@ target_link_libraries(${PROJECT_NAME} PRIVATE ${target_prefix}::compile-options - ${target_prefix}::pch ) +string(TOUPPER ${target_prefix} target_prefix_upper) + +if(${${target_prefix_upper}_PCH}) + target_precompile_headers(${PROJECT_NAME} REUSE_FROM ${target_prefix}-vk) +endif() + target_sources(${PROJECT_NAME} PRIVATE include/${target_prefix}/editor/common.hpp include/${target_prefix}/editor/inspector.hpp diff --git a/lib/engine/CMakeLists.txt b/lib/engine/CMakeLists.txt index 78f7247..2d96b03 100644 --- a/lib/engine/CMakeLists.txt +++ b/lib/engine/CMakeLists.txt @@ -23,9 +23,14 @@ target_link_libraries(${PROJECT_NAME} PRIVATE ${target_prefix}::compile-options - ${target_prefix}::pch ) +string(TOUPPER ${target_prefix} target_prefix_upper) + +if(${${target_prefix_upper}_PCH}) + target_precompile_headers(${PROJECT_NAME} REUSE_FROM ${target_prefix}-vk) +endif() + target_sources(${PROJECT_NAME} PRIVATE include/${target_prefix}/engine/engine.hpp diff --git a/lib/glfw/CMakeLists.txt b/lib/glfw/CMakeLists.txt index 18ec6a7..18c6d6e 100644 --- a/lib/glfw/CMakeLists.txt +++ b/lib/glfw/CMakeLists.txt @@ -26,9 +26,14 @@ target_link_libraries(${PROJECT_NAME} PRIVATE ${target_prefix}::compile-options - ${target_prefix}::pch ) +string(TOUPPER ${target_prefix} target_prefix_upper) + +if(${${target_prefix_upper}_PCH}) + target_precompile_headers(${PROJECT_NAME} REUSE_FROM ${target_prefix}-vk) +endif() + target_sources(${PROJECT_NAME} PRIVATE include/${target_prefix}/glfw/glfw.hpp include/${target_prefix}/glfw/input.hpp diff --git a/lib/interface/CMakeLists.txt b/lib/interface/CMakeLists.txt index a15b888..6c92c03 100644 --- a/lib/interface/CMakeLists.txt +++ b/lib/interface/CMakeLists.txt @@ -6,8 +6,6 @@ string(TOUPPER ${target_prefix} define_prefix) project(${target_prefix}-interface) -option(${target_prefix}_PCH "Use PCH" ON) - set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) try_compile(has_make_unique_for_overwrite "${CMAKE_CURRENT_BINARY_DIR}" SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/make_unique_for_overwrite.cpp") @@ -42,28 +40,3 @@ endif() if(CMAKE_GENERATOR MATCHES "^(Visual Studio)") target_compile_options(${target_prefix}-compile-options INTERFACE /MP) endif() - -add_library(${target_prefix}-pch INTERFACE) -add_library(${target_prefix}::pch ALIAS ${target_prefix}-pch) - -if(${${target_prefix}_PCH}) - # Single PCH is shared across all targets, so it links to all dependencies - target_link_libraries(${target_prefix}-pch INTERFACE - ${target_prefix}::vma - fmt::fmt - ) - - target_precompile_headers(${target_prefix}-pch INTERFACE - - - - - - - - - - - - ) -endif() diff --git a/lib/render/CMakeLists.txt b/lib/render/CMakeLists.txt index c2d5eac..ea3c432 100644 --- a/lib/render/CMakeLists.txt +++ b/lib/render/CMakeLists.txt @@ -24,9 +24,14 @@ target_link_libraries(${PROJECT_NAME} PRIVATE ${target_prefix}::compile-options - ${target_prefix}::pch ) +string(TOUPPER ${target_prefix} target_prefix_upper) + +if(${${target_prefix_upper}_PCH}) + target_precompile_headers(${PROJECT_NAME} REUSE_FROM ${target_prefix}-vk) +endif() + target_sources(${PROJECT_NAME} PRIVATE include/${target_prefix}/render/renderer.hpp diff --git a/lib/scene/CMakeLists.txt b/lib/scene/CMakeLists.txt index 9a45397..d804b0e 100644 --- a/lib/scene/CMakeLists.txt +++ b/lib/scene/CMakeLists.txt @@ -24,9 +24,14 @@ target_link_libraries(${PROJECT_NAME} PRIVATE ${target_prefix}::compile-options - ${target_prefix}::pch ) +string(TOUPPER ${target_prefix} target_prefix_upper) + +if(${${target_prefix_upper}_PCH}) + target_precompile_headers(${PROJECT_NAME} REUSE_FROM ${target_prefix}-vk) +endif() + target_sources(${PROJECT_NAME} PRIVATE include/${target_prefix}/scene/camera.hpp include/${target_prefix}/scene/fly_cam.hpp diff --git a/lib/util/CMakeLists.txt b/lib/util/CMakeLists.txt index f852a03..d2a16ce 100644 --- a/lib/util/CMakeLists.txt +++ b/lib/util/CMakeLists.txt @@ -28,10 +28,26 @@ target_link_libraries(${PROJECT_NAME} PRIVATE ${target_prefix}::stb-image ${target_prefix}::compile-options - ${target_prefix}::pch + Threads::Threads ) +string(TOUPPER ${target_prefix} target_prefix_upper) + +if(${${target_prefix_upper}_PCH}) + target_precompile_headers(${PROJECT_NAME} PRIVATE + + + + + + + + + + ) +endif() + if(CMAKE_SYSTEM_NAME STREQUAL Linux) target_link_libraries(${PROJECT_NAME} PRIVATE pthread) endif() diff --git a/lib/vk/CMakeLists.txt b/lib/vk/CMakeLists.txt index ff2b12c..b31cbd6 100644 --- a/lib/vk/CMakeLists.txt +++ b/lib/vk/CMakeLists.txt @@ -25,9 +25,26 @@ target_link_libraries(${PROJECT_NAME} PRIVATE spirv-cross-glsl ${target_prefix}::compile-options - ${target_prefix}::pch ) +string(TOUPPER ${target_prefix} target_prefix_upper) + +if(${${target_prefix_upper}_PCH}) + target_precompile_headers(${PROJECT_NAME} PRIVATE + + + + + + + + + + + + ) +endif() + target_sources(${PROJECT_NAME} PRIVATE include/${target_prefix}/vk/buffer.hpp include/${target_prefix}/vk/cmd.hpp From bb0d83900e69b685c993a4210832024907b4a292 Mon Sep 17 00:00:00 2001 From: Karn Kaul Date: Mon, 24 Oct 2022 19:28:22 -0700 Subject: [PATCH 09/10] Move misc/launch.json to wiki --- lib/editor/CMakeLists.txt | 1 - misc/launch.json | 40 --------------------------------------- 2 files changed, 41 deletions(-) delete mode 100644 misc/launch.json diff --git a/lib/editor/CMakeLists.txt b/lib/editor/CMakeLists.txt index 60d4e18..c1eef9f 100644 --- a/lib/editor/CMakeLists.txt +++ b/lib/editor/CMakeLists.txt @@ -20,7 +20,6 @@ target_include_directories(${PROJECT_NAME} target_link_libraries(${PROJECT_NAME} PUBLIC ${target_prefix}::scene - ${target_prefix}::dear_imgui PRIVATE ${target_prefix}::compile-options diff --git a/misc/launch.json b/misc/launch.json deleted file mode 100644 index 475eb94..0000000 --- a/misc/launch.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - // Modify this file and copy to .vscode/ (in the project root) to enable F5 debugging, - // setting custom working directories, using a custom Vulkan loader, etc - "version": "0.2.0", - "configurations": [ - { - "name": "(gdb) Launch", - "type": "cppdbg", - "request": "launch", - "program": "${command:cmake.launchTargetPath}", - "args": [], - "stopAtEntry": false, - "cwd": "${workspaceFolder}", - "environment": [ - { - "name": "LD_LIBRARY_PATH", - "value": "/path/to/vulkan-sdk/lib" - }, - { - "name": "VK_LAYER_PATH", - "value": "/path/to/vulkan-sdk/etc/vulkan/explicit_layer.d" - } - ], - "externalConsole": false, - "MIMode": "gdb", - "setupCommands": [ - { - "description": "Enable pretty-printing for gdb", - "text": "-enable-pretty-printing", - "ignoreFailures": true - }, - { - "description": "Set Disassembly Flavor to Intel", - "text": "-gdb-set disassembly-flavor intel", - "ignoreFailures": true - } - ] - } - ] -} From fb3d14a594a9385d513aff66d504d69406f50d75 Mon Sep 17 00:00:00 2001 From: Karn Kaul Date: Mon, 24 Oct 2022 19:45:17 -0700 Subject: [PATCH 10/10] Remove cmake/ (in lib/interface now) --- cmake/interface/CMakeLists.txt | 22 ---------------------- cmake/src/make_unique_for_overwrite.cpp | 5 ----- 2 files changed, 27 deletions(-) delete mode 100644 cmake/interface/CMakeLists.txt delete mode 100644 cmake/src/make_unique_for_overwrite.cpp diff --git a/cmake/interface/CMakeLists.txt b/cmake/interface/CMakeLists.txt deleted file mode 100644 index 23fecd8..0000000 --- a/cmake/interface/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -if("${target_prefix}" STREQUAL "") - message(FATAL_ERROR "target_prefix unset") -endif() - -project(${target_prefix}-compile-options) - -add_library(${PROJECT_NAME} INTERFACE) -add_library(${target_prefix}::compile-options ALIAS ${PROJECT_NAME}) - -if(CMAKE_CXX_COMPILER_ID STREQUAL Clang OR CMAKE_CXX_COMPILER_ID STREQUAL GNU) - target_compile_options(${PROJECT_NAME} INTERFACE - -Wall -Wextra -Wpedantic -Werror=return-type - ) - - if(CMAKE_CXX_COMPILER_ID STREQUAL GNU AND NOT CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64) - target_compile_options(${PROJECT_NAME} INTERFACE -Wconversion) - endif() -endif() - -if(CMAKE_GENERATOR MATCHES "^(Visual Studio)") - target_compile_options(${PROJECT_NAME} INTERFACE /MP) -endif() diff --git a/cmake/src/make_unique_for_overwrite.cpp b/cmake/src/make_unique_for_overwrite.cpp deleted file mode 100644 index 6941c45..0000000 --- a/cmake/src/make_unique_for_overwrite.cpp +++ /dev/null @@ -1,5 +0,0 @@ -#include - -namespace { -[[maybe_unused]] auto make(std::size_t n) { return std::make_unique_for_overwrite(n); } -} // namespace