add framerate control

This commit is contained in:
MihailRis 2024-07-28 22:31:27 +03:00
parent a2f011fc96
commit c0ba5be458
4 changed files with 20 additions and 6 deletions

View File

@ -1,3 +1,14 @@
local tostring_overrides = {}
tostring_overrides["display.framerate"] = function(x)
if x == -1 then
return "V-Sync"
elseif x == 0 then
return "Unlimited"
else
return tostring(x)
end
end
function create_setting(id, name, step, postfix, tooltip, changeonrelease)
local info = core.get_setting_info(id)
postfix = postfix or ""
@ -18,11 +29,18 @@ function create_setting(id, name, step, postfix, tooltip, changeonrelease)
end
function update_setting(x, id, name, postfix)
local str
local func = tostring_overrides[id]
if func then
str = func(x)
else
str = core.str_setting(id)
end
-- updating label
document[id..".L"].text = string.format(
"%s: %s%s",
gui.str(name, "settings"),
core.str_setting(id),
str,
postfix
)
end
@ -37,8 +55,8 @@ end
function on_open()
create_setting("camera.fov", "FOV", 1, "°")
create_setting("display.framerate", "Framerate", 1, "", "", true)
create_checkbox("display.fullscreen", "Fullscreen")
create_checkbox("display.vsync", "V-Sync")
create_checkbox("camera.shaking", "Camera Shaking")
create_checkbox("camera.inertia", "Camera Inertia")
end

View File

@ -49,7 +49,6 @@ SettingsHandler::SettingsHandler(EngineSettings& settings) {
builder.add("height", &settings.display.height);
builder.add("samples", &settings.display.samples);
builder.add("framerate", &settings.display.framerate);
builder.add("vsync", &settings.display.vsync);
builder.add("fullscreen", &settings.display.fullscreen);
builder.section("camera");

View File

@ -30,8 +30,6 @@ struct DisplaySettings {
IntegerSetting samples {0};
/// @brief Framerate limit
IntegerSetting framerate {-1, -1, 120};
/// @brief VSync on
FlagSetting vsync {true};
};
struct ChunksSettings {

View File

@ -325,7 +325,6 @@ bool Window::isFullscreen() {
void Window::swapBuffers() {
double currentTime = time();
if (framerate > 0 && currentTime - prevSwap < (1.0 / framerate)) {
std::cout << static_cast<int>((1.0/framerate - (currentTime-prevSwap))*1000) << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(
static_cast<int>((1.0/framerate - (currentTime-prevSwap))*1000)));
}