mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-04 18:41:51 +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()
|
||||
);
|
||||
window->swapBuffers();
|
||||
// todo: process it on another thread
|
||||
input->pollEvents();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
#include "graphics/core/ImageData.hpp"
|
||||
#include "graphics/core/Texture.hpp"
|
||||
#include "settings.hpp"
|
||||
#include "util/platform.hpp"
|
||||
#include "window/Window.hpp"
|
||||
#include "window/detail/SDLInput.hpp"
|
||||
|
||||
|
|
@ -231,6 +232,17 @@ SDLWindow::~SDLWindow() {
|
|||
}
|
||||
|
||||
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
|
||||
logger.error() << "Cant swap buffer: " << SDL_GetError();
|
||||
}
|
||||
|
|
@ -425,10 +437,10 @@ double SDLWindow::time() {
|
|||
}
|
||||
|
||||
void SDLWindow::setFramerate(int framerate) {
|
||||
/*todo*/
|
||||
if (!SDL_GL_SetSwapInterval(framerate)) {
|
||||
if (!SDL_GL_SetSwapInterval(framerate == -1)) {
|
||||
logger.error() << "Failed to set framerate: " << SDL_GetError();
|
||||
}
|
||||
this->framerate = framerate;
|
||||
}
|
||||
|
||||
// todo: move somewhere
|
||||
|
|
|
|||
|
|
@ -47,6 +47,9 @@ private:
|
|||
bool toClose = false;
|
||||
bool fullscreen = false;
|
||||
|
||||
double framerate = -1;
|
||||
double prevSwap = 0.0;
|
||||
|
||||
SDL_Window *window = nullptr;
|
||||
SDL_Renderer *renderer = nullptr;
|
||||
SDL_Cursor *cursor = nullptr;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue