gpgx now width-doubles to match height-doubled hi-res video

This commit is contained in:
zeromus 2017-02-18 16:09:08 -06:00
parent 6c046a5df9
commit 4e2892d852
1 changed files with 46 additions and 23 deletions

View File

@ -42,34 +42,57 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx
LibGPGX.gpgx_get_video(out gpwidth, out gpheight, out gppitch, ref src);
//in case we're receiving high vertical resolution video, we shall double the horizontal resolution to keep the same proportions
//(concept pioneered for snes)
bool dotDouble = (gpheight == 448); //todo: pal?
vwidth = gpwidth;
vheight = gpheight;
vheight = gpheight;
if (_settings.PadScreen320 && vwidth == 256)
vwidth = 320;
vwidth = 320;
int xpad = (vwidth - gpwidth) / 2;
int xpad2 = vwidth - gpwidth - xpad;
int xpad2 = vwidth - gpwidth - xpad;
if (dotDouble) vwidth *= 2;
if (vidbuff.Length < vwidth * vheight)
vidbuff = new int[vwidth * vheight];
int rinc = (gppitch / 4) - gpwidth;
fixed (int* pdst_ = &vidbuff[0])
{
int* pdst = pdst_;
int* psrc = (int*)src;
for (int j = 0; j < gpheight; j++)
{
for (int i = 0; i < xpad; i++)
*pdst++ = unchecked((int)0xff000000);
for (int i = 0; i < gpwidth; i++)
*pdst++ = *psrc++;// | unchecked((int)0xff000000);
for (int i = 0; i < xpad2; i++)
*pdst++ = unchecked((int)0xff000000);
psrc += rinc;
}
vidbuff = new int[vwidth * vheight];
int xskip = 1;
if (dotDouble)
xskip = 2;
for (int D = 0; D < xskip; D++)
{
int rinc = (gppitch / 4) - gpwidth;
fixed (int* pdst_ = &vidbuff[0])
{
int* pdst = pdst_ + D;
int* psrc = (int*)src;
for (int j = 0; j < gpheight; j++)
{
for (int i = 0; i < xpad; i++)
{
*pdst = unchecked((int)0xff000000);
pdst += xskip;
}
for (int i = 0; i < gpwidth; i++)
{
*pdst = *psrc++;// | unchecked((int)0xff000000);
pdst += xskip;
}
for (int i = 0; i < xpad2; i++)
{
*pdst = unchecked((int)0xff000000);
pdst += xskip;
}
psrc += rinc;
}
}
}
}