diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 25b9c289b..3a754520e 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,5 +1,9 @@ D1X-Rebirth Changelog +20080521 +-------- +arch/ogl/gr.c, arch/sdl/mouse.c, main/game.h: Make Screenshots over backbuffer; Implmented filtered mouse delta reading + 20080520 -------- main/kconfig.c: Decreasing divisor for mouse axis reading - making mouse sensitivity practically much higher diff --git a/arch/ogl/gr.c b/arch/ogl/gr.c index 9fdaf6902..0f80c8c3b 100644 --- a/arch/ogl/gr.c +++ b/arch/ogl/gr.c @@ -45,6 +45,7 @@ #include "config.h" #include "playsave.h" #include "vers_id.h" +#include "gr.h" int gr_installed = 0; int gl_initialized=0; @@ -585,8 +586,7 @@ void save_screen_shot(int automap_flag) char savename[13+sizeof(SCRNS_DIR)]; unsigned char *buf; - if (!GameArg.DbgGlReadPixelsOk) - { + if (!GameArg.DbgGlReadPixelsOk){ if (!automap_flag) hud_message(MSGC_GAME_FEEDBACK,"glReadPixels not supported on your configuration"); return; @@ -602,7 +602,7 @@ void save_screen_shot(int automap_flag) sprintf(savename, "%sscrn%04d.tga",SCRNS_DIR, savenum++); } while (PHYSFS_exists(savename)); - sprintf( message, "%s '%s'", TXT_DUMPING_SCREEN, savename ); + sprintf( message, "%s 'scrn%04d.tga'", TXT_DUMPING_SCREEN, savenum-1 ); if (!automap_flag) hud_message(MSGC_GAME_FEEDBACK,message); @@ -613,12 +613,13 @@ void save_screen_shot(int automap_flag) render_frame(0); gr_set_curfont(MEDIUM2_FONT); gr_printf(SWIDTH-FSPACX(92),SHEIGHT-LINE_SPACING,"DXX-Rebirth\n"); - glReadBuffer(GL_BACK); } else { - glReadBuffer(GL_FRONT); + game_do_render_frame(0); } + ogl_do_palfx(); + glReadBuffer(GL_BACK); buf = d_malloc(grd_curscreen->sc_w*grd_curscreen->sc_h*3); write_bmp(savename,grd_curscreen->sc_w,grd_curscreen->sc_h,buf); d_free(buf); diff --git a/arch/sdl/mouse.c b/arch/sdl/mouse.c index 5d10cff7a..3bbf0e9ac 100644 --- a/arch/sdl/mouse.c +++ b/arch/sdl/mouse.c @@ -120,19 +120,29 @@ void mouse_get_pos( int *x, int *y, int *z ) void mouse_get_delta( int *dx, int *dy, int *dz ) { + static int old_delta_x = 0, old_delta_y = 0, old_delta_z = 0; + Mouse.delta_time += FrameTime; - event_poll(); - *dx = Mouse.delta_x; - *dy = Mouse.delta_y; - *dz = Mouse.delta_z; - // reset all ~33ms if (Mouse.delta_time >= F1_0/30) { - Mouse.delta_x = 0; - Mouse.delta_y = 0; + SDL_GetRelativeMouseState( Mouse.delta_x, Mouse.delta_y ); + *dz = old_delta_dz = Mouse.delta_z; Mouse.delta_z = 0; Mouse.delta_time = 0; } + else + { + *dx = old_delta_dx; + *dy = old_delta_dy; + *dz = old_delta_dz; + } + + // filter delta + *dx = (Mouse.delta_x + old_delta_dx) * 0.5; + *dy = (Mouse.delta_y + old_delta_dy) * 0.5; + + old_delta_dx = Mouse.delta_x; + old_delta_dy = Mouse.delta_y; } int mouse_get_btns() diff --git a/main/game.h b/main/game.h index 4c720b937..eb30d31e4 100644 --- a/main/game.h +++ b/main/game.h @@ -218,6 +218,7 @@ extern grs_canvas VR_screen_sub_pages[2]; // Two sub pages of VRAM if paging is extern grs_canvas *VR_offscreen_menu; // The offscreen data buffer for menus void game_init_render_buffers (int render_max_w, int render_max_h, int render_method); +void game_do_render_frame(int flip); extern int Allow_primary_cycle; extern int Allow_secondary_cycle;