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/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

View File

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

View File

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

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
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 {

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");
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<CameraControllerSystem>();
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);
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");