mirror of
https://github.com/dborth/vbagx.git
synced 2024-11-22 18:49:18 +01:00
new option to force a video mode, PAL video mode changed
This commit is contained in:
parent
6675c3c3db
commit
e8f54e3d56
@ -907,7 +907,7 @@ static int MenuGameSelection()
|
|||||||
|
|
||||||
HaltGui();
|
HaltGui();
|
||||||
btnLogo->SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
|
btnLogo->SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
|
||||||
btnLogo->SetPosition(-30, 24);
|
btnLogo->SetPosition(-50, 24);
|
||||||
mainWindow->Append(&titleTxt);
|
mainWindow->Append(&titleTxt);
|
||||||
mainWindow->Append(&gameBrowser);
|
mainWindow->Append(&gameBrowser);
|
||||||
mainWindow->Append(&buttonWindow);
|
mainWindow->Append(&buttonWindow);
|
||||||
@ -1095,7 +1095,7 @@ static int MenuGame()
|
|||||||
GuiImage closeBtnImgOver(&btnCloseOutlineOver);
|
GuiImage closeBtnImgOver(&btnCloseOutlineOver);
|
||||||
GuiButton closeBtn(btnCloseOutline.GetWidth(), btnCloseOutline.GetHeight());
|
GuiButton closeBtn(btnCloseOutline.GetWidth(), btnCloseOutline.GetHeight());
|
||||||
closeBtn.SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
|
closeBtn.SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
|
||||||
closeBtn.SetPosition(-30, 35);
|
closeBtn.SetPosition(-50, 35);
|
||||||
closeBtn.SetLabel(&closeBtnTxt);
|
closeBtn.SetLabel(&closeBtnTxt);
|
||||||
closeBtn.SetImage(&closeBtnImg);
|
closeBtn.SetImage(&closeBtnImg);
|
||||||
closeBtn.SetImageOver(&closeBtnImgOver);
|
closeBtn.SetImageOver(&closeBtnImgOver);
|
||||||
@ -1164,7 +1164,7 @@ static int MenuGame()
|
|||||||
w.Append(&closeBtn);
|
w.Append(&closeBtn);
|
||||||
|
|
||||||
btnLogo->SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
|
btnLogo->SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
|
||||||
btnLogo->SetPosition(-30, -40);
|
btnLogo->SetPosition(-50, -40);
|
||||||
mainWindow->Append(&w);
|
mainWindow->Append(&w);
|
||||||
|
|
||||||
if(lastMenu == MENU_NONE)
|
if(lastMenu == MENU_NONE)
|
||||||
@ -1380,7 +1380,7 @@ static int MenuGameSaves(int action)
|
|||||||
GuiImage closeBtnImgOver(&btnCloseOutlineOver);
|
GuiImage closeBtnImgOver(&btnCloseOutlineOver);
|
||||||
GuiButton closeBtn(btnCloseOutline.GetWidth(), btnCloseOutline.GetHeight());
|
GuiButton closeBtn(btnCloseOutline.GetWidth(), btnCloseOutline.GetHeight());
|
||||||
closeBtn.SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
|
closeBtn.SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
|
||||||
closeBtn.SetPosition(-30, 35);
|
closeBtn.SetPosition(-50, 35);
|
||||||
closeBtn.SetLabel(&closeBtnTxt);
|
closeBtn.SetLabel(&closeBtnTxt);
|
||||||
closeBtn.SetImage(&closeBtnImg);
|
closeBtn.SetImage(&closeBtnImg);
|
||||||
closeBtn.SetImageOver(&closeBtnImgOver);
|
closeBtn.SetImageOver(&closeBtnImgOver);
|
||||||
@ -1714,7 +1714,7 @@ static int MenuGameSettings()
|
|||||||
GuiImage closeBtnImgOver(&btnCloseOutlineOver);
|
GuiImage closeBtnImgOver(&btnCloseOutlineOver);
|
||||||
GuiButton closeBtn(btnCloseOutline.GetWidth(), btnCloseOutline.GetHeight());
|
GuiButton closeBtn(btnCloseOutline.GetWidth(), btnCloseOutline.GetHeight());
|
||||||
closeBtn.SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
|
closeBtn.SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
|
||||||
closeBtn.SetPosition(-30, 35);
|
closeBtn.SetPosition(-50, 35);
|
||||||
closeBtn.SetLabel(&closeBtnTxt);
|
closeBtn.SetLabel(&closeBtnTxt);
|
||||||
closeBtn.SetImage(&closeBtnImg);
|
closeBtn.SetImage(&closeBtnImg);
|
||||||
closeBtn.SetImageOver(&closeBtnImgOver);
|
closeBtn.SetImageOver(&closeBtnImgOver);
|
||||||
@ -2564,6 +2564,7 @@ static int MenuSettingsVideo()
|
|||||||
sprintf(options.name[i++], "Scaling");
|
sprintf(options.name[i++], "Scaling");
|
||||||
sprintf(options.name[i++], "Screen Zoom");
|
sprintf(options.name[i++], "Screen Zoom");
|
||||||
sprintf(options.name[i++], "Screen Position");
|
sprintf(options.name[i++], "Screen Position");
|
||||||
|
sprintf(options.name[i++], "Video Mode");
|
||||||
options.length = i;
|
options.length = i;
|
||||||
|
|
||||||
GuiText titleTxt("Game Settings - Video", 28, (GXColor){255, 255, 255, 255});
|
GuiText titleTxt("Game Settings - Video", 28, (GXColor){255, 255, 255, 255});
|
||||||
@ -2597,6 +2598,7 @@ static int MenuSettingsVideo()
|
|||||||
|
|
||||||
GuiOptionBrowser optionBrowser(552, 248, &options);
|
GuiOptionBrowser optionBrowser(552, 248, &options);
|
||||||
optionBrowser.SetPosition(0, 108);
|
optionBrowser.SetPosition(0, 108);
|
||||||
|
optionBrowser.SetCol2Position(200);
|
||||||
optionBrowser.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
optionBrowser.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||||||
|
|
||||||
HaltGui();
|
HaltGui();
|
||||||
@ -2631,6 +2633,20 @@ static int MenuSettingsVideo()
|
|||||||
|
|
||||||
sprintf (options.value[3], "%d, %d", GCSettings.xshift, GCSettings.yshift);
|
sprintf (options.value[3], "%d, %d", GCSettings.xshift, GCSettings.yshift);
|
||||||
|
|
||||||
|
switch(GCSettings.videomode)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
sprintf (options.value[4], "Automatic (Recommended)"); break;
|
||||||
|
case 1:
|
||||||
|
sprintf (options.value[4], "NTSC (480i)"); break;
|
||||||
|
case 2:
|
||||||
|
sprintf (options.value[4], "Progressive (480p)"); break;
|
||||||
|
case 3:
|
||||||
|
sprintf (options.value[4], "PAL (50Hz)"); break;
|
||||||
|
case 4:
|
||||||
|
sprintf (options.value[4], "PAL (60Hz)"); break;
|
||||||
|
}
|
||||||
|
|
||||||
ret = optionBrowser.GetClickedOption();
|
ret = optionBrowser.GetClickedOption();
|
||||||
|
|
||||||
switch (ret)
|
switch (ret)
|
||||||
@ -2659,6 +2675,12 @@ static int MenuSettingsVideo()
|
|||||||
case 3:
|
case 3:
|
||||||
ScreenPositionWindow();
|
ScreenPositionWindow();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
GCSettings.videomode++;
|
||||||
|
if(GCSettings.videomode > 4)
|
||||||
|
GCSettings.videomode = 0;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(backBtn.GetState() == STATE_CLICKED)
|
if(backBtn.GetState() == STATE_CLICKED)
|
||||||
@ -3314,7 +3336,7 @@ MainMenu (int menu)
|
|||||||
logoTxt.SetPosition(0, 4);
|
logoTxt.SetPosition(0, 4);
|
||||||
btnLogo = new GuiButton(logoImg.GetWidth(), logoImg.GetHeight());
|
btnLogo = new GuiButton(logoImg.GetWidth(), logoImg.GetHeight());
|
||||||
btnLogo->SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
|
btnLogo->SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
|
||||||
btnLogo->SetPosition(-30, 24);
|
btnLogo->SetPosition(-50, 24);
|
||||||
btnLogo->SetImage(&logoImg);
|
btnLogo->SetImage(&logoImg);
|
||||||
btnLogo->SetImageOver(&logoImgOver);
|
btnLogo->SetImageOver(&logoImgOver);
|
||||||
btnLogo->SetLabel(&logoTxt);
|
btnLogo->SetLabel(&logoTxt);
|
||||||
|
@ -56,6 +56,7 @@ struct SGCSettings{
|
|||||||
char smbshare[20];
|
char smbshare[20];
|
||||||
|
|
||||||
float ZoomLevel; // zoom amount
|
float ZoomLevel; // zoom amount
|
||||||
|
int videomode; // 0 - automatic, 1 - NTSC (480i), 2 - Progressive (480p), 3 - PAL (50Hz), 4 - PAL (60Hz)
|
||||||
int scaling; // 0 - default, 1 - partial stretch, 2 - stretch to fit, 3 - widescreen correction
|
int scaling; // 0 - default, 1 - partial stretch, 2 - stretch to fit, 3 - widescreen correction
|
||||||
int render; // 0 - original, 1 - filtered, 2 - unfiltered
|
int render; // 0 - original, 1 - filtered, 2 - unfiltered
|
||||||
int xshift; // video output shift
|
int xshift; // video output shift
|
||||||
|
@ -36,6 +36,8 @@ void FixInvalidSettings()
|
|||||||
GCSettings.SFXVolume = 40;
|
GCSettings.SFXVolume = 40;
|
||||||
if(!(GCSettings.render >= 0 && GCSettings.render < 2))
|
if(!(GCSettings.render >= 0 && GCSettings.render < 2))
|
||||||
GCSettings.render = 1;
|
GCSettings.render = 1;
|
||||||
|
if(!(GCSettings.videomode >= 0 && GCSettings.videomode < 5))
|
||||||
|
GCSettings.videomode = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
@ -72,6 +74,7 @@ DefaultSettings ()
|
|||||||
|
|
||||||
GCSettings.VerifySaves = 0;
|
GCSettings.VerifySaves = 0;
|
||||||
GCSettings.ZoomLevel = 1.0; // zoom level
|
GCSettings.ZoomLevel = 1.0; // zoom level
|
||||||
|
GCSettings.videomode = 0; // automatic video mode detection
|
||||||
GCSettings.render = 1; // Filtered
|
GCSettings.render = 1; // Filtered
|
||||||
GCSettings.scaling = 1; // partial stretch
|
GCSettings.scaling = 1; // partial stretch
|
||||||
GCSettings.WiiControls = false; // Match Wii Game
|
GCSettings.WiiControls = false; // Match Wii Game
|
||||||
|
@ -31,6 +31,7 @@ u32 FrameTimer = 0;
|
|||||||
/*** External 2D Video ***/
|
/*** External 2D Video ***/
|
||||||
/*** 2D Video Globals ***/
|
/*** 2D Video Globals ***/
|
||||||
static GXRModeObj *vmode = NULL; // Graphics Mode Object
|
static GXRModeObj *vmode = NULL; // Graphics Mode Object
|
||||||
|
static int currentVideoMode = -1; // -1 - not set, 0 - automatic, 1 - NTSC (480i), 2 - Progressive (480p), 3 - PAL (50Hz), 4 - PAL (60Hz)
|
||||||
unsigned int *xfb[2]; // Framebuffers
|
unsigned int *xfb[2]; // Framebuffers
|
||||||
int whichfb = 0; // Frame buffer toggle
|
int whichfb = 0; // Frame buffer toggle
|
||||||
|
|
||||||
@ -341,19 +342,51 @@ UpdatePadsCB ()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* InitializeVideo
|
|
||||||
*
|
|
||||||
* This function MUST be called at startup.
|
|
||||||
* - also sets up menu video mode
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
void
|
/****************************************************************************
|
||||||
InitializeVideo ()
|
* SetupVideoMode
|
||||||
|
*
|
||||||
|
* Finds the optimal video mode, or uses the user-specified one
|
||||||
|
* Also configures original video modes
|
||||||
|
***************************************************************************/
|
||||||
|
static void SetupVideoMode()
|
||||||
{
|
{
|
||||||
// get default video mode
|
if(currentVideoMode == GCSettings.videomode)
|
||||||
|
return; // no need to do anything
|
||||||
|
|
||||||
|
// choose the desired video mode
|
||||||
|
switch(GCSettings.videomode)
|
||||||
|
{
|
||||||
|
case 1: // NTSC (480i)
|
||||||
|
vmode = &TVNtsc480IntDf;
|
||||||
|
break;
|
||||||
|
case 2: // Progressive (480p)
|
||||||
|
vmode = &TVNtsc480Prog;
|
||||||
|
break;
|
||||||
|
case 3: // PAL (50Hz)
|
||||||
|
vmode = &TVPal574IntDfScale;
|
||||||
|
break;
|
||||||
|
case 4: // PAL (60Hz)
|
||||||
|
vmode = &TVEurgb60Hz480IntDf;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
vmode = VIDEO_GetPreferredMode(NULL);
|
vmode = VIDEO_GetPreferredMode(NULL);
|
||||||
|
|
||||||
|
#ifdef HW_DOL
|
||||||
|
/* we have component cables, but the preferred mode is interlaced
|
||||||
|
* why don't we switch into progressive?
|
||||||
|
* on the Wii, the user can do this themselves on their Wii Settings */
|
||||||
|
if(VIDEO_HaveComponentCable())
|
||||||
|
vmode = &TVNtsc480Prog;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// use hardware vertical scaling to fill screen
|
||||||
|
if(vmode->viTVMode >> 2 == VI_PAL)
|
||||||
|
vmode = &TVPal574IntDfScale;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// configure original modes (not implemented)
|
||||||
switch (vmode->viTVMode >> 2)
|
switch (vmode->viTVMode >> 2)
|
||||||
{
|
{
|
||||||
case VI_PAL:
|
case VI_PAL:
|
||||||
@ -369,17 +402,11 @@ InitializeVideo ()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HW_DOL
|
|
||||||
/* we have component cables, but the preferred mode is interlaced
|
|
||||||
* why don't we switch into progressive?
|
|
||||||
* on the Wii, the user can do this themselves on their Wii Settings */
|
|
||||||
if(VIDEO_HaveComponentCable())
|
|
||||||
vmode = &TVNtsc480Prog;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// check for progressive scan
|
// check for progressive scan
|
||||||
if (vmode->viTVMode == VI_TVMODE_NTSC_PROG)
|
if (vmode->viTVMode == VI_TVMODE_NTSC_PROG)
|
||||||
progressive = true;
|
progressive = true;
|
||||||
|
else
|
||||||
|
progressive = false;
|
||||||
|
|
||||||
#ifdef HW_RVL
|
#ifdef HW_RVL
|
||||||
// widescreen fix
|
// widescreen fix
|
||||||
@ -390,10 +417,24 @@ InitializeVideo ()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
currentVideoMode = GCSettings.videomode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* InitializeVideo
|
||||||
|
*
|
||||||
|
* This function MUST be called at startup.
|
||||||
|
* - also sets up menu video mode
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
void
|
||||||
|
InitializeVideo ()
|
||||||
|
{
|
||||||
|
SetupVideoMode();
|
||||||
VIDEO_Configure (vmode);
|
VIDEO_Configure (vmode);
|
||||||
|
|
||||||
screenheight = 480;
|
screenheight = 480;
|
||||||
screenwidth = vmode->fbWidth;
|
screenwidth = 640;
|
||||||
|
|
||||||
// Allocate the video buffers
|
// Allocate the video buffers
|
||||||
xfb[0] = (u32 *) MEM_K0_TO_K1 (SYS_AllocateFramebuffer (vmode));
|
xfb[0] = (u32 *) MEM_K0_TO_K1 (SYS_AllocateFramebuffer (vmode));
|
||||||
@ -511,11 +552,10 @@ static void UpdateScaling()
|
|||||||
void
|
void
|
||||||
ResetVideo_Emu ()
|
ResetVideo_Emu ()
|
||||||
{
|
{
|
||||||
GXRModeObj *rmode;
|
SetupVideoMode();
|
||||||
|
GXRModeObj *rmode = vmode; // same mode as menu
|
||||||
Mtx44 p;
|
Mtx44 p;
|
||||||
|
|
||||||
rmode = vmode; // same mode as menu
|
|
||||||
|
|
||||||
// reconfigure VI
|
// reconfigure VI
|
||||||
VIDEO_Configure (rmode);
|
VIDEO_Configure (rmode);
|
||||||
VIDEO_ClearFrameBuffer (vmode, xfb[whichfb], COLOR_BLACK);
|
VIDEO_ClearFrameBuffer (vmode, xfb[whichfb], COLOR_BLACK);
|
||||||
@ -725,6 +765,7 @@ ResetVideo_Menu ()
|
|||||||
f32 yscale;
|
f32 yscale;
|
||||||
u32 xfbHeight;
|
u32 xfbHeight;
|
||||||
|
|
||||||
|
SetupVideoMode();
|
||||||
VIDEO_Configure (vmode);
|
VIDEO_Configure (vmode);
|
||||||
VIDEO_Flush();
|
VIDEO_Flush();
|
||||||
VIDEO_WaitVSync();
|
VIDEO_WaitVSync();
|
||||||
|
Loading…
Reference in New Issue
Block a user