add framerate control
This commit is contained in:
parent
a2f011fc96
commit
c0ba5be458
@ -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)
|
function create_setting(id, name, step, postfix, tooltip, changeonrelease)
|
||||||
local info = core.get_setting_info(id)
|
local info = core.get_setting_info(id)
|
||||||
postfix = postfix or ""
|
postfix = postfix or ""
|
||||||
@ -18,11 +29,18 @@ function create_setting(id, name, step, postfix, tooltip, changeonrelease)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function update_setting(x, id, name, postfix)
|
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
|
-- updating label
|
||||||
document[id..".L"].text = string.format(
|
document[id..".L"].text = string.format(
|
||||||
"%s: %s%s",
|
"%s: %s%s",
|
||||||
gui.str(name, "settings"),
|
gui.str(name, "settings"),
|
||||||
core.str_setting(id),
|
str,
|
||||||
postfix
|
postfix
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
@ -37,8 +55,8 @@ end
|
|||||||
|
|
||||||
function on_open()
|
function on_open()
|
||||||
create_setting("camera.fov", "FOV", 1, "°")
|
create_setting("camera.fov", "FOV", 1, "°")
|
||||||
|
create_setting("display.framerate", "Framerate", 1, "", "", true)
|
||||||
create_checkbox("display.fullscreen", "Fullscreen")
|
create_checkbox("display.fullscreen", "Fullscreen")
|
||||||
create_checkbox("display.vsync", "V-Sync")
|
|
||||||
create_checkbox("camera.shaking", "Camera Shaking")
|
create_checkbox("camera.shaking", "Camera Shaking")
|
||||||
create_checkbox("camera.inertia", "Camera Inertia")
|
create_checkbox("camera.inertia", "Camera Inertia")
|
||||||
end
|
end
|
||||||
|
|||||||
@ -49,7 +49,6 @@ SettingsHandler::SettingsHandler(EngineSettings& settings) {
|
|||||||
builder.add("height", &settings.display.height);
|
builder.add("height", &settings.display.height);
|
||||||
builder.add("samples", &settings.display.samples);
|
builder.add("samples", &settings.display.samples);
|
||||||
builder.add("framerate", &settings.display.framerate);
|
builder.add("framerate", &settings.display.framerate);
|
||||||
builder.add("vsync", &settings.display.vsync);
|
|
||||||
builder.add("fullscreen", &settings.display.fullscreen);
|
builder.add("fullscreen", &settings.display.fullscreen);
|
||||||
|
|
||||||
builder.section("camera");
|
builder.section("camera");
|
||||||
|
|||||||
@ -30,8 +30,6 @@ struct DisplaySettings {
|
|||||||
IntegerSetting samples {0};
|
IntegerSetting samples {0};
|
||||||
/// @brief Framerate limit
|
/// @brief Framerate limit
|
||||||
IntegerSetting framerate {-1, -1, 120};
|
IntegerSetting framerate {-1, -1, 120};
|
||||||
/// @brief VSync on
|
|
||||||
FlagSetting vsync {true};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ChunksSettings {
|
struct ChunksSettings {
|
||||||
|
|||||||
@ -325,7 +325,6 @@ bool Window::isFullscreen() {
|
|||||||
void Window::swapBuffers() {
|
void Window::swapBuffers() {
|
||||||
double currentTime = time();
|
double currentTime = time();
|
||||||
if (framerate > 0 && currentTime - prevSwap < (1.0 / framerate)) {
|
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(
|
std::this_thread::sleep_for(std::chrono::milliseconds(
|
||||||
static_cast<int>((1.0/framerate - (currentTime-prevSwap))*1000)));
|
static_cast<int>((1.0/framerate - (currentTime-prevSwap))*1000)));
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user