From 36b33a261ceb044bb16963a927f5d67cff82ff2a Mon Sep 17 00:00:00 2001 From: dborth Date: Thu, 28 Jun 2012 02:33:17 +0000 Subject: [PATCH] fix screen flicker when going back to menu --- source/menu.cpp | 7 +------ source/video.cpp | 29 +++++++++++++++++++++-------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/source/menu.cpp b/source/menu.cpp index d0f9f38..24fa8ce 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -3782,12 +3782,7 @@ MainMenu (int menu) gameScreenImg = new GuiImage(gameScreen); gameScreenImg->SetAlpha(192); gameScreenImg->ColorStripe(30); - - if (GCSettings.render > 0 && !GCSettings.widescreen) - gameScreenImg->SetScaleX(screenwidth/(vmode->fbWidth*0.8)); - else - gameScreenImg->SetScaleX(screenwidth/(float)vmode->fbWidth); - + gameScreenImg->SetScaleX(screenwidth/(float)vmode->fbWidth); gameScreenImg->SetScaleY(screenheight/(float)vmode->efbHeight); } else diff --git a/source/video.cpp b/source/video.cpp index 6732b7e..662416b 100644 --- a/source/video.cpp +++ b/source/video.cpp @@ -505,7 +505,7 @@ static void SetupVideoMode(GXRModeObj * mode) { if(vmode == mode) return; - + VIDEO_SetPostRetraceCallback (NULL); copynow = GX_FALSE; VIDEO_Configure (mode); @@ -569,6 +569,21 @@ InitGCVideo () vheight = 100; } +void ResetFbWidth(int width, GXRModeObj *rmode) +{ + if(rmode->fbWidth == width) + return; + + rmode->fbWidth = width; + + if(rmode != vmode) + return; + + GX_InvVtxCache(); + VIDEO_Configure(rmode); + VIDEO_Flush(); +} + /**************************************************************************** * ResetVideo_Emu * @@ -617,13 +632,11 @@ ResetVideo_Emu () { rmode = FindVideoMode(); - if (!GCSettings.widescreen) - { - memcpy(&TV_Custom, rmode, sizeof(TV_Custom)); - rmode = &TV_Custom; - rmode->fbWidth = 512; - } - + if (GCSettings.widescreen) + ResetFbWidth(640, rmode); + else + ResetFbWidth(512, rmode); + Settings.SoundInputRate = 31953; UpdatePlaybackRate(); }