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