summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-08-13 05:26:12 +0000
committerSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-08-13 05:26:12 +0000
commit70965df387c1d06ff2b8228e5ae80d72f79f8b06 (patch)
tree7e38589b3dcaa008396209e8e62c8a2972d9669c
parentcc244a8991b6c59b3e2e3a3d8b9837afc7d81379 (diff)
downloadpcsxr-70965df387c1d06ff2b8228e5ae80d72f79f8b06.tar.gz
dfxvideo (win32): load ddraw.dll globally
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@56054 e17a0e51-4ae3-4d35-97c3-1a29b211df97
-rw-r--r--win32/plugins/dfxvideo/winsrc/cfg.c24
-rw-r--r--win32/plugins/dfxvideo/winsrc/draw.c10
-rw-r--r--win32/plugins/dfxvideo/winsrc/winmain.c20
3 files changed, 18 insertions, 36 deletions
diff --git a/win32/plugins/dfxvideo/winsrc/cfg.c b/win32/plugins/dfxvideo/winsrc/cfg.c
index b9d7b999..e2b14a01 100644
--- a/win32/plugins/dfxvideo/winsrc/cfg.c
+++ b/win32/plugins/dfxvideo/winsrc/cfg.c
@@ -937,21 +937,14 @@ static BOOL WINAPI DirectDrawEnumCallbackEx( GUID FAR* pGUID, LPSTR strDesc,
LPDIRECTDRAW4 g_pDD;
LPDIRECT3D3 pD3D;
HRESULT (WINAPI *pDDrawCreateFn)(GUID *,LPDIRECTDRAW *,IUnknown *);
- HMODULE hDDrawDLL;
-
- hDDrawDLL = LoadLibrary(TEXT("DDRAW.DLL"));
- if(NULL == hDDrawDLL) return FALSE;
pDDrawCreateFn = (LPVOID)GetProcAddress( hDDrawDLL, "DirectDrawCreate" );
if( pDDrawCreateFn == NULL || FAILED( pDDrawCreateFn( pGUID, &pDD, 0L ) ) )
{
- FreeLibrary(hDDrawDLL);
return D3DENUMRET_OK;
}
- FreeLibrary(hDDrawDLL);
-
// Query the DirectDraw driver for access to Direct3D.
if( FAILED(IDirectDraw_QueryInterface(pDD, &IID_IDirectDraw4, (VOID**)&g_pDD)))
{
@@ -1002,21 +995,15 @@ void DoDevEnum(HWND hW)
{
LPDIRECTDRAWENUMERATEEX pDDrawEnumFn;
- HMODULE hDDrawDLL = LoadLibrary(TEXT("DDRAW.DLL"));
- if(NULL == hDDrawDLL) return;
-
gHWND=hW;
- pDDrawEnumFn = (LPDIRECTDRAWENUMERATEEX)
- GetProcAddress( hDDrawDLL, "DirectDrawEnumerateExA" );
+ pDDrawEnumFn = (LPVOID)GetProcAddress(hDDrawDLL, "DirectDrawEnumerateExA");
if (pDDrawEnumFn != NULL)
pDDrawEnumFn( DirectDrawEnumCallbackEx, NULL,
DDENUM_ATTACHEDSECONDARYDEVICES |
DDENUM_DETACHEDSECONDARYDEVICES |
DDENUM_NONDISPLAYDEVICES );
-
- FreeLibrary(hDDrawDLL);
}
////////////////////////////////////////////////////////////////////////
@@ -1148,7 +1135,6 @@ BOOL bTestModes(void)
LPDIRECTDRAW pDD;
LPDIRECTDRAW4 g_pDD;
HRESULT (WINAPI *pDDrawCreateFn)(GUID *,LPDIRECTDRAW *,IUnknown *);
- HMODULE hDDrawDLL;
GUID FAR * guid=0;
int i;unsigned char * c=(unsigned char *)&guiDev;
@@ -1157,19 +1143,13 @@ BOOL bTestModes(void)
bDeviceOK=FALSE;
- hDDrawDLL = LoadLibrary(TEXT("DDRAW.DLL"));
- if(NULL == hDDrawDLL) return FALSE;
-
- pDDrawCreateFn = (LPVOID)GetProcAddress( hDDrawDLL, "DirectDrawCreate" );
+ pDDrawCreateFn = (LPVOID)GetProcAddress(hDDrawDLL, "DirectDrawCreate");
if( pDDrawCreateFn == NULL || FAILED( pDDrawCreateFn(guid, &pDD, 0L ) ) )
{
- FreeLibrary(hDDrawDLL);
return FALSE;
}
- FreeLibrary(hDDrawDLL);
-
if(FAILED(IDirectDraw_QueryInterface(pDD, &IID_IDirectDraw4, (VOID**)&g_pDD)))
{
IDirectDraw_Release(pDD);
diff --git a/win32/plugins/dfxvideo/winsrc/draw.c b/win32/plugins/dfxvideo/winsrc/draw.c
index bfd7df7c..ecd0e23c 100644
--- a/win32/plugins/dfxvideo/winsrc/draw.c
+++ b/win32/plugins/dfxvideo/winsrc/draw.c
@@ -3657,7 +3657,6 @@ int DXinitialize()
DDBLTFX ddbltfx;
DDPIXELFORMAT dd;
HRESULT (WINAPI *pDDrawCreateFn)(GUID *,LPDIRECTDRAW *,IUnknown *);
- HMODULE hDDrawDLL;
// init some DX vars
DX.hWnd = (HWND)hWGPU;
@@ -3669,24 +3668,15 @@ int DXinitialize()
for(i=0;i<sizeof(GUID);i++,c++)
{if(*c) {guid=&guiDev;break;}}
- hDDrawDLL = LoadLibrary(TEXT("DDRAW.DLL"));
- if(NULL == hDDrawDLL)
- {
- MessageBox(NULL, "This GPU requires DirectX!", "Error", MB_OK);
- return 0;
- }
-
pDDrawCreateFn = (LPVOID)GetProcAddress( hDDrawDLL, "DirectDrawCreate" );
// create dd
if(pDDrawCreateFn == NULL || pDDrawCreateFn(guid,&DD,0))
{
- FreeLibrary(hDDrawDLL);
MessageBox(NULL, "This GPU requires DirectX!", "Error", MB_OK);
return 0;
}
- FreeLibrary(hDDrawDLL);
DX.DD=DD;
//////////////////////////////////////////////////////// co-op level
diff --git a/win32/plugins/dfxvideo/winsrc/winmain.c b/win32/plugins/dfxvideo/winsrc/winmain.c
index 3e8c214a..16d45f29 100644
--- a/win32/plugins/dfxvideo/winsrc/winmain.c
+++ b/win32/plugins/dfxvideo/winsrc/winmain.c
@@ -18,13 +18,25 @@
#include "externals.h"
-HINSTANCE hInst = NULL;
+HINSTANCE hInst = NULL;
+HMODULE hDDrawDLL = NULL;
BOOL APIENTRY DllMain(HANDLE hModule, // DLL INIT
DWORD dwReason,
LPVOID lpReserved)
-{
- hInst=(HINSTANCE)hModule;
- return TRUE; // very quick :)
+{
+ switch (dwReason) {
+ case DLL_PROCESS_ATTACH:
+ hInst = (HINSTANCE)hModule;
+ hDDrawDLL = LoadLibrary(TEXT("DDRAW.DLL"));
+ break;
+
+ case DLL_PROCESS_DETACH:
+ hInst = NULL;
+ if (hDDrawDLL) FreeLibrary(hDDrawDLL);
+ break;
+ }
+
+ return TRUE; // very quick :)
}