proper code to change video modes, remove some legacy code

This commit is contained in:
dborth 2009-09-16 07:54:34 +00:00
parent 02cba69962
commit ca7efcdb45
3 changed files with 70 additions and 88 deletions

View File

@ -96,23 +96,6 @@ void UpdateCheck()
} }
} }
} }
else // temporary, for compatibility
{
int versionnum = atoi(version);
if(versionnum > 19) // 019 (4.0.9)
{
item = mxmlFindElement(xml, xml, "file", NULL, NULL, MXML_DESCEND);
if(item)
{
const char * tmp = mxmlElementGetAttr(item, "url");
if(tmp)
{
snprintf(updateURL, 128, "%s", tmp);
updateFound = true;
}
}
}
}
} }
mxmlDelete(xml); mxmlDelete(xml);
} }

View File

@ -2,6 +2,9 @@
Copyright (c) 2008 Francisco Muñoz 'Hermes' <www.elotrolado.net> Copyright (c) 2008 Francisco Muñoz 'Hermes' <www.elotrolado.net>
All rights reserved. All rights reserved.
Proper (standard) vorbis usage by Tantric, 2009
Threading modifications/corrections by Tantric, 2009
Redistribution and use in source and binary forms, with or without modification, are Redistribution and use in source and binary forms, with or without modification, are
permitted provided that the following conditions are met: permitted provided that the following conditions are met:

View File

