Limit to vsync by default

This commit is contained in:
Bailey Harrison 2023-02-24 16:35:27 +00:00
parent c56e9fcdee
commit 68d54667ec
7 changed files with 63 additions and 7 deletions

View File

@ -16,6 +16,7 @@ set(SRC_FILES
src/systems/transform.cpp src/systems/transform.cpp
src/systems/render.cpp src/systems/render.cpp
src/systems/ui.cpp
src/systems/collisions.cpp src/systems/collisions.cpp
src/resources/shader.cpp src/resources/shader.cpp
@ -46,6 +47,7 @@ set(INCLUDE_FILES
include/systems/transform.hpp include/systems/transform.hpp
include/systems/render.hpp include/systems/render.hpp
include/systems/ui.hpp
include/systems/collisions.hpp include/systems/collisions.hpp
include/resources/shader.hpp include/resources/shader.hpp
@ -73,6 +75,7 @@ set(INCLUDE_FILES
include/components/transform.hpp include/components/transform.hpp
include/components/renderable.hpp include/components/renderable.hpp
include/components/collider.hpp include/components/collider.hpp
include/components/ui_element.hpp
) )
add_library(${PROJECT_NAME} STATIC add_library(${PROJECT_NAME} STATIC

View File

@ -0,0 +1,9 @@
#pragma once
namespace engine {
struct UIElementComponent {
int n;
};
}

View File

@ -20,11 +20,13 @@ namespace engine::gfx {
GraphicsSettings() GraphicsSettings()
{ {
// sane defaults // sane defaults
vsync = false; vsync = true;
waitForPresent = true; // not all GPUs/drivers support immediate present with V-sync enabled
msaaLevel = MSAALevel::MSAA_OFF; msaaLevel = MSAALevel::MSAA_OFF;
} }
bool vsync; bool vsync;
bool waitForPresent; // idle CPU after render until the frame has been presented (no affect with V-sync disabled)
MSAALevel msaaLevel; MSAALevel msaaLevel;
}; };

19
include/systems/ui.hpp Normal file
View File

@ -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:
};
}

View File

@ -598,9 +598,11 @@ namespace engine {
swapchain->presentMode = VK_PRESENT_MODE_FIFO_KHR; // This mode is always available swapchain->presentMode = VK_PRESENT_MODE_FIFO_KHR; // This mode is always available
if (settings.vsync == true) { if (settings.vsync == true) {
for (const auto& presMode : presentModes) { if (settings.waitForPresent == false) {
if (presMode == VK_PRESENT_MODE_MAILBOX_KHR) { for (const auto& presMode : presentModes) {
swapchain->presentMode = presMode; // this mode allows V-sync without fixing FPS to refresh rate if (presMode == VK_PRESENT_MODE_MAILBOX_KHR) {
swapchain->presentMode = presMode; // this mode allows V-sync without fixing FPS to refresh rate
}
} }
} }
} else { } else {

21
src/systems/ui.cpp Normal file
View File

@ -0,0 +1,21 @@
#include "systems/ui.hpp"
#include "components/ui_element.hpp"
#include <typeinfo>
namespace engine {
UISystem::UISystem(Scene* scene)
: System(scene, { typeid(UIElementComponent).hash_code() })
{
}
void UISystem::onUpdate(float ts)
{
(void)ts;
}
}

View File

@ -43,7 +43,7 @@ void playGame(bool enableFrameLimiter)
INFO("FPS limiter: {}", enableFrameLimiter ? "ON" : "OFF"); INFO("FPS limiter: {}", enableFrameLimiter ? "ON" : "OFF");
engine::gfx::GraphicsSettings graphicsSettings{}; engine::gfx::GraphicsSettings graphicsSettings{};
graphicsSettings.vsync = false; graphicsSettings.vsync = true;
graphicsSettings.msaaLevel = engine::gfx::MSAALevel::MSAA_OFF; graphicsSettings.msaaLevel = engine::gfx::MSAALevel::MSAA_OFF;
engine::Application app(PROJECT_NAME, PROJECT_VERSION, graphicsSettings); engine::Application app(PROJECT_NAME, PROJECT_VERSION, graphicsSettings);
@ -62,7 +62,7 @@ void playGame(bool enableFrameLimiter)
myScene->registerSystem<CameraControllerSystem>(); myScene->registerSystem<CameraControllerSystem>();
auto camera = myScene->createEntity("camera"); auto camera = myScene->createEntity("camera");
myScene->getComponent<engine::TransformComponent>(camera)->position.y = 8.0f; myScene->getComponent<engine::TransformComponent>(camera)->position = { 0.0f, 10.0f, 0.0f };
auto cameraCollider = myScene->addComponent<engine::ColliderComponent>(camera); auto cameraCollider = myScene->addComponent<engine::ColliderComponent>(camera);
cameraCollider->isStatic = false; cameraCollider->isStatic = false;
cameraCollider->isTrigger = true; cameraCollider->isTrigger = true;
@ -146,7 +146,7 @@ void playGame(bool enableFrameLimiter)
} }
// cubes! // cubes!
{ if (false) { // disabled
constexpr int SIZE = 10; constexpr int SIZE = 10;
const uint32_t cubeParent = myScene->createEntity("cubeParent"); const uint32_t cubeParent = myScene->createEntity("cubeParent");