diff --git a/CMakeLists.txt b/CMakeLists.txt index e60dc9c..ad67792 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,6 +16,7 @@ set(SRC_FILES src/systems/transform.cpp src/systems/render.cpp + src/systems/ui.cpp src/systems/collisions.cpp src/resources/shader.cpp @@ -46,6 +47,7 @@ set(INCLUDE_FILES include/systems/transform.hpp include/systems/render.hpp + include/systems/ui.hpp include/systems/collisions.hpp include/resources/shader.hpp @@ -73,6 +75,7 @@ set(INCLUDE_FILES include/components/transform.hpp include/components/renderable.hpp include/components/collider.hpp + include/components/ui_element.hpp ) add_library(${PROJECT_NAME} STATIC diff --git a/include/components/ui_element.hpp b/include/components/ui_element.hpp new file mode 100644 index 0000000..14b8343 --- /dev/null +++ b/include/components/ui_element.hpp @@ -0,0 +1,9 @@ +#pragma once + +namespace engine { + + struct UIElementComponent { + int n; + }; + +} diff --git a/include/gfx.hpp b/include/gfx.hpp index 9511529..c4d8e8c 100644 --- a/include/gfx.hpp +++ b/include/gfx.hpp @@ -20,11 +20,13 @@ namespace engine::gfx { GraphicsSettings() { // sane defaults - vsync = false; + vsync = true; + waitForPresent = true; // not all GPUs/drivers support immediate present with V-sync enabled msaaLevel = MSAALevel::MSAA_OFF; } bool vsync; + bool waitForPresent; // idle CPU after render until the frame has been presented (no affect with V-sync disabled) MSAALevel msaaLevel; }; diff --git a/include/systems/ui.hpp b/include/systems/ui.hpp new file mode 100644 index 0000000..cf7d3fe --- /dev/null +++ b/include/systems/ui.hpp @@ -0,0 +1,19 @@ +#pragma once + +#include "ecs_system.hpp" + +namespace engine { + + class UISystem : public System { + + public: + UISystem(Scene* scene); + + void onUpdate(float ts) override; + + private: + + }; + +} + diff --git a/src/gfx_device_vulkan.cpp b/src/gfx_device_vulkan.cpp index b0934cf..0dc7713 100644 --- a/src/gfx_device_vulkan.cpp +++ b/src/gfx_device_vulkan.cpp @@ -598,9 +598,11 @@ namespace engine { swapchain->presentMode = VK_PRESENT_MODE_FIFO_KHR; // This mode is always available if (settings.vsync == true) { - for (const auto& presMode : presentModes) { - if (presMode == VK_PRESENT_MODE_MAILBOX_KHR) { - swapchain->presentMode = presMode; // this mode allows V-sync without fixing FPS to refresh rate + if (settings.waitForPresent == false) { + for (const auto& presMode : presentModes) { + if (presMode == VK_PRESENT_MODE_MAILBOX_KHR) { + swapchain->presentMode = presMode; // this mode allows V-sync without fixing FPS to refresh rate + } } } } else { diff --git a/src/systems/ui.cpp b/src/systems/ui.cpp new file mode 100644 index 0000000..92df0cb --- /dev/null +++ b/src/systems/ui.cpp @@ -0,0 +1,21 @@ +#include "systems/ui.hpp" + +#include "components/ui_element.hpp" + +#include + +namespace engine { + + UISystem::UISystem(Scene* scene) + : System(scene, { typeid(UIElementComponent).hash_code() }) + { + + } + + void UISystem::onUpdate(float ts) + { + (void)ts; + + } + +} diff --git a/test/src/game.cpp b/test/src/game.cpp index ed54309..2985efd 100644 --- a/test/src/game.cpp +++ b/test/src/game.cpp @@ -43,7 +43,7 @@ void playGame(bool enableFrameLimiter) INFO("FPS limiter: {}", enableFrameLimiter ? "ON" : "OFF"); engine::gfx::GraphicsSettings graphicsSettings{}; - graphicsSettings.vsync = false; + graphicsSettings.vsync = true; graphicsSettings.msaaLevel = engine::gfx::MSAALevel::MSAA_OFF; engine::Application app(PROJECT_NAME, PROJECT_VERSION, graphicsSettings); @@ -62,7 +62,7 @@ void playGame(bool enableFrameLimiter) myScene->registerSystem(); auto camera = myScene->createEntity("camera"); - myScene->getComponent(camera)->position.y = 8.0f; + myScene->getComponent(camera)->position = { 0.0f, 10.0f, 0.0f }; auto cameraCollider = myScene->addComponent(camera); cameraCollider->isStatic = false; cameraCollider->isTrigger = true; @@ -146,7 +146,7 @@ void playGame(bool enableFrameLimiter) } // cubes! - { + if (false) { // disabled constexpr int SIZE = 10; const uint32_t cubeParent = myScene->createEntity("cubeParent");