better timings
parent
d45ae565a7
commit
43855a13d7
32
xormod.c
32
xormod.c
|
@ -5,8 +5,6 @@
|
|||
#include "platform.h"
|
||||
#include "types.h"
|
||||
|
||||
#include <SDL3/SDL_mouse.h>
|
||||
#include <SDL3/SDL_render.h>
|
||||
#include <stdio.h>
|
||||
#include <inttypes.h>
|
||||
#include <SDL3/SDL.h>
|
||||
|
@ -29,8 +27,6 @@ int main() {
|
|||
SDL_GetWindowSize(window, &w, &h);
|
||||
|
||||
SDL_Renderer *rend = SDL_CreateRenderer(window, NULL);
|
||||
|
||||
SDL_SetRenderVSync(rend, 1);
|
||||
|
||||
Field f;
|
||||
Field_init(&f, w, h);
|
||||
|
@ -40,6 +36,10 @@ int main() {
|
|||
|
||||
int running = 1;
|
||||
int fullscreen = 0;
|
||||
int vsync = 0;
|
||||
double avg_delta = 0;
|
||||
|
||||
SDL_SetRenderVSync(rend, vsync);
|
||||
|
||||
#ifdef NDEBUG
|
||||
int debug = 0;
|
||||
|
@ -51,19 +51,21 @@ int main() {
|
|||
Uint64 ticks = SDL_GetTicks();
|
||||
Uint64 delta = ticks - last;
|
||||
last = ticks;
|
||||
avg_delta = 0.75 * avg_delta + 0.25 * (double) delta;
|
||||
int speed = (int)(16 * avg_delta / 16.667); // 16 pixels per update @ 60 fps
|
||||
|
||||
const bool *keys = SDL_GetKeyboardState(NULL);
|
||||
if (keys[SDL_SCANCODE_LEFT] || keys[SDL_SCANCODE_A]) {
|
||||
f.offset.x -= delta;
|
||||
f.offset.x -= speed;
|
||||
}
|
||||
if (keys[SDL_SCANCODE_RIGHT] || keys[SDL_SCANCODE_D]) {
|
||||
f.offset.x += delta;
|
||||
f.offset.x += speed;
|
||||
}
|
||||
if (keys[SDL_SCANCODE_UP] || keys[SDL_SCANCODE_W]) {
|
||||
f.offset.y -= delta;
|
||||
f.offset.y -= speed;
|
||||
}
|
||||
if (keys[SDL_SCANCODE_DOWN] || keys[SDL_SCANCODE_S]) {
|
||||
f.offset.y += delta;
|
||||
f.offset.y += speed;
|
||||
}
|
||||
|
||||
SDL_Event event;
|
||||
|
@ -82,11 +84,8 @@ int main() {
|
|||
case SDLK_ESCAPE:
|
||||
case SDLK_Q: running = 0; break;
|
||||
case SDLK_G: debug ^= 1; break;
|
||||
case SDLK_F: {
|
||||
fullscreen ^= 1;
|
||||
SDL_SetWindowFullscreen(window, fullscreen);
|
||||
break;
|
||||
}
|
||||
case SDLK_F: SDL_SetWindowFullscreen(window, fullscreen ^= 1); break;
|
||||
case SDLK_V: SDL_SetRenderVSync(rend, vsync ^= 1); break;
|
||||
}
|
||||
SDL_HideCursor();
|
||||
break;
|
||||
|
@ -121,7 +120,8 @@ int main() {
|
|||
draw_text(rend, ACCEL_PLATFORM_STR, sizeof(ACCEL_PLATFORM_STR), RC(1,1), 255, 255, 255);
|
||||
|
||||
size_t len = snprintf(buf, sizeof(buf),
|
||||
"off.x: %d, off.y: %d, \xEBT: %02" PRIu64, f.offset.x, f.offset.y, delta);
|
||||
"off.x: %d, off.y: %d, vsync: %s, \xEBT: %.3f, %.1fFPS, speed: %02d",
|
||||
f.offset.x, f.offset.y, vsync ? "ON" : "OFF", avg_delta, 1000.0 / avg_delta, speed);
|
||||
draw_text(rend, buf, len, RC(2, 1), 255, 255, 255);
|
||||
|
||||
char *q[] = {"TL", "TR", "BL", "BR"};
|
||||
|
@ -134,6 +134,10 @@ int main() {
|
|||
}
|
||||
|
||||
SDL_RenderPresent(rend);
|
||||
|
||||
if (!vsync && avg_delta < 8.0) {
|
||||
SDL_Delay(8.0 - avg_delta);
|
||||
}
|
||||
}
|
||||
|
||||
SDL_DestroyRenderer(rend);
|
||||
|
|
Loading…
Reference in New Issue