frameskip

This commit is contained in:
KikooDX 2021-12-17 11:14:56 +01:00
parent 1b3f7df1ec
commit ff0736f602
2 changed files with 30 additions and 2 deletions

View File

@ -1,5 +1,6 @@
#pragma once
#define TARGET_FPS 60
#define TILE_SIZE 16
#define PLAYER_WIDTH 12
#define PLAYER_HEIGHT 12

View File

@ -1,27 +1,41 @@
#include "conf.h"
#include "input.h"
#include "level.h"
#include "player.h"
#include <gint/cpu.h>
#include <gint/display.h>
#include <gint/timer.h>
static struct Player player;
static int timer;
static volatile int has_ticked;
static void init(void);
static void deinit(void);
static void draw(void);
static void update(void);
static int timer_callback(volatile int *);
int
main(void)
{
extern const struct LevelBin kble_test;
int frameskip = 1;
init();
level_load(&kble_test);
draw();
do {
update();
int i;
draw();
for (i = 0; i < frameskip; i++) {
if (has_ticked > frameskip) frameskip = has_ticked;
while (!has_ticked)
sleep();
while (has_ticked)
has_ticked = 0;
update();
}
} while (input_up(K_EXIT));
deinit();
@ -31,6 +45,10 @@ main(void)
static void
init(void)
{
timer = timer_configure(TIMER_ANY, 1000000 / TARGET_FPS,
GINT_CALL(timer_callback, &has_ticked));
timer_start(timer);
input_init();
level_init();
player_init(&player);
@ -40,6 +58,8 @@ static void
deinit(void)
{
level_deinit();
timer_stop(timer);
}
static void
@ -57,3 +77,10 @@ draw(void)
player_draw(&player);
dupdate();
}
static int
timer_callback(volatile int *arg)
{
*arg += 1;
return 0;
}