X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fmodern%2Fmain.c;h=91178bfe841db3d8f600b9592da3cfc95f4645b9;hb=HEAD;hp=d6682cc666ba304090162033d58e15058e78c5df;hpb=176092843ec9bc851c73c842facf92ad48ab03cb;p=retroray diff --git a/src/modern/main.c b/src/modern/main.c index d6682cc..91178bf 100644 --- a/src/modern/main.c +++ b/src/modern/main.c @@ -20,7 +20,11 @@ along with this program. If not, see . #include #include "miniglut.h" #include "app.h" +#include "options.h" +#include "rtk.h" +#include "logger.h" +static void display(void); static void reshape(int x, int y); static void keydown(unsigned char key, int x, int y); static void keyup(unsigned char key, int x, int y); @@ -43,16 +47,20 @@ static void (*glx_swap_interval_sgi)(); static PROC wgl_swap_interval_ext; #endif +static rtk_rect rband; int main(int argc, char **argv) { glutInit(&argc, argv); - glutInitWindowSize(1024, 768); + + load_options(CFGFILE); + + glutInitWindowSize(opt.xres, opt.yres); glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); glutCreateWindow("RetroRay"); - glutDisplayFunc(app_display); + glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keydown); glutKeyboardUpFunc(keyup); @@ -77,7 +85,12 @@ int main(int argc, char **argv) wgl_swap_interval_ext = wglGetProcAddress("wglSwapIntervalEXT"); #endif - app_reshape(glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT)); + win_width = glutGet(GLUT_WINDOW_WIDTH); + win_height = glutGet(GLUT_WINDOW_HEIGHT); + win_aspect = (float)win_width / win_height; + + init_logger(); + add_log_stream(stdout); if(app_init() == -1) { return 1; @@ -87,18 +100,57 @@ int main(int argc, char **argv) return 0; } -long app_getmsec(void) +unsigned long get_msec(void) { - return glutGet(GLUT_ELAPSED_TIME); + return (unsigned long)glutGet(GLUT_ELAPSED_TIME); } -void app_redisplay(void) +void app_redisplay(int x, int y, int w, int h) { + /*dbgmsg("fakeupd: %d,%d (%dx%d)\n", x, y, w, h);*/ glutPostRedisplay(); } void app_swap_buffers(void) { + glViewport(0, 0, win_width, win_height); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + glOrtho(0, win_width, win_height, 0, -1, 1); + + glRasterPos2i(0, 0); + glPixelZoom(1, -1); + glEnable(GL_ALPHA_TEST); + glAlphaFunc(GL_GREATER, 0.5f); + glDrawPixels(win_width, win_height, GL_BGRA, GL_UNSIGNED_BYTE, framebuf); + glDisable(GL_ALPHA_TEST); + + if(rband.width | rband.height) { + glPushAttrib(GL_ENABLE_BIT); + glDisable(GL_DEPTH_TEST); + glDisable(GL_LIGHTING); + + glEnable(GL_COLOR_LOGIC_OP); + glLogicOp(GL_XOR); + + glBegin(GL_LINE_LOOP); + glColor3f(1, 1, 1); + glVertex2f(rband.x, rband.y); + glVertex2f(rband.x + rband.width, rband.y); + glVertex2f(rband.x + rband.width, rband.y + rband.height); + glVertex2f(rband.x, rband.y + rband.height); + glEnd(); + + glPopAttrib(); + } + + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + glutSwapBuffers(); assert(glGetError() == GL_NO_ERROR); } @@ -155,7 +207,22 @@ void app_vsync(int vsync) } #endif +void app_rband(int x, int y, int w, int h) +{ + rband.x = x; + rband.y = y; + rband.width = w; + rband.height = h; + glutPostRedisplay(); +} + + +static void display(void) +{ + app_display(); + app_swap_buffers(); +} static void reshape(int x, int y) { @@ -215,7 +282,7 @@ static int translate_skey(int key) case GLUT_KEY_PAGE_UP: return KEY_PGUP; case GLUT_KEY_PAGE_DOWN: - return KEY_PGDOWN; + return KEY_PGDN; case GLUT_KEY_HOME: return KEY_HOME; case GLUT_KEY_END: