mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-13 15:01:49 +00:00
fix fps settings
This commit is contained in:
parent
686a20cc81
commit
14829f827c
3 changed files with 18 additions and 2 deletions
|
|
@ -308,6 +308,7 @@ void Engine::nextFrame() {
|
||||||
: settings.display.framerate.get()
|
: settings.display.framerate.get()
|
||||||
);
|
);
|
||||||
window->swapBuffers();
|
window->swapBuffers();
|
||||||
|
// todo: process it on another thread
|
||||||
input->pollEvents();
|
input->pollEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@
|
||||||
#include "graphics/core/ImageData.hpp"
|
#include "graphics/core/ImageData.hpp"
|
||||||
#include "graphics/core/Texture.hpp"
|
#include "graphics/core/Texture.hpp"
|
||||||
#include "settings.hpp"
|
#include "settings.hpp"
|
||||||
|
#include "util/platform.hpp"
|
||||||
#include "window/Window.hpp"
|
#include "window/Window.hpp"
|
||||||
#include "window/detail/SDLInput.hpp"
|
#include "window/detail/SDLInput.hpp"
|
||||||
|
|
||||||
|
|
@ -231,6 +232,17 @@ SDLWindow::~SDLWindow() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SDLWindow::swapBuffers() noexcept {
|
void SDLWindow::swapBuffers() noexcept {
|
||||||
|
if (framerate > 0) {
|
||||||
|
auto elapsedTime = time() - prevSwap;
|
||||||
|
auto frameTime = 1.0 / framerate;
|
||||||
|
if (elapsedTime < frameTime) {
|
||||||
|
platform::sleep(
|
||||||
|
static_cast<size_t>((frameTime - elapsedTime) * 1000)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
prevSwap = time();
|
||||||
|
}
|
||||||
|
|
||||||
if (!SDL_GL_SwapWindow(window)) [[unlikely]] { // C++20 needed
|
if (!SDL_GL_SwapWindow(window)) [[unlikely]] { // C++20 needed
|
||||||
logger.error() << "Cant swap buffer: " << SDL_GetError();
|
logger.error() << "Cant swap buffer: " << SDL_GetError();
|
||||||
}
|
}
|
||||||
|
|
@ -425,10 +437,10 @@ double SDLWindow::time() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SDLWindow::setFramerate(int framerate) {
|
void SDLWindow::setFramerate(int framerate) {
|
||||||
/*todo*/
|
if (!SDL_GL_SetSwapInterval(framerate == -1)) {
|
||||||
if (!SDL_GL_SetSwapInterval(framerate)) {
|
|
||||||
logger.error() << "Failed to set framerate: " << SDL_GetError();
|
logger.error() << "Failed to set framerate: " << SDL_GetError();
|
||||||
}
|
}
|
||||||
|
this->framerate = framerate;
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo: move somewhere
|
// todo: move somewhere
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,9 @@ private:
|
||||||
bool toClose = false;
|
bool toClose = false;
|
||||||
bool fullscreen = false;
|
bool fullscreen = false;
|
||||||
|
|
||||||
|
double framerate = -1;
|
||||||
|
double prevSwap = 0.0;
|
||||||
|
|
||||||
SDL_Window *window = nullptr;
|
SDL_Window *window = nullptr;
|
||||||
SDL_Renderer *renderer = nullptr;
|
SDL_Renderer *renderer = nullptr;
|
||||||
SDL_Cursor *cursor = nullptr;
|
SDL_Cursor *cursor = nullptr;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue