Changed overlay support to ifdef

This commit is contained in:
pagefault
2001-06-16 01:06:03 +00:00
parent 0b59ad2fa0
commit dc160a5bb9
5 changed files with 89 additions and 191 deletions

View File

@@ -176,7 +176,6 @@ EXTSYM numlockptr
%ifdef __WIN32__ %ifdef __WIN32__
EXTSYM CheckPriority EXTSYM CheckPriority
EXTSYM CheckAlwaysOnTop EXTSYM CheckAlwaysOnTop
EXTSYM initDirectDraw
%endif %endif
NEWSYM GuiAsmStart NEWSYM GuiAsmStart
@@ -586,8 +585,6 @@ NEWSYM TripleBufferWin, db 0
NEWSYM ExclusiveSound, db 0 NEWSYM ExclusiveSound, db 0
NEWSYM OverlayEnabled, db 0
GUIsave equ $-GUIRAdd GUIsave equ $-GUIRAdd
NEWSYM CombinDataGlob, times 3300 db 0 ; 20-name, 42-combo, 2-key#, 1-P#, 1-ff NEWSYM CombinDataGlob, times 3300 db 0 ; 20-name, 42-combo, 2-key#, 1-P#, 1-ff
@@ -605,9 +602,9 @@ ModemOKStat db 0 ; OK is detected on modem status
; LOAD STAT INPT OPT VID SND CHT NET GMKEY GUIOP ABT RSET SRC STCN MOVE CMBO ADDO ; LOAD STAT INPT OPT VID SND CHT NET GMKEY GUIOP ABT RSET SRC STCN MOVE CMBO ADDO
GUIwinposxo dd 0,5 ,60 ,30 ,55 ,50 ,65 ,5 ,30 ,20 ,10 ,80 ,65 ,20 ,70 ,50 ,3 ,50 GUIwinposxo dd 0,5 ,60 ,30 ,55 ,50 ,65 ,5 ,30 ,20 ,10 ,80 ,65 ,20 ,70 ,50 ,3 ,50
GUIwinposyo dd 0,20 ,70 ,30 ,20 ,20 ,22 ,20 ,30 ,20 ,20 ,50 ,60 ,30 ,65 ,50 ,22 ,60 GUIwinposyo dd 0,20 ,70 ,30 ,20 ,20 ,26 ,20 ,30 ,20 ,20 ,50 ,60 ,30 ,65 ,50 ,22 ,60
GUIwinsizex dd 0,244 ,126 ,189 ,167 ,170 ,148 ,244 ,8*16,13*16,240 ,7*16,9*16,8*16,9*16,140 ,250 ,160 GUIwinsizex dd 0,244 ,126 ,189 ,167 ,170 ,148 ,244 ,8*16,13*16,240 ,7*16,9*16,8*16,9*16,140 ,250 ,160
GUIwinsizey dd 0,190 ,3*16,166 ,190 ,196 ,184 ,191 ,40 ,189 ,192 ,98 ,42 ,40 ,42 ,70 ,190 ,60 GUIwinsizey dd 0,190 ,3*16,166 ,190 ,192 ,178 ,191 ,40 ,189 ,192 ,98 ,42 ,40 ,42 ,70 ,190 ,60
GUIwinptr db 0 GUIwinptr db 0
GUItextcolor db 0,0,0,0,0 GUItextcolor db 0,0,0,0,0

View File

@@ -818,13 +818,6 @@ GUIOptionKeys:
xor byte[vsyncon],1 xor byte[vsyncon],1
mov al,[vsyncon] mov al,[vsyncon]
mov [cfgvsync],al mov [cfgvsync],al
%ifdef __WIN32__
cmp byte[OverlayEnabled],1
jne .novsync
pushad
call initDirectDraw
popad
%endif
.novsync .novsync
%endif %endif
cmp dh,'M' cmp dh,'M'
@@ -895,14 +888,11 @@ GUIOptionKeys:
jne .nosavepath jne .nosavepath
xor byte[DontSavePath],1 xor byte[DontSavePath],1
.nosavepath .nosavepath
cmp dh,'I'
jne .nospcdisable
xor byte[SPCDisable],1
.nospcdisable
%ifdef __WIN32__ %ifdef __WIN32__
cmp dh,'Y'
jne .nooverlay
xor byte[OverlayEnabled],1
pushad
call initDirectDraw
popad
.nooverlay
cmp dh,'S' cmp dh,'S'
jne .noalttimer jne .noalttimer
xor byte[AlternateTimer],1 xor byte[AlternateTimer],1
@@ -1036,10 +1026,6 @@ GUISoundKeys:
xor byte[ExclusiveSound],1 xor byte[ExclusiveSound],1
.noexclusivesound .noexclusivesound
%endif %endif
cmp dh,'D'
jne .nospcdisable
xor byte[SPCDisable],1
.nospcdisable
ret ret
.sampratenext db 1,4,5,6,2,3,0,0,0,0 .sampratenext db 1,4,5,6,2,3,0,0,0,0

View File

@@ -994,24 +994,6 @@ GUIWinClicked:
%%noclick %%noclick
%endmacro %endmacro
%ifdef __WIN32__
%macro GUIClickCButtonov 3
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,1
pushad
call initDirectDraw
popad
%%noclick
%endmacro
%endif
%macro GUIClickCButtonat 3 %macro GUIClickCButtonat 3
cmp eax,%1+1 cmp eax,%1+1
jl %%noclick jl %%noclick
@@ -1151,32 +1133,6 @@ GUIWinClicked:
%%noclick %%noclick
%endmacro %endmacro
%ifndef __LINUX__
%macro GUIClickCButton2ov 5
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,%5
mov al,%3
mov %4,al
%ifdef __WIN32__
cmp byte[OverlayEnabled],1
jne %%noinit
pushad
call initDirectDraw
popad
%%noinit
%endif
ret
%%noclick
%endmacro
%endif
%macro GUIClickCButton3 5 %macro GUIClickCButton3 5
cmp eax,%1+1 cmp eax,%1+1
jl %%noclick jl %%noclick
@@ -2144,7 +2100,7 @@ DisplayGUIOptionClick:
GUIClickCButton2 11,36,byte[newengen],byte[cfgnewgfx],1 GUIClickCButton2 11,36,byte[newengen],byte[cfgnewgfx],1
.invalidng .invalidng
%ifndef __LINUX__ %ifndef __LINUX__
GUIClickCButton2ov 11,46,byte[vsyncon],byte[cfgvsync],1 GUIClickCButton2 11,46,byte[vsyncon],byte[cfgvsync],1
%endif %endif
GUIClickCButton2 11,56,byte[FPUCopy],byte[cfgcopymethod],2 GUIClickCButton2 11,56,byte[FPUCopy],byte[cfgcopymethod],2
GUIClickCButtonM 11,66,byte[pl12s34] GUIClickCButtonM 11,66,byte[pl12s34]
@@ -2163,8 +2119,8 @@ DisplayGUIOptionClick:
GUIClickCButton 11,146,byte[LatestSave] GUIClickCButton 11,146,byte[LatestSave]
GUIClickCButton 11,156,byte[AutoState] GUIClickCButton 11,156,byte[AutoState]
GUIClickCButton 11,166,byte[DontSavePath] GUIClickCButton 11,166,byte[DontSavePath]
GUIClickCButton 11,176,byte[SPCDisable]
%ifdef __WIN32__ %ifdef __WIN32__
GUIClickCButtonov 11,176,byte[OverlayEnabled]
GUIClickCButtonat 11,186,byte[AlternateTimer] GUIClickCButtonat 11,186,byte[AlternateTimer]
%endif %endif
; Frameskip = 0 ; Frameskip = 0
@@ -2296,7 +2252,6 @@ DisplayGUISoundClick:
%ifdef __WIN32__ %ifdef __WIN32__
GUIClickCButton 11,171,byte[ExclusiveSound] GUIClickCButton 11,171,byte[ExclusiveSound]
%endif %endif
GUIClickCButton 11,181,byte[SPCDisable]
cmp eax,15 cmp eax,15
jl near .nosrate jl near .nosrate
cmp edx,61 cmp edx,61