@ -41,10 +41,9 @@ unsigned char * filtermem = NULL; // only want ((512*2) X (239*2))
/*** 2D Video ***/ /*** 2D Video ***/
static unsigned int *xfb[2] = { NULL, NULL }; // Double buffered static unsigned int *xfb[2] = { NULL, NULL }; // Double buffered
static int whichfb = 0; // Switch static int whichfb = 0; // Switch
static GXRModeObj *vmode; // Menu video mode static GXRModeObj *vmode = NULL; // Current video mode
int screenheight; int screenheight = 480;
int screenwidth; int screenwidth = 640;
static int currentVideoMode = -1; // -1 - not set, 0 - automatic, 1 - NTSC (480i), 2 - Progressive (480p), 3 - PAL (50Hz), 4 - PAL (60Hz)
static int oldRenderMode = -1; // set to GCSettings.render when changing (temporarily) to another mode static int oldRenderMode = -1; // set to GCSettings.render when changing (temporarily) to another mode
int CheckVideo = 0; // for forcing video reset int CheckVideo = 0; // for forcing video reset
@ -417,50 +416,49 @@ void StopGX()
} }
/**************************************************************************** /****************************************************************************
* SetupVideoMode * FindVideoMode
* *
* Finds the optimal video mode, or uses the user-specified one * Finds the optimal video mode, or uses the user-specified one
* Also configures original video modes * Also configures original video modes
***************************************************************************/ ***************************************************************************/
static void SetupVideoMode() static GXRModeObj * FindVideoMode()
{ {
if(currentVideoMode == GCSettings.videomode) GXRModeObj * mode;
return; // no need to do anything
// choose the desired video mode // choose the desired video mode
switch(GCSettings.videomode) switch(GCSettings.videomode)
{ {
case 1: // NTSC (480i) case 1: // NTSC (480i)
vmode = &TVNtsc480IntDf; mode = &TVNtsc480IntDf;
break; break;
case 2: // Progressive (480p) case 2: // Progressive (480p)
vmode = &TVNtsc480Prog; mode = &TVNtsc480Prog;
break; break;
case 3: // PAL (50Hz) case 3: // PAL (50Hz)
vmode = &TVPal574IntDfScale; mode = &TVPal574IntDfScale;
break; break;
case 4: // PAL (60Hz) case 4: // PAL (60Hz)
vmode = &TVEurgb60Hz480IntDf; mode = &TVEurgb60Hz480IntDf;
break; break;
default: default:
vmode = VIDEO_GetPreferredMode(NULL); mode = VIDEO_GetPreferredMode(NULL);
#ifdef HW_DOL #ifdef HW_DOL
/* we have component cables, but the preferred mode is interlaced /* we have component cables, but the preferred mode is interlaced
* why don't we switch into progressive? * why don't we switch into progressive?
* on the Wii, the user can do this themselves on their Wii Settings */ * on the Wii, the user can do this themselves on their Wii Settings */
if(VIDEO_HaveComponentCable()) if(VIDEO_HaveComponentCable())
vmode = &TVNtsc480Prog; mode = &TVNtsc480Prog;
#endif #endif
// use hardware vertical scaling to fill screen // use hardware vertical scaling to fill screen
if(vmode->viTVMode >> 2 == VI_PAL) if(mode->viTVMode >> 2 == VI_PAL)
vmode = &TVPal574IntDfScale; mode = &TVPal574IntDfScale;
break; break;
} }
// configure original modes // configure original modes
switch (vmode->viTVMode >> 2) switch (mode->viTVMode >> 2)
{ {
case VI_PAL: case VI_PAL:
// 576 lines (PAL 50Hz) // 576 lines (PAL 50Hz)
@ -511,7 +509,7 @@ static void SetupVideoMode()
} }
// check for progressive scan // check for progressive scan
if (vmode->viTVMode == VI_TVMODE_NTSC_PROG) if (mode->viTVMode == VI_TVMODE_NTSC_PROG)
progressive = true; progressive = true;
else else
progressive = false; progressive = false;
@ -520,11 +518,50 @@ static void SetupVideoMode()
// widescreen fix // widescreen fix
if(CONF_GetAspectRatio() == CONF_ASPECT_16_9) if(CONF_GetAspectRatio() == CONF_ASPECT_16_9)
{ {
vmode->viWidth = VI_MAX_WIDTH_PAL; mode->viWidth = VI_MAX_WIDTH_PAL;
} }
#endif #endif
return mode;
}
currentVideoMode = GCSettings.videomode; /****************************************************************************
* SetupVideoMode
*
* Sets up the given video mode
***************************************************************************/
static void SetupVideoMode(GXRModeObj * mode)
{
if(vmode == mode)
return;
VIDEO_SetPostRetraceCallback (NULL);
copynow = GX_FALSE;
VIDEO_Configure (mode);
VIDEO_Flush();
// Allocate the video buffers
if(xfb[0]) free(MEM_K1_TO_K0(xfb[0]));
if(xfb[1]) free(MEM_K1_TO_K0(xfb[1]));
xfb[0] = (u32 *) MEM_K0_TO_K1 (SYS_AllocateFramebuffer (mode));
xfb[1] = (u32 *) MEM_K0_TO_K1 (SYS_AllocateFramebuffer (mode));
// Clear framebuffers etc.
VIDEO_ClearFrameBuffer (mode, xfb[0], COLOR_BLACK);
VIDEO_ClearFrameBuffer (mode, xfb[1], COLOR_BLACK);
VIDEO_SetNextFramebuffer (xfb[0]);
VIDEO_SetBlack (FALSE);
VIDEO_Flush ();
VIDEO_WaitVSync ();
if (mode->viTVMode & VI_NON_INTERLACE)
VIDEO_WaitVSync();
else
while (VIDEO_GetNextField())
VIDEO_WaitVSync();
VIDEO_SetPostRetraceCallback ((VIRetraceCallback)copy_to_xfb);
vmode = mode;
} }
/**************************************************************************** /****************************************************************************
@ -537,39 +574,11 @@ static void SetupVideoMode()
void void
InitGCVideo () InitGCVideo ()
{ {
SetupVideoMode(); GXRModeObj *rmode = FindVideoMode();
VIDEO_Configure (vmode); SetupVideoMode(rmode);
screenheight = 480;
screenwidth = 640;
// Allocate the video buffers
xfb[0] = (u32 *) MEM_K0_TO_K1 (SYS_AllocateFramebuffer (vmode));
xfb[1] = (u32 *) MEM_K0_TO_K1 (SYS_AllocateFramebuffer (vmode));
// A console is always useful while debugging
//console_init (xfb[0], 20, 64, vmode->fbWidth, vmode->xfbHeight, vmode->fbWidth * 2);
// Clear framebuffers etc.
VIDEO_ClearFrameBuffer (vmode, xfb[0], COLOR_BLACK);
VIDEO_ClearFrameBuffer (vmode, xfb[1], COLOR_BLACK);
VIDEO_SetNextFramebuffer (xfb[0]);
// video callbacks
VIDEO_SetPostRetraceCallback ((VIRetraceCallback)copy_to_xfb);
VIDEO_SetBlack (FALSE);
VIDEO_Flush ();
VIDEO_WaitVSync ();
if (vmode->viTVMode & VI_NON_INTERLACE)
VIDEO_WaitVSync ();
copynow = GX_FALSE;
StartGX (); StartGX ();
InitLUTs(); // init LUTs for hq2x InitLUTs(); // init LUTs for hq2x
InitVideoThread (); InitVideoThread ();
// Finally, the video is up and ready for use :)
} }
/**************************************************************************** /****************************************************************************
@ -580,8 +589,7 @@ InitGCVideo ()
void void
ResetVideo_Emu () ResetVideo_Emu ()
{ {
SetupVideoMode(); GXRModeObj *rmode;
GXRModeObj *rmode = vmode; // same mode as menu
Mtx44 p; Mtx44 p;
int i = -1; int i = -1;
@ -615,16 +623,12 @@ ResetVideo_Emu ()
rmode->viTVMode |= VI_INTERLACE; rmode->viTVMode |= VI_INTERLACE;
} }
} }
VIDEO_Configure (rmode);
VIDEO_Flush();
VIDEO_WaitVSync();
if (rmode->viTVMode & VI_NON_INTERLACE)
VIDEO_WaitVSync();
else else
while (VIDEO_GetNextField()) {
VIDEO_WaitVSync(); rmode = FindVideoMode();
}
SetupVideoMode(rmode); // reconfigure VI
VIDEO_SetPreRetraceCallback(NULL); VIDEO_SetPreRetraceCallback(NULL);
GXColor background = {0, 0, 0, 255}; GXColor background = {0, 0, 0, 255};
@ -929,17 +933,9 @@ ResetVideo_Menu ()
Mtx44 p; Mtx44 p;
f32 yscale; f32 yscale;
u32 xfbHeight; u32 xfbHeight;
GXRModeObj * rmode = FindVideoMode();
SetupVideoMode(); SetupVideoMode(rmode); // reconfigure VI
VIDEO_Configure (vmode);
VIDEO_Flush();
VIDEO_WaitVSync();
if (vmode->viTVMode & VI_NON_INTERLACE)
VIDEO_WaitVSync();
else
while (VIDEO_GetNextField())
VIDEO_WaitVSync();
VIDEO_SetPreRetraceCallback((VIRetraceCallback)UpdatePads); VIDEO_SetPreRetraceCallback((VIRetraceCallback)UpdatePads);
// clears the bg to color and clears the z buffer // clears the bg to color and clears the z buffer