Browse Source

* libee/ee.c:

+ Implemented correct framerate wait loop.
    + No framedropping yet.
  * test/demo.c src/main.c:
    + Set an arbitrary framerate for demos.


git-svn-id: file:///srv/caca.zoy.org/var/lib/svn/ttyvaders/trunk@178 92316355-f0b4-4df1-b90c-862c8a59935f
master
sam 21 years ago
parent
commit
eb7b841f6c
3 changed files with 32 additions and 38 deletions
  1. +28
    -38
      libee/ee.c
  2. +2
    -0
      src/main.c
  3. +2
    -0
      test/demo.c

+ 28
- 38
libee/ee.c View File

@@ -190,11 +190,6 @@ int ee_init(void)
return 0; return 0;
} }


void ee_set_delay(int usec)
{
_ee_delay = usec;
}

int ee_get_width(void) int ee_get_width(void)
{ {
#if defined(USE_SLANG) #if defined(USE_SLANG)
@@ -217,37 +212,35 @@ int ee_get_height(void)
#endif #endif
} }


#if !defined(USE_CONIO) void ee_set_delay(int usec)
static int64_t local_time(void)
{ {
struct timeval tv; _ee_delay = usec;
int64_t now;

gettimeofday(&tv, NULL);
now = tv.tv_sec;
now *= 1000000;
now += tv.tv_usec;
return now;
} }
#endif


void ee_refresh(void) static unsigned int _ee_getticks(void)
{ {
#if !defined(USE_CONIO) static unsigned int last_sec = 0, last_usec = 0;
static int64_t local_clock = 0;
int64_t now;


if(!local_clock) struct timeval tv;
{ unsigned int ticks = 0;
/* Initialize local_clock */ gettimeofday(&tv, NULL);
local_clock = local_time();
}


if(local_time() > local_clock + 10000) if(last_sec != 0)
{ {
/* If we are late, we shouldn't display anything */ ticks = (tv.tv_sec - last_sec) * 1000000 + (tv.tv_usec - last_usec);
} }
#endif last_sec = tv.tv_sec;
last_usec = tv.tv_usec;

return ticks;
}

void ee_refresh(void)
{
static int lastticks = 0;
unsigned int ticks = lastticks + _ee_getticks();


#if defined(USE_SLANG) #if defined(USE_SLANG)
SLsmg_refresh(); SLsmg_refresh();
@@ -261,18 +254,15 @@ void ee_refresh(void)
# endif # endif
#endif #endif


#if !defined(USE_CONIO) /* Wait until _ee_delay + time of last call */
now = local_time(); for(ticks += _ee_getticks(); ticks < _ee_delay; ticks += _ee_getticks())
usleep(10000);


if(now < local_clock + _ee_delay - 10000) lastticks = ticks - _ee_delay;
{
usleep(local_clock + _ee_delay - 10000 - now);
}


local_clock += _ee_delay; /* If we drifted too much, it's bad, bad, bad. */
#else if(lastticks > _ee_delay)
delay(5); lastticks = 0;
#endif
} }


void ee_end(void) void ee_end(void)


+ 2
- 0
src/main.c View File

@@ -46,6 +46,8 @@ int main (int argc, char **argv)
return 1; return 1;
} }


ee_set_delay(100000);

/* Initialize our program */ /* Initialize our program */
g->w = ee_get_width(); g->w = ee_get_width();
g->h = ee_get_height(); g->h = ee_get_height();


+ 2
- 0
test/demo.c View File

@@ -55,6 +55,8 @@ int main(int argc, char **argv)
return 1; return 1;
} }


ee_set_delay(40000);

/* Initialize data */ /* Initialize data */
sprite = ee_load_sprite("data/barboss.txt"); sprite = ee_load_sprite("data/barboss.txt");




||||||
x
 
000:0
Loading…
Cancel
Save