View File

@@ -1374,7 +1374,7 @@ DisplayGUIOption:
GUIOuttextwin2u 4,26,151,GUIOptionTextH,9 GUIOuttextwin2u 4,26,151,GUIOptionTextH,9
GUIOuttextwin2u 4,26,161,GUIOptionTextI,15 GUIOuttextwin2u 4,26,161,GUIOptionTextI,15
GUIOuttextwin2u 4,26,171,GUIOptionTextJ,0 GUIOuttextwin2u 4,26,171,GUIOptionTextJ,0
GUIOuttextwin2u 4,26,181,GUIOptionTextK,6 GUIOuttextwin2u 4,26,181,GUIOptionTextK,1
add byte[GUItextcolor],15 add byte[GUItextcolor],15
GUIOuttextwin2 4,5,15,[GUITemp] GUIOuttextwin2 4,5,15,[GUITemp]
GUIOuttextwin2 4,25,30,GUIOptionText2 GUIOuttextwin2 4,25,30,GUIOptionText2
@@ -1505,7 +1505,7 @@ DisplayGUIOption:
.nocheckbox13 .nocheckbox13
GUIDisplayIconWin 4,11,166,[GUITemp] GUIDisplayIconWin 4,11,166,[GUITemp]
mov dword[GUITemp],GUIIconDataCheckBoxUC mov dword[GUITemp],GUIIconDataCheckBoxUC
cmp byte[OverlayEnabled],0 cmp byte[SPCDisable],0
je .nocheckbox14 je .nocheckbox14
mov dword[GUITemp],GUIIconDataCheckBoxC mov dword[GUITemp],GUIIconDataCheckBoxC
.nocheckbox14 .nocheckbox14
@@ -1580,7 +1580,7 @@ GUIOptionTextG db 'OLD GFX MODE 2',0
GUIOptionTextH db 'START AT LATEST SAVE',0 GUIOptionTextH db 'START AT LATEST SAVE',0
GUIOptionTextI db 'AUTO STATE SAVE/LOAD',0 GUIOptionTextI db 'AUTO STATE SAVE/LOAD',0
GUIOptionTextJ db 'DON',39,'T SAVE CURRENT PATH',0 GUIOptionTextJ db 'DON',39,'T SAVE CURRENT PATH',0
GUIOptionTextK db 'OVERLAY SUPPORT',0 GUIOptionTextK db 'DISABLE SOUND CPU EMU',0
GUIOptionTextL db 'USE ALTERNATE TIMER',0 GUIOptionTextL db 'USE ALTERNATE TIMER',0
GUIOptionText8 db '-',0 GUIOptionText8 db '-',0
GUIOptionText9 db '+',0 GUIOptionText9 db '+',0
@@ -2142,7 +2142,6 @@ DisplayGUISound:
GUIOuttextwin2u 6,26,166,GUISoundTextM,0 GUIOuttextwin2u 6,26,166,GUISoundTextM,0
%ifdef __WIN32__ %ifdef __WIN32__
GUIOuttextwin2u 6,26,176,GUISoundTextN,1 GUIOuttextwin2u 6,26,176,GUISoundTextN,1
GUIOuttextwin2u 6,26,186,GUISoundTextO,0
%endif %endif
add byte[GUItextcolor],15 add byte[GUItextcolor],15
GUIOuttextwin2 6,25,25,GUISoundText1 GUIOuttextwin2 6,25,25,GUISoundText1
@@ -2170,7 +2169,6 @@ DisplayGUISound:
GUIOuttextwin2 6,25,165,GUISoundTextM GUIOuttextwin2 6,25,165,GUISoundTextM
%ifdef __WIN32__ %ifdef __WIN32__
GUIOuttextwin2 6,25,175,GUISoundTextN GUIOuttextwin2 6,25,175,GUISoundTextN
GUIOuttextwin2 6,25,185,GUISoundTextO
%endif %endif
mov al,[GUIWincol] mov al,[GUIWincol]
mov byte[GUItextcolor],al mov byte[GUItextcolor],al
@@ -2270,12 +2268,6 @@ DisplayGUISound:
mov dword[GUITemp],GUIIconDataCheckBoxC mov dword[GUITemp],GUIIconDataCheckBoxC
.nocheckbox9 .nocheckbox9
GUIDisplayIconWin 6,11,171,[GUITemp] GUIDisplayIconWin 6,11,171,[GUITemp]
mov dword[GUITemp],GUIIconDataCheckBoxUC
cmp byte[OverlayEnabled],0
je .nocheckbox10
mov dword[GUITemp],GUIIconDataCheckBoxC
.nocheckbox10
GUIDisplayIconWin 6,11,181,[GUITemp]
%endif %endif
DrawGUIWinBox 6,15,61,69,69,167 DrawGUIWinBox 6,15,61,69,69,167
mov dword[GUITemp],GUISoundText7 mov dword[GUITemp],GUISoundText7
@@ -2368,7 +2360,6 @@ GUISoundTextK db 'LOW PASS FILTER',0
GUISoundTextL db 'SOUND BUFFERING',0 GUISoundTextL db 'SOUND BUFFERING',0
GUISoundTextM db 'CUBIC SPLINE INTERP',0 GUISoundTextM db 'CUBIC SPLINE INTERP',0
GUISoundTextN db 'EXCLUSIVE MODE',0 GUISoundTextN db 'EXCLUSIVE MODE',0
GUISoundTextO db 'DISABLE SPC EMU',0
DisplayGUICheatConv: DisplayGUICheatConv:
mov eax,[ccheatnpos] mov eax,[ccheatnpos]

