mirror of
https://github.com/ekeeke/Genesis-Plus-GX.git
synced 2024-12-24 18:21:50 +01:00
fixed some video options not being properly set, modified Xscale/Yscale displayed values
This commit is contained in:
parent
c1772021b5
commit
c012b71248
@ -16,10 +16,12 @@ CURRENT:
|
||||
|
||||
|
||||
[NGC/Wii]
|
||||
- removed unused libsamplerate settings for HQ YM2612 (now use "FAST" setting for MAME by default)
|
||||
- improved fast scrolling in menus when using Wiimote D-PAD
|
||||
- fixed config file incompatibility between GC and Wii versions
|
||||
- now use fixed libsamplerate setting in "HQ YM2612" mode
|
||||
- implemented menu fast scrolling with the Wiimote D-PAD
|
||||
- fixed config file incompatibilities between Gamecube and Wii versions
|
||||
- re-enabled texture filtering in H40 original mode when overscan is emulated: fix screen scroll tearing
|
||||
- added Shay Green's NTSC Filters support
|
||||
- added proper 480p menu detection for NTSC Gamecube users
|
||||
|
||||
|
||||
26/08/2008:
|
||||
|
@ -319,13 +319,15 @@ void dispmenu ()
|
||||
|
||||
while (quit == 0)
|
||||
{
|
||||
sprintf (items[0], "Aspect: %s", config.aspect ? "ORIGINAL" : "STRETCH");
|
||||
if (config.render == 1) sprintf (items[1], "TV Mode: INTERLACED");
|
||||
else if (config.render == 2) sprintf (items[1], "TV Mode: PROGRESSIVE");
|
||||
else sprintf (items[1], "TV Mode: ORIGINAL");
|
||||
if (config.tv_mode == 0) sprintf (items[2], "TV Frequency: 60HZ");
|
||||
else if (config.tv_mode == 1) sprintf (items[2], "TV Frequency: 50HZ");
|
||||
else sprintf (items[2], "TV Frequency: 50/60HZ");
|
||||
ogc_video__scale();
|
||||
|
||||
sprintf (items[0], "Aspect: %s", config.aspect ? "ORIGINAL" : "STRETCH");
|
||||
if (config.render == 1) sprintf (items[1], "Render: INTERLACED");
|
||||
else if (config.render == 2) sprintf (items[1], "Render: PROGRESSIVE");
|
||||
else sprintf (items[1], "Render: ORIGINAL");
|
||||
if (config.tv_mode == 0) sprintf (items[2], "TV Mode: 60HZ");
|
||||
else if (config.tv_mode == 1) sprintf (items[2], "TV Mode: 50HZ");
|
||||
else sprintf (items[2], "TV Mode: 50/60HZ");
|
||||
sprintf (items[3], "Texture Filter: %s", config.filtering ? " ON" : "OFF");
|
||||
if (config.ntsc == 1) sprintf (items[4], "NTSC Filter: COMPOSITE");
|
||||
else if (config.ntsc == 2) sprintf (items[4], "NTSC Filter: S-VIDEO");
|
||||
@ -334,8 +336,8 @@ void dispmenu ()
|
||||
sprintf (items[5], "Borders: %s", config.overscan ? " ON" : "OFF");
|
||||
sprintf (items[6], "Center X: %s%02d", config.xshift < 0 ? "-":"+", abs(config.xshift));
|
||||
sprintf (items[7], "Center Y: %s%02d", config.yshift < 0 ? "-":"+", abs(config.yshift));
|
||||
sprintf (items[8], "Scale X: %s%02d", config.xscale < 0 ? "-":"+", abs(config.xscale));
|
||||
sprintf (items[9], "Scale Y: %s%02d", config.yscale < 0 ? "-":"+", abs(config.yscale));
|
||||
sprintf (items[8], "Scale X: %02d", xscale*2);
|
||||
sprintf (items[9], "Scale Y: %02d", yscale*2);
|
||||
|
||||
ret = domenu (&items[0], count, 1);
|
||||
|
||||
@ -373,13 +375,16 @@ void dispmenu ()
|
||||
|
||||
case 3: /*** texture filtering ***/
|
||||
config.filtering ^= 1;
|
||||
bitmap.viewport.changed = 1;
|
||||
break;
|
||||
|
||||
case 4: /*** NTSC filter ***/
|
||||
config.ntsc ++;
|
||||
if (config.ntsc > 3) config.ntsc = 0;
|
||||
bitmap.viewport.changed = 1;
|
||||
break;
|
||||
case 5: /*** overscan emulation ***/
|
||||
|
||||
case 5: /*** overscan emulation ***/
|
||||
config.overscan ^= 1;
|
||||
bitmap.viewport.x = config.overscan ? ((reg[12] & 1) ? 16 : 12) : 0;
|
||||
bitmap.viewport.y = config.overscan ? (((reg[1] & 8) ? 0 : 8) + (vdp_pal ? 24 : 0)) : 0;
|
||||
|
@ -33,7 +33,7 @@ sms_ntsc_t sms_ntsc;
|
||||
|
||||
|
||||
/*** PAL 50hz flag ***/
|
||||
uint8 gc_pal = 0;
|
||||
int gc_pal = 0;
|
||||
|
||||
/*** VI ***/
|
||||
unsigned int *xfb[2]; /*** Double buffered ***/
|
||||
@ -307,7 +307,7 @@ static void draw_init(void)
|
||||
/* Clear all Vertex params */
|
||||
GX_ClearVtxDesc ();
|
||||
|
||||
/* Set Position Params (set quad aspect ratio) */
|
||||
/* Set Position Params (quad aspect ratio) */
|
||||
GX_SetVtxAttrFmt (GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0);
|
||||
GX_SetVtxDesc (GX_VA_POS, GX_INDEX8);
|
||||
GX_SetArray (GX_VA_POS, square, 3 * sizeof (s16));
|
||||
@ -320,10 +320,12 @@ static void draw_init(void)
|
||||
GX_SetNumTexGens (1);
|
||||
GX_SetNumChans(0);
|
||||
|
||||
/** Set Modelview **/
|
||||
/* Set Modelview */
|
||||
memset (&view, 0, sizeof (Mtx));
|
||||
guLookAt(view, &cam.pos, &cam.up, &cam.view);
|
||||
GX_LoadPosMtxImm (view, GX_PNMTX0);
|
||||
|
||||
GX_InvVtxCache ();
|
||||
}
|
||||
|
||||
/* vertex rendering */
|
||||
@ -387,9 +389,10 @@ static void gxStart(void)
|
||||
}
|
||||
|
||||
/* set GX scaler */
|
||||
static void gxScale(void)
|
||||
int xscale, yscale;
|
||||
void ogc_video__scale(void)
|
||||
{
|
||||
int xscale, yscale, xshift, yshift, i;
|
||||
int scale, xshift, yshift, i;
|
||||
|
||||
/* borders are emulated */
|
||||
if (config.overscan)
|
||||
@ -440,17 +443,17 @@ static void gxScale(void)
|
||||
xshift += config.xshift;
|
||||
yshift += config.yshift;
|
||||
|
||||
/* check horizontal upscaling */
|
||||
if (xscale > 320)
|
||||
/* horizontal scaling */
|
||||
scale = (xscale > 360) ? 360 : xscale;
|
||||
if (scale > 320)
|
||||
{
|
||||
/* let VI do horizontal scaling */
|
||||
uint32 scale = (xscale <= 360) ? xscale : 360;
|
||||
for (i=0; i<6; i++)
|
||||
{
|
||||
tvmodes[i]->viXOrigin = (720 - (scale * 2)) / 2;
|
||||
tvmodes[i]->viWidth = scale * 2;
|
||||
}
|
||||
xscale -= (scale - 320);
|
||||
scale = 320;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -462,23 +465,16 @@ static void gxScale(void)
|
||||
}
|
||||
}
|
||||
|
||||
/* double resolution */
|
||||
if (config.render)
|
||||
{
|
||||
yscale *= 2;
|
||||
yshift *= 2;
|
||||
}
|
||||
square[6] = square[3] = scale + xshift;
|
||||
square[0] = square[9] = -scale + xshift;
|
||||
|
||||
/* update matrix */
|
||||
square[6] = square[3] = xscale + xshift;
|
||||
square[0] = square[9] = -xscale + xshift;
|
||||
square[4] = square[1] = yscale + yshift;
|
||||
square[7] = square[10] = -yscale + yshift;
|
||||
/* vertical scaling */
|
||||
scale = yscale;
|
||||
square[4] = square[1] = (scale + yshift) * (config.render ? 2:1);
|
||||
square[7] = square[10] = (yshift - scale) * (config.render ? 2:1);
|
||||
|
||||
/* update position matrix */
|
||||
draw_init();
|
||||
|
||||
/* vertex array have been modified */
|
||||
GX_InvVtxCache ();
|
||||
|
||||
}
|
||||
|
||||
/* Reinitialize GX */
|
||||
@ -487,14 +483,14 @@ void ogc_video__reset()
|
||||
GXRModeObj *rmode;
|
||||
Mtx p;
|
||||
|
||||
/* reinitialize GC/Wii PAL mode */
|
||||
/* reset TV type (50Hz/60Hz) */
|
||||
if ((config.tv_mode == 1) || ((config.tv_mode == 2) && vdp_pal)) gc_pal = 1;
|
||||
else gc_pal = 0;
|
||||
|
||||
/* reset scaler */
|
||||
gxScale();
|
||||
/* reset scaler (aspect ratio) */
|
||||
ogc_video__scale();
|
||||
|
||||
/* reinitialize current TV mode */
|
||||
/* reset TV mode */
|
||||
if (config.render == 2)
|
||||
{
|
||||
tvmodes[2]->viTVMode = VI_TVMODE_NTSC_PROG;
|
||||
@ -505,11 +501,9 @@ void ogc_video__reset()
|
||||
tvmodes[2]->viTVMode = tvmodes[0]->viTVMode & ~3;
|
||||
tvmodes[2]->xfbMode = VI_XFBMODE_DF;
|
||||
}
|
||||
|
||||
if (config.render) rmode = tvmodes[gc_pal*3 + 2];
|
||||
if (config.render) rmode = tvmodes[gc_pal*3 + 2];
|
||||
else rmode = tvmodes[gc_pal*3 + interlaced];
|
||||
|
||||
|
||||
VIDEO_Configure (rmode);
|
||||
VIDEO_ClearFrameBuffer(rmode, xfb[whichfb], COLOR_BLACK);
|
||||
VIDEO_Flush();
|
||||
@ -531,7 +525,7 @@ void ogc_video__reset()
|
||||
guOrtho(p, rmode->efbHeight/2, -(rmode->efbHeight/2), -(rmode->fbWidth/2), rmode->fbWidth/2, 100, 1000);
|
||||
GX_LoadProjectionMtx (p, GX_ORTHOGRAPHIC);
|
||||
|
||||
/* init NTSC filter */
|
||||
/* reset NTSC filter */
|
||||
if (config.ntsc == 1)
|
||||
{
|
||||
sms_setup = sms_ntsc_composite;
|
||||
@ -546,7 +540,7 @@ void ogc_video__reset()
|
||||
sms_ntsc_init( &sms_ntsc, &sms_setup );
|
||||
md_ntsc_init( &md_ntsc, &md_setup );
|
||||
}
|
||||
if (config.ntsc == 1)
|
||||
else if (config.ntsc == 3)
|
||||
{
|
||||
sms_setup = sms_ntsc_rgb;
|
||||
md_setup = md_ntsc_rgb;
|
||||
@ -592,11 +586,15 @@ void ogc_video__update()
|
||||
if (config.render && (interlaced || config.ntsc)) vheight *= 2;
|
||||
if (config.ntsc) vwidth = (reg[12]&1) ? MD_NTSC_OUT_WIDTH(vwidth) : SMS_NTSC_OUT_WIDTH(vwidth);
|
||||
|
||||
/* texels size must be multiple of 4 */
|
||||
vwidth = (vwidth / 4) * 4;
|
||||
vheight = (vheight / 4) * 4;
|
||||
|
||||
/* final offset */
|
||||
stride = bitmap.width - (vwidth >> 2);
|
||||
|
||||
/* reset GX scaler */
|
||||
gxScale();
|
||||
ogc_video__scale();
|
||||
|
||||
/* reinitialize texture */
|
||||
GX_InvalidateTexAll ();
|
||||
@ -670,7 +668,7 @@ void ogc_video__init(void)
|
||||
}
|
||||
|
||||
/* Get the current video mode then :
|
||||
- set menu video mode (fullscreen, 480i or 576i)
|
||||
- set menu video mode (480p, 480i or 576i)
|
||||
- set emulator rendering TV modes (PAL/MPAL/NTSC/EURGB60)
|
||||
*/
|
||||
vmode = VIDEO_GetPreferredMode(NULL);
|
||||
|
@ -24,10 +24,11 @@
|
||||
extern void ogc_video__init(void);
|
||||
extern void ogc_video__update(void);
|
||||
extern void ogc_video__reset(void);
|
||||
extern void ogc_video__scale(void);
|
||||
|
||||
extern u8 gc_pal;
|
||||
extern int gc_pal;
|
||||
extern unsigned int *xfb[2];
|
||||
extern int whichfb;
|
||||
extern int whichfb, xscale, yscale;
|
||||
extern GXRModeObj *tvmodes[6];
|
||||
extern GXRModeObj *vmode;
|
||||
|
||||
|
@ -22,7 +22,6 @@
|
||||
****************************************************************************************/
|
||||
|
||||
#include "shared.h"
|
||||
|
||||
#include "md_ntsc.h"
|
||||
#include "sms_ntsc.h"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user