X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fapp.c;h=92759f6749cf679c4bbabb3ba502fedb394a6793;hb=7e576adc58f91db8dd89cffd1c4fd7401c70e36c;hp=9db63b047c9b01de8c105b11f846d616c8bc948d;hpb=5f50ec3c542ea29211591d4865bdaf1368f8c649;p=retroray
diff --git a/src/app.c b/src/app.c
index 9db63b0..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,16 +67,15 @@ 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);
@@ -83,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;
@@ -105,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) {
@@ -141,16 +148,16 @@ void app_shutdown(void)
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)
@@ -158,7 +165,7 @@ void app_reshape(int x, int y)
int numpix = x * y;
int prev_numpix = win_width * win_height;
- printf("reshape(%d, %d)\n", x, y);
+ dbgmsg("reshape(%d, %d)\n", x, y);
if(!framebuf || numpix > prev_numpix) {
void *tmp;
@@ -171,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;
@@ -184,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) {
@@ -313,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)
-{
-}