View File

@@ -15,6 +15,8 @@
//along with this program; if not, write to the Free Software //along with this program; if not, write to the Free Software
//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. //Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//#define OVERLAY_SUPPORT
#define DIRECTINPUT_VERSION 0x0800 #define DIRECTINPUT_VERSION 0x0800
#define DIRECTSOUND_VERSION 0x0800 #define DIRECTSOUND_VERSION 0x0800
@@ -44,9 +46,9 @@ DWORD FirstSound=1;
int AllowDefault=0; int AllowDefault=0;
int SoundEnabled=1; int SoundEnabled=1;
DWORD Overlay = 0; #ifdef OVERLAY_SUPPORT
DWORD Overlay_failed = 0;
DWORD Overlay_Colorkey = 0; DWORD Overlay_Colorkey = 0;
#endif
DWORD FirstActivate = 1; DWORD FirstActivate = 1;
@@ -78,7 +80,9 @@ LPDIRECTDRAWSURFACE7 DD_Primary = NULL;
LPDIRECTDRAWSURFACE7 DD_CFB = NULL; LPDIRECTDRAWSURFACE7 DD_CFB = NULL;
LPDIRECTDRAWSURFACE7 DD_BackBuffer = NULL; LPDIRECTDRAWSURFACE7 DD_BackBuffer = NULL;
LPDIRECTDRAWCLIPPER lpDDClipper = NULL; LPDIRECTDRAWCLIPPER lpDDClipper = NULL;
#ifdef OVERLAY_SUPPORT
DDOVERLAYFX ddofx; DDOVERLAYFX ddofx;
#endif
RECT rcWindow; RECT rcWindow;
LPDIRECTINPUT8 DInput = NULL; LPDIRECTINPUT8 DInput = NULL;
@@ -150,11 +154,6 @@ extern "C"
void drawscreenwin(void); void drawscreenwin(void);
DWORD LastUsedPos=0; DWORD LastUsedPos=0;
DWORD CurMode=-1; DWORD CurMode=-1;
void initDirectDraw()
{
InitDirectDraw();
}
} }
void DDrawError(){ void DDrawError(){
@@ -166,20 +165,18 @@ void DDrawError(){
extern "C" BYTE vsyncon; extern "C" BYTE vsyncon;
extern "C" BYTE TripleBufferWin; extern "C" BYTE TripleBufferWin;
extern "C" BYTE OverlayEnabled;
typedef DWORD (__fastcall* lpLockSurface)(); void DrawScreen()
DWORD __fastcall LockSurface_normal();
DWORD __fastcall LockSurface_overlay();
lpLockSurface LockSurface;
typedef void (__fastcall* lpUnlockSurface)();
void __fastcall UnlockSurface_normal();
void __fastcall UnlockSurface_overlay();
lpUnlockSurface UnlockSurface;
void DrawScreen_normal()
{ {
#ifdef OVERLAY_SUPPORT
if (vsyncon == 1)
{
if (DD_BackBuffer == NULL) InitDirectDraw();
DD_CFB->Flip(NULL,DDFLIP_WAIT);
}
else
if (DD_BackBuffer) InitDirectDraw();
#else
if (vsyncon == 1) if (vsyncon == 1)
{ {
if(FullScreen == 1) if(FullScreen == 1)
@@ -215,12 +212,7 @@ void DrawScreen_normal()
DD_Primary->Blt(&rcWindow, DD_CFB, NULL, DDBLT_WAIT, NULL); DD_Primary->Blt(&rcWindow, DD_CFB, NULL, DDBLT_WAIT, NULL);
} }
} }
} #endif
void DrawScreen_overlay()
{
if (vsyncon == 1)
DD_CFB->Flip(NULL,DDFLIP_WAIT);
} }
DWORD InputEn=0; DWORD InputEn=0;
@@ -283,7 +275,6 @@ extern "C" void CheckAlwaysOnTop()
extern "C" void MinimizeWindow() extern "C" void MinimizeWindow()
{ {
if (Overlay && (DD_CFB)) DD_CFB->UpdateOverlay(NULL, DD_Primary, NULL, DDOVER_HIDE, NULL);
ShowWindow(hMainWindow, SW_MINIMIZE); ShowWindow(hMainWindow, SW_MINIMIZE);
IsActivated = 0; IsActivated = 0;
} }
@@ -463,30 +454,29 @@ LRESULT CALLBACK Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case WM_MOVE: case WM_MOVE:
break; break;
case WM_PAINT: case WM_PAINT:
if (Overlay && Overlay_Colorkey && (DD_Primary)) #ifdef OVERLAY_SUPPORT
{ HDC hdc;
HDC hdc; POINT pt;
POINT pt; RECT rc1;
RECT rc1; struct tagPAINTSTRUCT ps;
struct tagPAINTSTRUCT ps; DDBLTFX ddbfx;
DDBLTFX ddbfx;
hdc = BeginPaint(hWnd, &ps); hdc = BeginPaint(hWnd, &ps);
rc1 = ps.rcPaint; rc1 = ps.rcPaint;
ClientToScreen(hMainWindow, ( LPPOINT )&rc1 ); ClientToScreen(hMainWindow, ( LPPOINT )&rc1 );
ClientToScreen(hMainWindow, ( LPPOINT )&rc1 + 1 ); ClientToScreen(hMainWindow, ( LPPOINT )&rc1 + 1 );
ddbfx.dwSize = sizeof(DDBLTFX); ddbfx.dwSize = sizeof(DDBLTFX);
ddbfx.dwFillColor = Overlay_Colorkey; ddbfx.dwFillColor = Overlay_Colorkey;
DD_Primary->Blt(&rc1, NULL, &rc1, DDBLT_COLORFILL | DD_Primary->Blt(&rc1, NULL, &rc1, DDBLT_COLORFILL |
DDBLT_WAIT, &ddbfx); DDBLT_WAIT, &ddbfx);
EndPaint(hWnd, &ps); EndPaint(hWnd, &ps);
} #else
else
ValidateRect(hWnd,NULL); ValidateRect(hWnd,NULL);
#endif
break; break;
case WM_ACTIVATE: case WM_ACTIVATE:
if (LOWORD(wParam) != WA_INACTIVE) if (LOWORD(wParam) != WA_INACTIVE)
@@ -494,10 +484,11 @@ LRESULT CALLBACK Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
IsActivated = 1; IsActivated = 1;
if(FirstActivate == 0) if(FirstActivate == 0)
{ {
if (Overlay == 1) #ifdef OVERLAY_SUPPORT
ShowWindow(hMainWindow, SW_SHOWNORMAL); ShowWindow(hMainWindow, SW_SHOWNORMAL);
#endif
initwinvideo(); initwinvideo();
if (Overlay == 1) #ifdef OVERLAY_SUPPORT
{ {
HRESULT hr; HRESULT hr;
RECT rc1; RECT rc1;
@@ -528,8 +519,8 @@ LRESULT CALLBACK Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
sprintf(err,"IDirectDrawSurface7::UpdateOverlay failed: 0x%x", hr); sprintf(err,"IDirectDrawSurface7::UpdateOverlay failed: 0x%x", hr);
MessageBox(NULL, err, "DirectDraw Error", MB_ICONERROR); MessageBox(NULL, err, "DirectDraw Error", MB_ICONERROR);
} }
} }
#endif
} }
InputAcquire(); InputAcquire();
if (FirstActivate == 1) FirstActivate = 0; if (FirstActivate == 1) FirstActivate = 0;
@@ -1230,20 +1221,21 @@ int InitDirectDraw()
} }
if (OverlayEnabled == 1 && !Overlay_failed) #ifdef OVERLAY_SUPPORT
ddcaps.dwSize = sizeof(DDCAPS);
if(lpDD->GetCaps(&ddcaps, NULL) != DD_OK)
{ {
ddcaps.dwSize = sizeof(DDCAPS); MessageBox(NULL, "IDirectDraw7::GetCaps failed.", "DirectDraw Error", MB_ICONERROR);
if(lpDD->GetCaps(&ddcaps, NULL) != DD_OK)
{
MessageBox(NULL, "IDirectDraw7::GetCaps failed.", "DirectDraw Error", MB_ICONERROR);
}
if ((ddcaps.dwCaps & DDCAPS_OVERLAY) &&
(ddcaps.dwCaps & DDCAPS_OVERLAYSTRETCH))
Overlay = 1;
if (ddcaps.dwCaps & DDCAPS_COLORKEY)
Overlay_Colorkey = 1;
} }
else Overlay = 0; if ((ddcaps.dwCaps & DDCAPS_OVERLAY) == 0 ||
(ddcaps.dwCaps & DDCAPS_OVERLAYSTRETCH) == 0)
{
MessageBox(NULL, "Sorry, no support for overlays.", "DirectDraw Error", MB_ICONERROR);
exit(0);
}
if (ddcaps.dwCaps & DDCAPS_COLORKEY)
Overlay_Colorkey = 1;
#endif
if(FullScreen == 1) if(FullScreen == 1)
{ {
@@ -1265,26 +1257,27 @@ int InitDirectDraw()
CheckAlwaysOnTop(); CheckAlwaysOnTop();
} }
overlay_failed:
ZeroMemory(&ddsd2, sizeof(DDSURFACEDESC2)); ZeroMemory(&ddsd2, sizeof(DDSURFACEDESC2));
ddsd2.dwSize = sizeof(DDSURFACEDESC2); ddsd2.dwSize = sizeof(DDSURFACEDESC2);
ddsd2.dwFlags = DDSD_CAPS; ddsd2.dwFlags = DDSD_CAPS;
ddsd2.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; ddsd2.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
if(!Overlay && FullScreen == 1) #ifndef OVERLAY_SUPPORT
if(FullScreen == 1)
{ {
ddsd2.dwFlags |= DDSD_BACKBUFFERCOUNT; ddsd2.dwFlags |= DDSD_BACKBUFFERCOUNT;
ddsd2.dwBackBufferCount = 2; ddsd2.dwBackBufferCount = 2;
ddsd2.ddsCaps.dwCaps |= DDSCAPS_FLIP | DDSCAPS_COMPLEX; ddsd2.ddsCaps.dwCaps |= DDSCAPS_FLIP | DDSCAPS_COMPLEX;
} }
#endif
if (lpDD->CreateSurface( &ddsd2, &DD_Primary, NULL) != DD_OK) if (lpDD->CreateSurface( &ddsd2, &DD_Primary, NULL) != DD_OK)
{ {
MessageBox(NULL, "IDirectDraw7::CreateSurface failed.", "DirectDraw Error", MB_ICONERROR); MessageBox(NULL, "IDirectDraw7::CreateSurface failed.", "DirectDraw Error", MB_ICONERROR);
} }
if(!Overlay && FullScreen == 1) #ifndef OVERLAY_SUPPORT
if(FullScreen == 1)
{ {
ddsd2.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER; ddsd2.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
if (DD_Primary->GetAttachedSurface(&ddsd2.ddsCaps, &DD_BackBuffer) != DD_OK) if (DD_Primary->GetAttachedSurface(&ddsd2.ddsCaps, &DD_BackBuffer) != DD_OK)
@@ -1292,6 +1285,7 @@ overlay_failed:
MessageBox(NULL, "IDirectDrawSurface7::GetAttachedSurface failed.", "DirectDraw Error", MB_ICONERROR); MessageBox(NULL, "IDirectDrawSurface7::GetAttachedSurface failed.", "DirectDraw Error", MB_ICONERROR);
} }
} }
#endif
if(FullScreen == 0) if(FullScreen == 0)
{ {
if (lpDD->CreateClipper(0,&lpDDClipper,NULL) != DD_OK) if (lpDD->CreateClipper(0,&lpDDClipper,NULL) != DD_OK)
@@ -1324,11 +1318,13 @@ overlay_failed:
BitDepth=format.dwRGBBitCount; BitDepth=format.dwRGBBitCount;
GBitMask=format.dwGBitMask; // 0x07E0 or not GBitMask=format.dwGBitMask; // 0x07E0 or not
if (BitDepth==24 && Overlay==0) #ifndef OVERLAY_SUPPORT
if (BitDepth==24)
{ {
MessageBox(NULL,"ZSNESw does not support 24bit color.\nPlease change your resolution to either 16bit or 32bit color","Error",MB_OK); MessageBox(NULL,"ZSNESw does not support 24bit color.\nPlease change your resolution to either 16bit or 32bit color","Error",MB_OK);
exit(0); exit(0);
} }
#endif
converta = (BitDepth==16 && GBitMask!=0x07E0); converta = (BitDepth==16 && GBitMask!=0x07E0);
@@ -1336,8 +1332,9 @@ overlay_failed:
ddsd2.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; ddsd2.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
ddsd2.dwWidth = SurfaceX; ddsd2.dwWidth = SurfaceX;
ddsd2.dwHeight = SurfaceY; ddsd2.dwHeight = SurfaceY;
if (Overlay)
{ #ifdef OVERLAY_SUPPORT
DWORD flags = DDOVER_SHOW, ddofx_ptr = NULL; DWORD flags = DDOVER_SHOW, ddofx_ptr = NULL;
ddsd2.ddsCaps.dwCaps = DDSCAPS_OVERLAY; ddsd2.ddsCaps.dwCaps = DDSCAPS_OVERLAY;
@@ -1400,10 +1397,8 @@ overlay_failed:
{ {
DD_Primary->Release(); DD_Primary->Release();
Overlay = 0; MessageBox(NULL,"Sorry, no overlay hardware available.", "DirectDraw Error", MB_ICONERROR);
Overlay_failed = 1; exit(0);
OverlayEnabled = 0;
goto overlay_failed;
} }
if ( hr != DD_OK ) if ( hr != DD_OK )
@@ -1477,12 +1472,7 @@ overlay_nocolorkey:
DD_Primary->Blt(&rc1, NULL, &rc1, DDBLT_COLORFILL | DDBLT_WAIT, &ddbfx); DD_Primary->Blt(&rc1, NULL, &rc1, DDBLT_COLORFILL | DDBLT_WAIT, &ddbfx);
} }
#else
LockSurface = (lpLockSurface) &LockSurface_overlay;
UnlockSurface = (lpUnlockSurface) &UnlockSurface_overlay;
}
else
{
ddsd2.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; ddsd2.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
@@ -1491,32 +1481,15 @@ overlay_nocolorkey:
{ {
MessageBox(NULL, "IDirectDraw7::CreateSurface failed.", "DirectDraw Error", MB_ICONERROR); MessageBox(NULL, "IDirectDraw7::CreateSurface failed.", "DirectDraw Error", MB_ICONERROR);
} }
LockSurface = (lpLockSurface) &LockSurface_normal; #endif
UnlockSurface = (lpUnlockSurface) &UnlockSurface_normal;
}
return TRUE; return TRUE;
} }
BYTE* SurfBuf; BYTE* SurfBuf;
DDSURFACEDESC2 ddsd; DDSURFACEDESC2 ddsd;
DWORD __fastcall LockSurface_normal() DWORD LockSurface()
{
if (DD_CFB == NULL) return(0);
memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize = sizeof( ddsd );
ddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;
if (DD_CFB->Lock(NULL,&ddsd,DDLOCK_WAIT,NULL) != DD_OK)
{
return(0);
}
SurfBuf = (BYTE*)ddsd.lpSurface;
return(ddsd.lPitch);
}
DWORD __fastcall LockSurface_overlay()
{ {
HRESULT hr; HRESULT hr;
@@ -1526,9 +1499,11 @@ DWORD __fastcall LockSurface_overlay()
memset(&ddsd,0,sizeof(ddsd)); memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize = sizeof( ddsd ); ddsd.dwSize = sizeof( ddsd );
ddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; ddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;
if (DD_BackBuffer) #ifdef OVERLAY_SUPPORT
if (vsyncon == 1 && (DD_BackBuffer))
hr=DD_BackBuffer->Lock(NULL,&ddsd,DDLOCK_WAIT,NULL); hr=DD_BackBuffer->Lock(NULL,&ddsd,DDLOCK_WAIT,NULL);
else else
#endif
hr=DD_CFB->Lock(NULL,&ddsd,DDLOCK_WAIT,NULL); hr=DD_CFB->Lock(NULL,&ddsd,DDLOCK_WAIT,NULL);
if (hr != DD_OK) if (hr != DD_OK)
@@ -1540,19 +1515,15 @@ DWORD __fastcall LockSurface_overlay()
return(ddsd.lPitch); return(ddsd.lPitch);
} }
void __fastcall UnlockSurface_normal() void UnlockSurface()
{ {
DD_CFB->Unlock((struct tagRECT *)ddsd.lpSurface); #ifdef OVERLAY_SUPPORT
DrawScreen_normal(); if (vsyncon == 1 && (DD_BackBuffer))
}
void __fastcall UnlockSurface_overlay()
{
if (DD_BackBuffer)
DD_BackBuffer->Unlock((struct tagRECT *)ddsd.lpSurface); DD_BackBuffer->Unlock((struct tagRECT *)ddsd.lpSurface);
else else
#endif
DD_CFB->Unlock((struct tagRECT *)ddsd.lpSurface); DD_CFB->Unlock((struct tagRECT *)ddsd.lpSurface);
DrawScreen_overlay(); DrawScreen();
} }
extern "C" { extern "C" {
@@ -2797,14 +2768,12 @@ int GetMouseButton(void)
if (Y>(GetSystemMetrics( SM_CYSCREEN )-WindowHeight)) Y=(GetSystemMetrics( SM_CYSCREEN )-WindowHeight); if (Y>(GetSystemMetrics( SM_CYSCREEN )-WindowHeight)) Y=(GetSystemMetrics( SM_CYSCREEN )-WindowHeight);
InputRead(); InputRead();
initwinvideo(); initwinvideo();
if (Overlay && (DD_CFB)) DD_CFB->SetOverlayPosition(X, Y);
} }
} }
if (Moving==1) if (Moving==1)
{ {
Moving=0; Moving=0;
initwinvideo(); initwinvideo();
if (Overlay && (DD_CFB)) DD_CFB->SetOverlayPosition(X, Y);
} }
return((int)MouseButton); return((int)MouseButton);
} }