issue #647 fixed

+ formatting corrections
This commit is contained in:
rpahut 2014-02-24 14:23:33 +00:00
parent 2a4d02a9b8
commit d26ed7f39f
1 changed files with 178 additions and 176 deletions

View File

@ -127,24 +127,26 @@ static bool CreateDDraw()
HRESULT status; HRESULT status;
{ {
GUID FAR *guid; GUID FAR *guid;
if ((GetIsFullscreen() && directDrawModeFullscreen == DIRECTDRAW_MODE_SOFTWARE) || (!GetIsFullscreen() && directDrawModeWindowed == DIRECTDRAW_MODE_SOFTWARE)) // use fullscreenDesired to determine fullscreen state - this func is called before mode is
// applied, value returned from GetIsFullscreen() would be outdated
if ((fullscreenDesired && directDrawModeFullscreen == DIRECTDRAW_MODE_SOFTWARE) || (!fullscreenDesired && directDrawModeWindowed == DIRECTDRAW_MODE_SOFTWARE))
guid = (GUID FAR *)DDCREATE_EMULATIONONLY; guid = (GUID FAR *)DDCREATE_EMULATIONONLY;
else else
guid = NULL; guid = NULL;
LPDIRECTDRAW ddrawHandle; LPDIRECTDRAW ddrawHandle;
status = DirectDrawCreate(guid, &ddrawHandle, NULL); status = DirectDrawCreate(guid, &ddrawHandle, NULL);
if (status != DD_OK) if (status != DD_OK)
{ {
FCEU_printf("Error creating DirectDraw object.\n"); FCEU_printf("Error creating DirectDraw object.\n");
return false; return false;
} }
status = IDirectDraw_QueryInterface(ddrawHandle,IID_IDirectDraw7,(LPVOID *)&ddraw7Handle); status = IDirectDraw_QueryInterface(ddrawHandle,IID_IDirectDraw7,(LPVOID *)&ddraw7Handle);
IDirectDraw_Release(ddrawHandle); IDirectDraw_Release(ddrawHandle);
if (status != DD_OK) if (status != DD_OK)
{ {
FCEU_printf("Error querying interface.\n"); FCEU_printf("Error querying interface.\n");
return false; return false;
} }
} }
@ -170,7 +172,7 @@ static bool InitBPPStuff(bool fullscreen)
HRESULT status = IDirectDrawSurface7_GetPixelFormat(lpScreenSurface,&ddpix); HRESULT status = IDirectDrawSurface7_GetPixelFormat(lpScreenSurface,&ddpix);
if (status == DD_OK) { if (status == DD_OK) {
if (FL_TEST(ddpix.dwFlags, DDPF_RGB)) { if (FL_TEST(ddpix.dwFlags, DDPF_RGB)) {
bpp=ddpix.dwRGBBitCount; bpp=ddpix.dwRGBBitCount;
colorsBitMask[0]=ddpix.dwRBitMask; colorsBitMask[0]=ddpix.dwRBitMask;
colorsBitMask[1]=ddpix.dwGBitMask; colorsBitMask[1]=ddpix.dwGBitMask;
colorsBitMask[2]=ddpix.dwBBitMask; colorsBitMask[2]=ddpix.dwBBitMask;
@ -207,15 +209,15 @@ static bool InitBPPStuff(bool fullscreen)
status = IDirectDrawSurface7_SetPalette(lpScreenSurface, ddPaletteHandle); status = IDirectDrawSurface7_SetPalette(lpScreenSurface, ddPaletteHandle);
if (status == DD_OK) { if (status == DD_OK) {
return true; return true;
} }
else { else {
FCEU_printf("Error setting palette object.\n"); FCEU_printf("Error setting palette object.\n");
} }
} }
else { else {
FCEU_printf("Error creating palette object.\n"); FCEU_printf("Error creating palette object.\n");
} }
} }
} // if(supported bpp) } // if(supported bpp)
} }
else { else {
@ -363,25 +365,25 @@ static bool RecalcVideoModeParams()
vmode.dstRect.bottom = vmode.dstRect.top+FSettings.TotalScanlines()*vmode.yscale; vmode.dstRect.bottom = vmode.dstRect.top+FSettings.TotalScanlines()*vmode.yscale;
vmode.dstRect.left = (vmode.width-(VNSWID*vmode.xscale)) / 2; vmode.dstRect.left = (vmode.width-(VNSWID*vmode.xscale)) / 2;
vmode.dstRect.right = vmode.dstRect.left+VNSWID*vmode.xscale; vmode.dstRect.right = vmode.dstRect.left+VNSWID*vmode.xscale;
} }
// -Video Modes Tag- // -Video Modes Tag-
if((vmode.filter == FILTER_HQ2X || vmode.filter == FILTER_HQ3X) && vmode.bpp == 8) if((vmode.filter == FILTER_HQ2X || vmode.filter == FILTER_HQ3X) && vmode.bpp == 8)
{ {
// HQ2x/HQ3x requires 16bpp or 32bpp(best) // HQ2x/HQ3x requires 16bpp or 32bpp(best)
vmode.bpp = 32; vmode.bpp = 32;
} }
if(vmode.width<VNSWID) if(vmode.width<VNSWID)
{ {
FCEUD_PrintError("Horizontal resolution is too low."); FCEUD_PrintError("Horizontal resolution is too low.");
return false; return false;
} }
if(vmode.height<FSettings.TotalScanlines() && !FL_TEST(vmode.flags, VIDEOMODEFLAG_STRFS)) if(vmode.height<FSettings.TotalScanlines() && !FL_TEST(vmode.flags, VIDEOMODEFLAG_STRFS))
{ {
FCEUD_PrintError("Vertical resolution must not be less than the total number of drawn scanlines."); FCEUD_PrintError("Vertical resolution must not be less than the total number of drawn scanlines.");
return false; return false;
} }
return true; return true;
} }
@ -399,7 +401,7 @@ static bool SetVideoMode()
if(fullscreenDesired) { if(fullscreenDesired) {
if(vmodeIdx == 0) { if(vmodeIdx == 0) {
specmul = filterScaleMultiplier[videoModes[0].filter]; specmul = filterScaleMultiplier[videoModes[0].filter];
} }
HideFWindow(1); HideFWindow(1);
@ -416,17 +418,17 @@ static bool SetVideoMode()
surfaceDescOffscreen.dwWidth=256 * specmul; //videoModes[vmodeIdx].srcRect.right; surfaceDescOffscreen.dwWidth=256 * specmul; //videoModes[vmodeIdx].srcRect.right;
surfaceDescOffscreen.dwHeight=FSettings.TotalScanlines() * specmul; //videoModes[vmodeIdx].srcRect.bottom; surfaceDescOffscreen.dwHeight=FSettings.TotalScanlines() * specmul; //videoModes[vmodeIdx].srcRect.bottom;
if (directDrawModeFullscreen == DIRECTDRAW_MODE_SURFACE_IN_RAM) if (directDrawModeFullscreen == DIRECTDRAW_MODE_SURFACE_IN_RAM)
// create the buffer in system memory // create the buffer in system memory
FL_SET(surfaceDescOffscreen.ddsCaps.dwCaps, DDSCAPS_SYSTEMMEMORY); FL_SET(surfaceDescOffscreen.ddsCaps.dwCaps, DDSCAPS_SYSTEMMEMORY);
status = IDirectDraw7_CreateSurface(ddraw7Handle, &surfaceDescOffscreen, &lpOffscreenSurface, (IUnknown FAR*)NULL); status = IDirectDraw7_CreateSurface(ddraw7Handle, &surfaceDescOffscreen, &lpOffscreenSurface, (IUnknown FAR*)NULL);
} }
if(status == DD_OK) { if(status == DD_OK) {
OnWindowSizeChange(videoModes[vmodeIdx].width, videoModes[vmodeIdx].height); OnWindowSizeChange(videoModes[vmodeIdx].width, videoModes[vmodeIdx].height);
// create foreground surface // create foreground surface
memset(&surfaceDescScreen,0,sizeof(surfaceDescScreen)); memset(&surfaceDescScreen,0,sizeof(surfaceDescScreen));
surfaceDescScreen.dwSize = sizeof(surfaceDescScreen); surfaceDescScreen.dwSize = sizeof(surfaceDescScreen);
@ -435,29 +437,29 @@ static bool SetVideoMode()
surfaceDescScreen.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; surfaceDescScreen.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
if(idxFullscreenSyncMode == SYNCMODE_DOUBLEBUF) if(idxFullscreenSyncMode == SYNCMODE_DOUBLEBUF)
{ {
FL_SET(surfaceDescScreen.dwFlags, DDSD_BACKBUFFERCOUNT); FL_SET(surfaceDescScreen.dwFlags, DDSD_BACKBUFFERCOUNT);
surfaceDescScreen.dwBackBufferCount = 1; surfaceDescScreen.dwBackBufferCount = 1;
FL_SET(surfaceDescScreen.ddsCaps.dwCaps, DDSCAPS_COMPLEX | DDSCAPS_FLIP); FL_SET(surfaceDescScreen.ddsCaps.dwCaps, DDSCAPS_COMPLEX | DDSCAPS_FLIP);
} }
status = IDirectDraw7_CreateSurface ( ddraw7Handle, &surfaceDescScreen, &lpScreenSurface,(IUnknown FAR*)NULL); status = IDirectDraw7_CreateSurface ( ddraw7Handle, &surfaceDescScreen, &lpScreenSurface,(IUnknown FAR*)NULL);
if (status == DD_OK) { if (status == DD_OK) {
if(idxFullscreenSyncMode == SYNCMODE_DOUBLEBUF) if(idxFullscreenSyncMode == SYNCMODE_DOUBLEBUF)
{ {
DDSCAPS2 tmp; DDSCAPS2 tmp;
memset(&tmp,0,sizeof(tmp)); memset(&tmp,0,sizeof(tmp));
tmp.dwCaps=DDSCAPS_BACKBUFFER; tmp.dwCaps=DDSCAPS_BACKBUFFER;
status = IDirectDrawSurface7_GetAttachedSurface(lpScreenSurface,&tmp,&lpBackBuffer); status = IDirectDrawSurface7_GetAttachedSurface(lpScreenSurface,&tmp,&lpBackBuffer);
} }
if(status == DD_OK) { if(status == DD_OK) {
if(InitBPPStuff(fullscreenDesired!=0)) { if(InitBPPStuff(fullscreenDesired!=0)) {
dispModeWasChanged = true; dispModeWasChanged = true;
if (FL_TEST(eoptions, EO_HIDEMOUSE)) if (FL_TEST(eoptions, EO_HIDEMOUSE))
ShowCursorAbs(0); ShowCursorAbs(0);
fullscreenActual = true; // now in actual fullscreen mode fullscreenActual = true; // now in actual fullscreen mode
return true; return true;
@ -574,7 +576,7 @@ static void VerticalSync()
while((DD_OK == IDirectDraw7_GetVerticalBlankStatus(ddraw7Handle,&invb)) && !invb) while((DD_OK == IDirectDraw7_GetVerticalBlankStatus(ddraw7Handle,&invb)) && !invb)
Sleep(0); Sleep(0);
break; break;
} }
} }
} }
@ -607,7 +609,7 @@ static void BlitScreenWindow(unsigned char *XBuf)
if (status == DDERR_SURFACELOST) if (status == DDERR_SURFACELOST)
RestoreLostOffscreenSurface(); RestoreLostOffscreenSurface();
return; return;
} }
int pitch = surfaceDescOffscreen.lPitch; int pitch = surfaceDescOffscreen.lPitch;
unsigned char *dstOffscreenBuf = (unsigned char*)surfaceDescOffscreen.lpSurface; unsigned char *dstOffscreenBuf = (unsigned char*)surfaceDescOffscreen.lpSurface;
@ -615,7 +617,7 @@ static void BlitScreenWindow(unsigned char *XBuf)
if(wipeSurface) { if(wipeSurface) {
memset(dstOffscreenBuf, 0, pitch * surfaceDescOffscreen.dwHeight); memset(dstOffscreenBuf, 0, pitch * surfaceDescOffscreen.dwHeight);
wipeSurface = false; wipeSurface = false;
} }
Blit8ToHigh(XBuf + FSettings.FirstSLine * 256 + VNSCLIP, Blit8ToHigh(XBuf + FSettings.FirstSLine * 256 + VNSCLIP,
dstOffscreenBuf, dstOffscreenBuf,
VNSWID, VNSWID,
@ -640,7 +642,7 @@ static void BlitScreenWindow(unsigned char *XBuf)
RECT rectDst; RECT rectDst;
bool fillBorder = false; bool fillBorder = false;
if (FL_TEST(eoptions, EO_BESTFIT) && (activeRect.top || activeRect.left)) if (FL_TEST(eoptions, EO_BESTFIT) && (activeRect.top || activeRect.left))
{ {
// blit into activeRect // blit into activeRect
rectDst.top = rectWindow.top + activeRect.top; rectDst.top = rectWindow.top + activeRect.top;
rectDst.bottom = rectDst.top + activeRect.bottom - activeRect.top; rectDst.bottom = rectDst.top + activeRect.bottom - activeRect.top;
@ -668,38 +670,38 @@ static void BlitScreenWindow(unsigned char *XBuf)
if (fillBorder) { if (fillBorder) {
DDBLTFX blitfx = { sizeof(DDBLTFX) }; DDBLTFX blitfx = { sizeof(DDBLTFX) };
if (FL_TEST(eoptions, EO_BGCOLOR)) { if (FL_TEST(eoptions, EO_BGCOLOR)) {
// fill the surface using BG color from PPU // fill the surface using BG color from PPU
unsigned char r, g, b; unsigned char r, g, b;
FCEUD_GetPalette(0x80 | PALRAM[0], &r, &g, &b); FCEUD_GetPalette(0x80 | PALRAM[0], &r, &g, &b);
blitfx.dwFillColor = (r << 16) + (g << 8) + b; blitfx.dwFillColor = (r << 16) + (g << 8) + b;
} }
else { else {
blitfx.dwFillColor = 0; blitfx.dwFillColor = 0;
} }
if (activeRect.top) { if (activeRect.top) {
// upper border // upper border
rectDst = rectWindow; rectDst = rectWindow;
rectDst.bottom = rectWindow.top + activeRect.top; rectDst.bottom = rectWindow.top + activeRect.top;
IDirectDrawSurface7_Blt(lpScreenSurface, &rectDst, NULL, NULL, DDBLT_COLORFILL | DDBLT_ASYNC, &blitfx); IDirectDrawSurface7_Blt(lpScreenSurface, &rectDst, NULL, NULL, DDBLT_COLORFILL | DDBLT_ASYNC, &blitfx);
// lower border // lower border
rectDst.top += activeRect.bottom; rectDst.top += activeRect.bottom;
rectDst.bottom = rectWindow.bottom; rectDst.bottom = rectWindow.bottom;
IDirectDrawSurface7_Blt(lpScreenSurface, &rectDst, NULL, NULL, DDBLT_COLORFILL | DDBLT_ASYNC, &blitfx); IDirectDrawSurface7_Blt(lpScreenSurface, &rectDst, NULL, NULL, DDBLT_COLORFILL | DDBLT_ASYNC, &blitfx);
} }
if (activeRect.left) { if (activeRect.left) {
// left border // left border
rectDst = rectWindow; rectDst = rectWindow;
rectDst.right = rectWindow.left + activeRect.left; rectDst.right = rectWindow.left + activeRect.left;
IDirectDrawSurface7_Blt(lpScreenSurface, &rectDst, NULL, NULL, DDBLT_COLORFILL | DDBLT_ASYNC, &blitfx); IDirectDrawSurface7_Blt(lpScreenSurface, &rectDst, NULL, NULL, DDBLT_COLORFILL | DDBLT_ASYNC, &blitfx);
// right border // right border
rectDst.left += activeRect.right; rectDst.left += activeRect.right;
rectDst.right = rectWindow.right; rectDst.right = rectWindow.right;
IDirectDrawSurface7_Blt(lpScreenSurface, &rectDst, NULL, NULL, DDBLT_COLORFILL | DDBLT_ASYNC, &blitfx); IDirectDrawSurface7_Blt(lpScreenSurface, &rectDst, NULL, NULL, DDBLT_COLORFILL | DDBLT_ASYNC, &blitfx);
}
} }
} }
}
} }
// Renders XBuf into one of three buffers depending on current settings // Renders XBuf into one of three buffers depending on current settings
@ -734,7 +736,7 @@ static void BlitScreenFull(uint8 *XBuf)
DDSURFACEDESC2 offscreenDesc; DDSURFACEDESC2 offscreenDesc;
memset(&offscreenDesc,0,sizeof(offscreenDesc)); memset(&offscreenDesc,0,sizeof(offscreenDesc));
offscreenDesc.dwSize = sizeof(DDSURFACEDESC2); offscreenDesc.dwSize = sizeof(DDSURFACEDESC2);
HRESULT status = IDirectDrawSurface7_Lock(lpOffscreenSurface,NULL,&offscreenDesc, 0, NULL); HRESULT status = IDirectDrawSurface7_Lock(lpOffscreenSurface,NULL,&offscreenDesc, 0, NULL);
if(status != DD_OK) { if(status != DD_OK) {
if(status==DDERR_SURFACELOST) RestoreLostOffscreenSurface(); if(status==DDERR_SURFACELOST) RestoreLostOffscreenSurface();
return; return;
@ -764,7 +766,7 @@ static void BlitScreenFull(uint8 *XBuf)
if(status != DD_OK) { if(status != DD_OK) {
if(status == DDERR_SURFACELOST) RestoreLostScreenSurface(); if(status == DDERR_SURFACELOST) RestoreLostScreenSurface();
return; return;
} }
targetBuf = (char*)screenDesc.lpSurface; targetBuf = (char*)screenDesc.lpSurface;
pitch = screenDesc.lPitch; pitch = screenDesc.lPitch;
@ -775,13 +777,13 @@ static void BlitScreenFull(uint8 *XBuf)
memset(targetBuf, 0, pitch * lineCount); memset(targetBuf, 0, pitch * lineCount);
updateDDPalette = true; updateDDPalette = true;
wipeSurface = false; wipeSurface = false;
} }
if(!FL_TEST(videoModes[vmodeIdx].flags, VIDEOMODEFLAG_DXBLT)) { if(!FL_TEST(videoModes[vmodeIdx].flags, VIDEOMODEFLAG_DXBLT)) {
// -Video Modes Tag- // -Video Modes Tag-
if(videoModes[vmodeIdx].filter != FILTER_NONE) if(videoModes[vmodeIdx].filter != FILTER_NONE)
targetBuf += (videoModes[vmodeIdx].dstRect.left * (bpp/8)) + (videoModes[vmodeIdx].dstRect.top * pitch); targetBuf += (videoModes[vmodeIdx].dstRect.left * (bpp/8)) + (videoModes[vmodeIdx].dstRect.top * pitch);
else else
targetBuf += ((videoModes[vmodeIdx].width-VNSWID)/2)*(bpp/8)+(((videoModes[vmodeIdx].height-FSettings.TotalScanlines())/2))*pitch; targetBuf += ((videoModes[vmodeIdx].width-VNSWID)/2)*(bpp/8)+(((videoModes[vmodeIdx].height-FSettings.TotalScanlines())/2))*pitch;
} }
@ -831,10 +833,10 @@ static void BlitScreenFull(uint8 *XBuf)
{ {
RestoreLostOffscreenSurface(); RestoreLostOffscreenSurface();
RestoreLostScreenSurface(); RestoreLostScreenSurface();
}
return;
} }
return;
} }
}
if(fillBorder) { if(fillBorder) {
DDBLTFX blitfx = { sizeof(DDBLTFX) }; DDBLTFX blitfx = { sizeof(DDBLTFX) };
@ -869,9 +871,9 @@ static void BlitScreenFull(uint8 *XBuf)
borderRect.left += activeRect.right; borderRect.left += activeRect.right;
borderRect.right = displayRect.right; borderRect.right = displayRect.right;
IDirectDrawSurface7_Blt(lpScreenSurface, &borderRect, NULL, NULL, DDBLT_COLORFILL | DDBLT_ASYNC, &blitfx); IDirectDrawSurface7_Blt(lpScreenSurface, &borderRect, NULL, NULL, DDBLT_COLORFILL | DDBLT_ASYNC, &blitfx);
}
} }
} }
}
else { else {
IDirectDrawSurface7_Unlock(targetScreenSurface, NULL); IDirectDrawSurface7_Unlock(targetScreenSurface, NULL);
} }
@ -895,24 +897,24 @@ void ShutdownVideoDriver(void)
IDirectDraw7_RestoreDisplayMode(ddraw7Handle); IDirectDraw7_RestoreDisplayMode(ddraw7Handle);
dispModeWasChanged = false; dispModeWasChanged = false;
} }
} }
if(ddPaletteHandle) { if(ddPaletteHandle) {
ddPaletteHandle->Release(); ddPaletteHandle->Release();
ddPaletteHandle = NULL; ddPaletteHandle = NULL;
} }
if(lpOffscreenSurface) { if(lpOffscreenSurface) {
lpOffscreenSurface->Release(); lpOffscreenSurface->Release();
lpOffscreenSurface = NULL; lpOffscreenSurface = NULL;
} }
if(lpScreenSurface) { if(lpScreenSurface) {
lpScreenSurface->Release(); lpScreenSurface->Release();
lpScreenSurface = NULL; lpScreenSurface = NULL;
} }
if(ddClipperHandle) { if(ddClipperHandle) {
ddClipperHandle->Release(); ddClipperHandle->Release();
ddClipperHandle = NULL; ddClipperHandle = NULL;
} }
if(ddraw7Handle) { if(ddraw7Handle) {
ddraw7Handle->Release(); ddraw7Handle->Release();
ddraw7Handle = NULL; ddraw7Handle = NULL;
@ -960,117 +962,117 @@ static BOOL CALLBACK VideoConCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARA
switch(uMsg) switch(uMsg)
{ {
case WM_INITDIALOG: case WM_INITDIALOG:
{
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_BPP,CB_ADDSTRING,0,(LPARAM)(LPSTR)"8");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_BPP,CB_ADDSTRING,0,(LPARAM)(LPSTR)"16");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_BPP,CB_ADDSTRING,0,(LPARAM)(LPSTR)"24");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_BPP,CB_ADDSTRING,0,(LPARAM)(LPSTR)"32");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_BPP,CB_SETCURSEL,(videoModes[vmodeIdx].bpp/8)-1,(LPARAM)(LPSTR)0);
SetDlgItemInt(hwndDlg,IDC_VIDEOCONFIG_XRES,videoModes[vmodeIdx].width,0);
SetDlgItemInt(hwndDlg,IDC_VIDEOCONFIG_YRES,videoModes[vmodeIdx].height,0);
//SetDlgItemInt(hwndDlg,IDC_VIDEOCONFIG_XSCALE,videoModes[vmodeIdx].xscale,0);
//SetDlgItemInt(hwndDlg,IDC_VIDEOCONFIG_YSCALE,videoModes[vmodeIdx].yscale,0);
//CheckRadioButton(hwndDlg,IDC_RADIO_SCALE,IDC_RADIO_STRETCH,FL_TEST(videoModes[vmodeIdx].flags, VIDEOMODEFLAG_STRFS)?IDC_RADIO_STRETCH:IDC_RADIO_SCALE);
// -Video Modes Tag-
char *str[]={"<none>","hq2x","Scale2x","NTSC 2x","hq3x","Scale3x"};
int x;
for(x=0;x<6;x++)
{ {
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SCALER_FS,CB_ADDSTRING,0,(LPARAM)(LPSTR)str[x]); SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_BPP,CB_ADDSTRING,0,(LPARAM)(LPSTR)"8");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SCALER_WIN,CB_ADDSTRING,0,(LPARAM)(LPSTR)str[x]); SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_BPP,CB_ADDSTRING,0,(LPARAM)(LPSTR)"16");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_BPP,CB_ADDSTRING,0,(LPARAM)(LPSTR)"24");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_BPP,CB_ADDSTRING,0,(LPARAM)(LPSTR)"32");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_BPP,CB_SETCURSEL,(videoModes[vmodeIdx].bpp/8)-1,(LPARAM)(LPSTR)0);
SetDlgItemInt(hwndDlg,IDC_VIDEOCONFIG_XRES,videoModes[vmodeIdx].width,0);
SetDlgItemInt(hwndDlg,IDC_VIDEOCONFIG_YRES,videoModes[vmodeIdx].height,0);
//SetDlgItemInt(hwndDlg,IDC_VIDEOCONFIG_XSCALE,videoModes[vmodeIdx].xscale,0);
//SetDlgItemInt(hwndDlg,IDC_VIDEOCONFIG_YSCALE,videoModes[vmodeIdx].yscale,0);
//CheckRadioButton(hwndDlg,IDC_RADIO_SCALE,IDC_RADIO_STRETCH,FL_TEST(videoModes[vmodeIdx].flags, VIDEOMODEFLAG_STRFS)?IDC_RADIO_STRETCH:IDC_RADIO_SCALE);
// -Video Modes Tag-
char *str[]={"<none>","hq2x","Scale2x","NTSC 2x","hq3x","Scale3x"};
int x;
for(x=0;x<6;x++)
{
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SCALER_FS,CB_ADDSTRING,0,(LPARAM)(LPSTR)str[x]);
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SCALER_WIN,CB_ADDSTRING,0,(LPARAM)(LPSTR)str[x]);
}
SendDlgItemMessage(hwndDlg, IDC_VIDEOCONFIG_SCALER_FS, CB_SETCURSEL, videoModes[vmodeIdx].filter, (LPARAM)(LPSTR)0);
SendDlgItemMessage(hwndDlg, IDC_VIDEOCONFIG_SCALER_WIN, CB_SETCURSEL, idxFilterModeWindowed, (LPARAM)(LPSTR)0);
// Direct Draw modes
SendDlgItemMessage(hwndDlg, IDC_VIDEOCONFIG_DIRECTDRAW_WIN, CB_ADDSTRING, 0, (LPARAM)(LPSTR)"No hardware acceleration");
SendDlgItemMessage(hwndDlg, IDC_VIDEOCONFIG_DIRECTDRAW_WIN, CB_ADDSTRING, 0, (LPARAM)(LPSTR)"Create Surface in RAM");
SendDlgItemMessage(hwndDlg, IDC_VIDEOCONFIG_DIRECTDRAW_WIN, CB_ADDSTRING, 0, (LPARAM)(LPSTR)"Hardware acceleration");
SendDlgItemMessage(hwndDlg, IDC_VIDEOCONFIG_DIRECTDRAW_WIN, CB_SETCURSEL, directDrawModeWindowed, (LPARAM)(LPSTR)0);
SendDlgItemMessage(hwndDlg, IDC_VIDEOCONFIG_DIRECTDRAW_FS, CB_ADDSTRING, 0, (LPARAM)(LPSTR)"No hardware acceleration");
SendDlgItemMessage(hwndDlg, IDC_VIDEOCONFIG_DIRECTDRAW_FS, CB_ADDSTRING, 0, (LPARAM)(LPSTR)"Create Surface in RAM");
SendDlgItemMessage(hwndDlg, IDC_VIDEOCONFIG_DIRECTDRAW_FS, CB_ADDSTRING, 0, (LPARAM)(LPSTR)"Hardware acceleration");
SendDlgItemMessage(hwndDlg, IDC_VIDEOCONFIG_DIRECTDRAW_FS, CB_SETCURSEL, directDrawModeFullscreen, (LPARAM)(LPSTR)0);
if(FL_TEST(eoptions, EO_FSAFTERLOAD))
CheckDlgButton(hwndDlg,IDC_VIDEOCONFIG_AUTO_FS,BST_CHECKED);
if(FL_TEST(eoptions, EO_HIDEMOUSE))
CheckDlgButton(hwndDlg,IDC_VIDEOCONFIG_HIDEMOUSE,BST_CHECKED);
if(FL_TEST(eoptions, EO_CLIPSIDES))
CheckDlgButton(hwndDlg,IDC_VIDEOCONFIG_CLIPSIDES,BST_CHECKED);
if(FL_TEST(eoptions, EO_BESTFIT))
CheckDlgButton(hwndDlg, IDC_VIDEOCONFIG_BESTFIT, BST_CHECKED);
if(FL_TEST(eoptions, EO_BGCOLOR))
CheckDlgButton(hwndDlg,IDC_VIDEOCONFIG_CONSOLE_BGCOLOR,BST_CHECKED);
if(FL_TEST(eoptions, EO_SQUAREPIXELS))
CheckDlgButton(hwndDlg, IDC_VIDEOCONFIG_SQUARE_PIXELS, BST_CHECKED);
if(FL_TEST(eoptions, EO_TVASPECT))
CheckDlgButton(hwndDlg, IDC_VIDEOCONFIG_TVASPECT, BST_CHECKED);
if(FL_TEST(eoptions, EO_FORCEISCALE))
CheckDlgButton(hwndDlg,IDC_FORCE_INT_VIDEO_SCALARS,BST_CHECKED);
if(FL_TEST(eoptions, EO_FORCEASPECT))
CheckDlgButton(hwndDlg,IDC_FORCE_ASPECT_CORRECTION,BST_CHECKED);
SetDlgItemInt(hwndDlg,IDC_SCANLINE_FIRST_NTSC,srendlinen,0);
SetDlgItemInt(hwndDlg,IDC_SCANLINE_LAST_NTSC,erendlinen,0);
SetDlgItemInt(hwndDlg,IDC_SCANLINE_FIRST_PAL,srendlinep,0);
SetDlgItemInt(hwndDlg,IDC_SCANLINE_LAST_PAL,erendlinep,0);
SetDlgItemDouble(hwndDlg, IDC_WINSIZE_MUL_X, winsizemulx);
SetDlgItemDouble(hwndDlg, IDC_WINSIZE_MUL_Y, winsizemuly);
SetDlgItemDouble(hwndDlg, IDC_TVASPECT_X, tvAspectX);
SetDlgItemDouble(hwndDlg, IDC_TVASPECT_Y, tvAspectY);
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_WIN,CB_ADDSTRING,0,(LPARAM)(LPSTR)"<none>");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_FS,CB_ADDSTRING,0,(LPARAM)(LPSTR)"<none>");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_WIN,CB_ADDSTRING,0,(LPARAM)(LPSTR)"Wait for VBlank");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_WIN,CB_ADDSTRING,0,(LPARAM)(LPSTR)"Lazy wait for VBlank");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_FS,CB_ADDSTRING,0,(LPARAM)(LPSTR)"Wait for VBlank");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_FS,CB_ADDSTRING,0,(LPARAM)(LPSTR)"Lazy wait for VBlank");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_FS,CB_ADDSTRING,0,(LPARAM)(LPSTR)"Double Buffering");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_WIN,CB_SETCURSEL,idxWindowedSyncMode,(LPARAM)(LPSTR)0);
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_FS,CB_SETCURSEL,idxFullscreenSyncMode,(LPARAM)(LPSTR)0);
if(FL_TEST(eoptions, EO_NOSPRLIM))
CheckDlgButton(hwndDlg,IDC_VIDEOCONFIG_NO8LIM,BST_CHECKED);
char buf[1024] = "Full Screen";
KeyCombo c = GetCommandKeyCombo(EMUCMD_MISC_TOGGLEFULLSCREEN);
if (!c.isEmpty())
{
strcat(buf, " (");
strcat(buf, GetKeyComboName(c));
if (GetIsFullscreenOnDoubleclick())
strcat(buf, " or double-click)");
else
strcat(buf, ")");
} else if (GetIsFullscreenOnDoubleclick())
{
strcat(buf, " (double-click anywhere)");
}
SetDlgItemText(hwndDlg, IDC_VIDEOCONFIG_FS, buf);
break;
} }
SendDlgItemMessage(hwndDlg, IDC_VIDEOCONFIG_SCALER_FS, CB_SETCURSEL, videoModes[vmodeIdx].filter, (LPARAM)(LPSTR)0);
SendDlgItemMessage(hwndDlg, IDC_VIDEOCONFIG_SCALER_WIN, CB_SETCURSEL, idxFilterModeWindowed, (LPARAM)(LPSTR)0);
// Direct Draw modes
SendDlgItemMessage(hwndDlg, IDC_VIDEOCONFIG_DIRECTDRAW_WIN, CB_ADDSTRING, 0, (LPARAM)(LPSTR)"No hardware acceleration");
SendDlgItemMessage(hwndDlg, IDC_VIDEOCONFIG_DIRECTDRAW_WIN, CB_ADDSTRING, 0, (LPARAM)(LPSTR)"Create Surface in RAM");
SendDlgItemMessage(hwndDlg, IDC_VIDEOCONFIG_DIRECTDRAW_WIN, CB_ADDSTRING, 0, (LPARAM)(LPSTR)"Hardware acceleration");
SendDlgItemMessage(hwndDlg, IDC_VIDEOCONFIG_DIRECTDRAW_WIN, CB_SETCURSEL, directDrawModeWindowed, (LPARAM)(LPSTR)0);
SendDlgItemMessage(hwndDlg, IDC_VIDEOCONFIG_DIRECTDRAW_FS, CB_ADDSTRING, 0, (LPARAM)(LPSTR)"No hardware acceleration");
SendDlgItemMessage(hwndDlg, IDC_VIDEOCONFIG_DIRECTDRAW_FS, CB_ADDSTRING, 0, (LPARAM)(LPSTR)"Create Surface in RAM");
SendDlgItemMessage(hwndDlg, IDC_VIDEOCONFIG_DIRECTDRAW_FS, CB_ADDSTRING, 0, (LPARAM)(LPSTR)"Hardware acceleration");
SendDlgItemMessage(hwndDlg, IDC_VIDEOCONFIG_DIRECTDRAW_FS, CB_SETCURSEL, directDrawModeFullscreen, (LPARAM)(LPSTR)0);
if(FL_TEST(eoptions, EO_FSAFTERLOAD))
CheckDlgButton(hwndDlg,IDC_VIDEOCONFIG_AUTO_FS,BST_CHECKED);
if(FL_TEST(eoptions, EO_HIDEMOUSE))
CheckDlgButton(hwndDlg,IDC_VIDEOCONFIG_HIDEMOUSE,BST_CHECKED);
if(FL_TEST(eoptions, EO_CLIPSIDES))
CheckDlgButton(hwndDlg,IDC_VIDEOCONFIG_CLIPSIDES,BST_CHECKED);
if(FL_TEST(eoptions, EO_BESTFIT))
CheckDlgButton(hwndDlg, IDC_VIDEOCONFIG_BESTFIT, BST_CHECKED);
if(FL_TEST(eoptions, EO_BGCOLOR))
CheckDlgButton(hwndDlg,IDC_VIDEOCONFIG_CONSOLE_BGCOLOR,BST_CHECKED);
if(FL_TEST(eoptions, EO_SQUAREPIXELS))
CheckDlgButton(hwndDlg, IDC_VIDEOCONFIG_SQUARE_PIXELS, BST_CHECKED);
if(FL_TEST(eoptions, EO_TVASPECT))
CheckDlgButton(hwndDlg, IDC_VIDEOCONFIG_TVASPECT, BST_CHECKED);
if(FL_TEST(eoptions, EO_FORCEISCALE))
CheckDlgButton(hwndDlg,IDC_FORCE_INT_VIDEO_SCALARS,BST_CHECKED);
if(FL_TEST(eoptions, EO_FORCEASPECT))
CheckDlgButton(hwndDlg,IDC_FORCE_ASPECT_CORRECTION,BST_CHECKED);
SetDlgItemInt(hwndDlg,IDC_SCANLINE_FIRST_NTSC,srendlinen,0);
SetDlgItemInt(hwndDlg,IDC_SCANLINE_LAST_NTSC,erendlinen,0);
SetDlgItemInt(hwndDlg,IDC_SCANLINE_FIRST_PAL,srendlinep,0);
SetDlgItemInt(hwndDlg,IDC_SCANLINE_LAST_PAL,erendlinep,0);
SetDlgItemDouble(hwndDlg, IDC_WINSIZE_MUL_X, winsizemulx);
SetDlgItemDouble(hwndDlg, IDC_WINSIZE_MUL_Y, winsizemuly);
SetDlgItemDouble(hwndDlg, IDC_TVASPECT_X, tvAspectX);
SetDlgItemDouble(hwndDlg, IDC_TVASPECT_Y, tvAspectY);
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_WIN,CB_ADDSTRING,0,(LPARAM)(LPSTR)"<none>");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_FS,CB_ADDSTRING,0,(LPARAM)(LPSTR)"<none>");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_WIN,CB_ADDSTRING,0,(LPARAM)(LPSTR)"Wait for VBlank");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_WIN,CB_ADDSTRING,0,(LPARAM)(LPSTR)"Lazy wait for VBlank");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_FS,CB_ADDSTRING,0,(LPARAM)(LPSTR)"Wait for VBlank");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_FS,CB_ADDSTRING,0,(LPARAM)(LPSTR)"Lazy wait for VBlank");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_FS,CB_ADDSTRING,0,(LPARAM)(LPSTR)"Double Buffering");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_WIN,CB_SETCURSEL,idxWindowedSyncMode,(LPARAM)(LPSTR)0);
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_FS,CB_SETCURSEL,idxFullscreenSyncMode,(LPARAM)(LPSTR)0);
if(FL_TEST(eoptions, EO_NOSPRLIM))
CheckDlgButton(hwndDlg,IDC_VIDEOCONFIG_NO8LIM,BST_CHECKED);
char buf[1024] = "Full Screen";
KeyCombo c = GetCommandKeyCombo(EMUCMD_MISC_TOGGLEFULLSCREEN);
if (!c.isEmpty())
{
strcat(buf, " (");
strcat(buf, GetKeyComboName(c));
if (GetIsFullscreenOnDoubleclick())
strcat(buf, " or double-click)");
else
strcat(buf, ")");
} else if (GetIsFullscreenOnDoubleclick())
{
strcat(buf, " (double-click anywhere)");
}
SetDlgItemText(hwndDlg, IDC_VIDEOCONFIG_FS, buf);
break;
}
case WM_CLOSE: case WM_CLOSE:
case WM_QUIT: goto gornk; case WM_QUIT: goto gornk;
case WM_COMMAND: case WM_COMMAND:
@ -1229,7 +1231,7 @@ void FCEUD_BlitScreen(uint8 *XBuf)
void FCEUD_VideoChanged() void FCEUD_VideoChanged()
{ {
changerecursive = 1; changerecursive = 1;
if(!SetVideoMode()) { if(!SetVideoMode()) {
SetIsFullscreen(false); SetIsFullscreen(false);
SetVideoMode(); SetVideoMode();