fps counter with rle sprites
authorJohn Tsiombikas <nuclear@member.fsf.org>
Sun, 8 Mar 2020 23:54:00 +0000 (01:54 +0200)
committerJohn Tsiombikas <nuclear@member.fsf.org>
Sun, 8 Mar 2020 23:54:00 +0000 (01:54 +0200)
Makefile
src/dos/gfx.c
src/game.c
src/game.h
src/introscr.c
src/sdl/main.c

index fa039e8..9ff0e58 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -5,8 +5,7 @@ dosobj = src/dos/main.obj src/dos/gfx.obj src/dos/timer.obj src/dos/watdpmi.obj
 scrobj = src/introscr.obj src/menuscr.obj
 gameobj = src/game.obj src/util.obj src/gfxutil.obj src/dynarr.obj src/rbtree.obj
 gfxobj = src/3dgfx/3dgfx.obj src/3dgfx/mesh.obj src/3dgfx/meshload.obj &
-               src/3dgfx/polyfill.obj src/3dgfx/polyclip.obj
-csprobj = cspr/dbgfont.obj
+               src/3dgfx/polyfill.obj src/3dgfx/polyclip.obj src/sprite.obj
 incpath = -Isrc -Isrc/dos -Ilibs/imago/src
 libpath = libpath libs/imago
 !else
@@ -17,13 +16,12 @@ scrobj = src\introscr.obj src\menuscr.obj
 gameobj = src\game.obj src\util.obj src\gfxutil.obj src\dynarr.obj &
        src\rbtree.obj
 gfxobj = src\3dgfx\3dgfx.obj src\3dgfx\mesh.obj src\3dgfx\meshload.obj &
-       src\3dgfx\polyfill.obj src\3dgfx\polyclip.obj
-csprobj = cspr/dbgfont.obj
+       src\3dgfx\polyfill.obj src\3dgfx\polyclip.obj src\sprite.obj
 incpath = -Isrc -Isrc\dos -Ilibs\imago\src
 libpath = libpath libs\imago
 !endif
 
-obj = $(dosobj) $(gameobj) $(gfxobj) $(scrobj) $(csprobj)
+obj = $(dosobj) $(gameobj) $(gfxobj) $(scrobj)
 bin = game.exe
 
 def = -dM_PI=3.141592653589793
@@ -40,7 +38,7 @@ $(bin): cflags.occ $(obj) libs/imago/imago.lib
        $(LD) debug all name $@ system dos4g file { @objects } @ldflags
 
 .c: src;src/dos;src/3dgfx
-.asm: src;src/dos;src/3dgfx;cspr
+.asm: src;src/dos;src/3dgfx
 
 cflags.occ: Makefile
        %write $@ $(CFLAGS)
@@ -60,7 +58,6 @@ clean: .symbolic
 clean: .symbolic
        del src\*.obj
        del src\dos\*.obj
-       del cspr\*.obj
        del *.lnk
        del cflags.occ
        del $(bin)
index cde439e..671cd8a 100644 (file)
@@ -236,6 +236,7 @@ void *page_flip(int vsync)
 
 static void blit_frame_lfb(void *pixels, int vsync)
 {
+       dbg_fps(pixels);
        if(vsync) wait_vsync();
        memcpy(vpgaddr[frontidx], pixels, pgsize);
 }
@@ -246,6 +247,8 @@ static void blit_frame_banked(void *pixels, int vsync)
        unsigned int pending;
        unsigned char *pptr = pixels;
 
+       dbg_fps(pixels);
+
        if(vsync) wait_vsync();
 
        /* assume initial window offset at 0 */
index 4c220b5..86170cb 100644 (file)
@@ -1,3 +1,5 @@
+#include <stdio.h>
+#include <stdarg.h>
 #include "game.h"
 #include "screens.h"
 #include "sprite.h"
@@ -50,3 +52,34 @@ void dbg_print(void *fb, int x, int y, const char *str)
        }
 }
 
+void dbg_printf(void *fb, int x, int y, const char *fmt, ...)
+{
+       static char buf[2048];
+       va_list ap;
+
+       va_start(ap, fmt);
+       vsprintf(buf, fmt, ap);
+       va_end(ap);
+
+       dbg_print(fb, x, y, buf);
+}
+
+void dbg_fps(void *fb)
+{
+       static char fpsbuf[8];
+       static long frame, prev_upd;
+       long msec = time_msec;
+       long delta;
+
+       frame++;
+
+       delta = msec - prev_upd;
+       if(delta >= 1024) {
+               frame *= 1000;
+               sprintf(fpsbuf, "%2ld.%1ld", frame >> 10, 10 * (frame & 0x3ff) >> 10);
+               frame = 0;
+               prev_upd = msec;
+       }
+
+       dbg_print(fb, 2, 2, fpsbuf);
+}
index d01ad00..a986389 100644 (file)
@@ -42,5 +42,7 @@ extern void (*key_event)(int key, int pressed);
 void game_quit(void);
 
 void dbg_print(void *fb, int x, int y, const char *str);
+void dbg_printf(void *fb, int x, int y, const char *fmt, ...);
+void dbg_fps(void *fb);
 
 #endif /* GAME_H_ */
index c4d2040..4d0db19 100644 (file)
@@ -66,8 +66,6 @@ void intro_draw(void)
                }
        }
 
-       dbg_print(fb_pixels, 10, 10, "foo");
-
        blit_frame(fb_pixels, 1);
 }
 
index 86e5198..cfd9761 100644 (file)
@@ -103,6 +103,8 @@ void blit_frame(void *pixels, int vsync)
                wait_vsync();
        }
 
+       dbg_fps(pixels);
+
        if(SDL_MUSTLOCK(fbsurf)) {
                SDL_LockSurface(fbsurf);
        }