X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fdemo.c;h=f51dcc1b6fe13301bf327e7ebd71669a5bfec0bc;hb=628ef3345462458f2fb6be034583e61238b89f89;hp=50232756f48fc1af6c96559936bee7e276e3effd;hpb=ba4adddb6685c5a64a3ca5cae56ba879841327ec;p=andemo diff --git a/src/demo.c b/src/demo.c index 5023275..f51dcc1 100644 --- a/src/demo.c +++ b/src/demo.c @@ -20,6 +20,7 @@ int demo_init(void) if(!(tex_logo = get_tex2d("data/ml_logo_old.png"))) { return -1; } + glBindTexture(GL_TEXTURE_2D, tex_logo); glUseProgram(sdr_foo); gl_begin(GL_QUADS); gl_texcoord2f(0, 1); @@ -36,6 +37,14 @@ int demo_init(void) if(dsys_init("data/demoscript") == -1) { return -1; } + if(opt.scrname) { + struct demoscreen *scr = dsys_find_screen(opt.scrname); + if(scr) { + dsys_run_screen(scr); + } else { + fprintf(stderr, "ignoring screen option, no such screen: %s\n", opt.scrname); + } + } return 0; } @@ -47,18 +56,29 @@ void demo_cleanup(void) void demo_display(void) { - struct demoscreen *scr; + dsys_update(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - scr = dsys_act_scr; - while(scr) { - if(scr->update) { - scr->update(dsys_time); - } - scr->draw(); - scr = scr->next; - } + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glBindTexture(GL_TEXTURE_2D, tex_logo); + glUseProgram(sdr_foo); + gl_begin(GL_QUADS); + gl_color4f(1, 1, 1, dsys_value("flashlogo")); + gl_texcoord2f(0, 1); + gl_vertex2f(-1, -1); + gl_texcoord2f(1, 1); + gl_vertex2f(1, -1); + gl_texcoord2f(1, 0); + gl_vertex2f(1, 1); + gl_texcoord2f(0, 0); + gl_vertex2f(-1, 1); + gl_end(); + glDisable(GL_BLEND); + + dsys_draw(); } void demo_reshape(int x, int y) @@ -67,9 +87,9 @@ void demo_reshape(int x, int y) glViewport(0, 0, x, y); - for(i=0; ireshape) { - dsys_screens[i]->reshape(x, y); + for(i=0; ireshape) { + dsys.screens[i]->reshape(x, y); } } } @@ -80,7 +100,7 @@ void demo_keyboard(int key, int pressed) switch(key) { case ' ': - if(dsys_running) { + if(dsys.running) { dsys_stop(); } else { dsys_run(); @@ -97,17 +117,21 @@ void demo_keyboard(int key, int pressed) } else if(key >= KEY_F1 && key <= KEY_F12) { int idx = key - KEY_F1; - if(idx < dsys_num_screens) { - dsys_run_screen(dsys_screens[idx]); + if(idx < dsys.num_screens) { + dsys_run_screen(dsys.screens[idx]); } } else { - struct demoscreen *scr = dsys_act_scr; - while(scr) { - if(scr->keyboard) { - scr->keyboard(key, pressed); - } - scr = scr->next; + int i; + + if(dsys.scr_override && dsys.scr_override->keyboard) { + dsys.scr_override->keyboard(key, pressed); + break; + } + + for(i=0; ikeyboard) scr->keyboard(key, pressed); } } } @@ -115,22 +139,29 @@ void demo_keyboard(int key, int pressed) void demo_mouse(int bn, int pressed, int x, int y) { - struct demoscreen *scr = dsys_act_scr; - while(scr) { - if(scr->mouse) { - scr->mouse(bn, pressed, x, y); - } - scr = scr->next; + int i; + + if(dsys.scr_override && dsys.scr_override->mouse) { + dsys.scr_override->mouse(bn, pressed, x, y); + return; + } + + for(i=0; imouse) scr->mouse(bn, pressed, x, y); } } void demo_motion(int x, int y) { - struct demoscreen *scr = dsys_act_scr; - while(scr) { - if(scr->motion) { - scr->motion(x, y); - } - scr = scr->next; + int i; + + if(dsys.scr_override && dsys.scr_override->motion) { + dsys.scr_override->motion(x, y); + } + + for(i=0; imotion) scr->motion(x, y); } }