]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Do not render or record first frame. Frame is rendered when vsync starts, not when...
authorToni Wilen <twilen@winuae.net>
Wed, 11 Jan 2023 18:13:17 +0000 (20:13 +0200)
committerToni Wilen <twilen@winuae.net>
Wed, 11 Jan 2023 18:13:17 +0000 (20:13 +0200)
custom.cpp
drawing.cpp
include/drawing.h
newcpu.cpp

index 571f3bbdd13bc31d78ca414a36d8590c840b3e29..8496531c6800ef61ad1ab69aedec9441dd235570 100644 (file)
@@ -152,6 +152,7 @@ static int nosignal_cnt, nosignal_status;
 static bool nosignal_trigger;
 int display_reset;
 static evt_t line_start_cycles;
+static bool initial_frame;
 
 #define LOF_TOGGLES_NEEDED 3
 //#define NLACE_CNT_NEEDED 50
@@ -11174,7 +11175,8 @@ static void vsync_handler_render(void)
        if (!vsync_rendered) {
                frame_time_t start, end;
                start = read_processor_time();
-               vsync_handle_redraw(lof_store, lof_changed, bplcon0, bplcon3, isvsync_chipset() >= 0);
+               vsync_handle_redraw(lof_store, lof_changed, bplcon0, bplcon3, isvsync_chipset() >= 0, initial_frame);
+               initial_frame = false;
                vsync_rendered = true;
                end = read_processor_time();
                frameskiptime += end - start;
@@ -13315,6 +13317,7 @@ void custom_reset(bool hardreset, bool keyboardreset)
 {
        if (hardreset) {
                board_prefs_changed(-1, -1);
+               initial_frame = true;
        }
 
        target_reset();
index 8e338a2180249c688fc690ce9811f766d9998771..522a7d8f5dd0a7851d4d2f8fa44222962a8c0fe0 100644 (file)
@@ -4930,7 +4930,7 @@ bool vsync_handle_check (void)
        return changed != 0;
 }
 
-void vsync_handle_redraw(int long_field, int lof_changed, uae_u16 bplcon0p, uae_u16 bplcon3p, bool drawlines)
+void vsync_handle_redraw(int long_field, int lof_changed, uae_u16 bplcon0p, uae_u16 bplcon3p, bool drawlines, bool initial)
 {
        int monid = 0;
        struct amigadisplay *ad = &adisplays[monid];
@@ -4938,13 +4938,16 @@ void vsync_handle_redraw(int long_field, int lof_changed, uae_u16 bplcon0p, uae_
        if (lof_changed || interlace_seen <= 0 || (currprefs.gfx_iscanlines && interlace_seen > 0) || last_redraw_point >= 2 || long_field || doublescan < 0) {
                last_redraw_point = 0;
 
-               if (ad->framecnt == 0) {
-                       finish_drawing_frame(drawlines);
+               if (!initial) {
+                       if (ad->framecnt == 0) {
+                               finish_drawing_frame(drawlines);
 #ifdef AVIOUTPUT
-                       if (!ad->picasso_on) {
-                               frame_drawn(monid);
-                       }
+                               if (!ad->picasso_on) {
+                                       frame_drawn(monid);
+                               }
 #endif
+                       }
+                       count_frame(monid);
                }
 #if 0
                if (interlace_seen > 0) {
@@ -4972,7 +4975,6 @@ void vsync_handle_redraw(int long_field, int lof_changed, uae_u16 bplcon0p, uae_
                        return;
                }
 
-               count_frame(monid);
 
                if (ad->framecnt == 0) {
                        init_drawing_frame();
index 4cbc83ca9ef4e3f92421e73e327249b9f6e6a167..04895b99411e11bcf0f73d2c85dcb81ab0b6b720 100644 (file)
@@ -357,7 +357,7 @@ enum nln_how {
 };
 
 extern void hsync_record_line_state (int lineno, enum nln_how, int changed);
-extern void vsync_handle_redraw (int long_field, int lof_changed, uae_u16, uae_u16, bool drawlines);
+extern void vsync_handle_redraw (int long_field, int lof_changed, uae_u16, uae_u16, bool drawlines, bool initial);
 extern bool vsync_handle_check (void);
 extern void draw_lines(int end, int section);
 extern void init_hardware_for_drawing_frame (void);
index 6868ba8ce2bcf99bc2c16857482de609db20dd87..b4251711082a786d1b245b69c517667abb19cf45 100644 (file)
@@ -6440,15 +6440,19 @@ void m68k_go (int may_quit)
                        quit_program = 0;
 
 #ifdef SAVESTATE
-                       if (savestate_state == STATE_DORESTORE)
+                       if (savestate_state == STATE_DORESTORE) {
                                savestate_state = STATE_RESTORE;
-                       if (savestate_state == STATE_RESTORE)
+                       }
+                       if (savestate_state == STATE_RESTORE) {
                                restore_state (savestate_fname);
-                       else if (savestate_state == STATE_REWIND)
+                               cpu_hardreset = 1;
+                       } else if (savestate_state == STATE_REWIND) {
                                savestate_rewind ();
+                       }
 #endif
-                       if (cpu_hardreset)
+                       if (cpu_hardreset) {
                                m68k_reset_restore();
+                       }
                        prefs_changed_cpu();
                        build_cpufunctbl();
                        set_x_funcs();