X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fapp.c;h=92759f6749cf679c4bbabb3ba502fedb394a6793;hb=7e576adc58f91db8dd89cffd1c4fd7401c70e36c;hp=fdcbe118dd2c7342e580c23bd73f33380b1a6174;hpb=b0088adf036a53139f67ebf96f1bbb55abf199f4;p=retroray diff --git a/src/app.c b/src/app.c index fdcbe11..92759f6 100644 --- a/src/app.c +++ b/src/app.c @@ -23,6 +23,8 @@ along with this program. If not, see . #include #include "gaw/gaw.h" #include "app.h" +#include "timer.h" +#include "rend.h" #include "options.h" #include "font.h" #include "util.h" @@ -36,7 +38,6 @@ static void gui_fill(rtk_rect *rect, uint32_t color); static void gui_blit(int x, int y, rtk_icon *icon); static void gui_drawtext(int x, int y, const char *str); static void gui_textrect(const char *str, rtk_rect *rect); -static void txdraw(struct dtx_vertex *v, int vcount, struct dtx_pixmap *pixmap, void *cls); int mouse_x, mouse_y, mouse_state[3]; unsigned int modkeys; @@ -52,6 +53,7 @@ struct font *uifont; uint32_t *framebuf; +struct scene *scn; /* available screens */ #define MAX_SCREENS 8 @@ -65,13 +67,16 @@ int app_init(void) char *start_scr_name; static rtk_draw_ops guigfx = {gui_fill, gui_blit, gui_drawtext, gui_textrect}; - init_logger(); - #if !defined(NDEBUG) && defined(DBG_FPEXCEPT) - printf("floating point exceptions enabled\n"); + infomsg("floating point exceptions enabled\n"); enable_fpexcept(); #endif +#ifdef GFX_SW + gaw_sw_init(); +#endif + rend_init(); + load_options("retroray.cfg"); app_resize(opt.xres, opt.yres); app_vsync(opt.vsync); @@ -79,16 +84,22 @@ int app_init(void) app_fullscreen(1); } - dtx_target_user(txdraw, 0); + /*dtx_target_user(txdraw, 0);*/ + dtx_target_raster((unsigned char*)framebuf, win_width, win_height); + dtx_set(DTX_RASTER_THRESHOLD, 127); uifont = malloc_nf(sizeof *uifont); - if(load_font(uifont, "data/uifont12.gmp") == -1) { + if(load_font(uifont, "data/uifont14.gmp") == -1) { free(uifont); return -1; } rtk_setup(&guigfx); + if(!(scn = create_scene())) { + return -1; + } + /* initialize screens */ screens[num_screens++] = &scr_model; screens[num_screens++] = &scr_rend; @@ -101,7 +112,7 @@ int app_init(void) } } - time_msec = app_getmsec(); + time_msec = get_msec(); for(i=0; iname && start_scr_name && strcmp(screens[i]->name, start_scr_name) == 0) { @@ -133,16 +144,20 @@ void app_shutdown(void) destroy_font(uifont); free(uifont); +#ifdef GFX_SW + gaw_sw_destroy(); +#endif + + free_scene(scn); + cleanup_logger(); } void app_display(void) { - time_msec = app_getmsec(); + time_msec = get_msec(); cur_scr->display(); - - app_swap_buffers(); } void app_reshape(int x, int y) @@ -150,7 +165,9 @@ void app_reshape(int x, int y) int numpix = x * y; int prev_numpix = win_width * win_height; - if(numpix > prev_numpix) { + dbgmsg("reshape(%d, %d)\n", x, y); + + if(!framebuf || numpix > prev_numpix) { void *tmp; if(!(tmp = realloc(framebuf, numpix * sizeof *framebuf))) { errormsg("failed to resize framebuffer to %dx%d\n", x, y); @@ -161,6 +178,7 @@ void app_reshape(int x, int y) #ifdef GFX_SW gaw_sw_framebuffer(x, y, framebuf); #endif + dtx_target_raster((unsigned char*)framebuf, x, y); win_width = x; win_height = y; @@ -174,14 +192,29 @@ void app_reshape(int x, int y) void app_keyboard(int key, int press) { + long msec; + static long prev_esc; + if(press) { switch(key) { #ifdef DBG_ESCQUIT case 27: - app_quit(); - return; + msec = get_msec(); + if(msec - prev_esc < 1000) { + app_quit(); + return; + } + prev_esc = msec; + break; #endif + case 'q': + if(modkeys & KEY_MOD_CTRL) { + app_quit(); + return; + } + break; + case '\n': case '\r': if(modkeys & KEY_MOD_ALT) { @@ -303,7 +336,3 @@ static void gui_textrect(const char *str, rtk_rect *rect) rect->width = 20; rect->height = 10;/* TODO */ } - -static void txdraw(struct dtx_vertex *v, int vcount, struct dtx_pixmap *pixmap, void *cls) -{ -}