* Replace D3D9BaseObject's dependency on Direct3DDevice9
* More HAL device init stuff

svn path=/trunk/; revision=35593
This commit is contained in:
Gregor Brunmar 2008-08-24 10:15:44 +00:00
parent 57fad8bdc4
commit f3890a8a5c
4 changed files with 14 additions and 9 deletions

View file

@ -25,18 +25,18 @@ ID3D9BaseObjectVtbl D3D9BaseObject_Vtbl =
D3D9BaseObject_Destroy D3D9BaseObject_Destroy
}; };
VOID InitD3D9BaseObject(D3D9BaseObject* pBaseObject, enum REF_TYPE RefType, struct _Direct3DDevice9_INT* pBaseDevice) VOID InitD3D9BaseObject(D3D9BaseObject* pBaseObject, enum REF_TYPE RefType, IUnknown* pUnknown)
{ {
pBaseObject->lpVtbl = &D3D9BaseObject_Vtbl; pBaseObject->lpVtbl = &D3D9BaseObject_Vtbl;
pBaseObject->RefType = RefType; pBaseObject->RefType = RefType;
pBaseObject->pBaseDevice = pBaseDevice; pBaseObject->pUnknown = pUnknown;
} }
ULONG D3D9BaseObject_AddRef(D3D9BaseObject* pBaseObject) ULONG D3D9BaseObject_AddRef(D3D9BaseObject* pBaseObject)
{ {
if (pBaseObject->pBaseDevice) if (pBaseObject->pUnknown)
{ {
pBaseObject->pBaseDevice->lpVtbl->AddRef((IDirect3DDevice9*)&pBaseObject->pBaseDevice->lpVtbl); pBaseObject->pUnknown->lpVtbl->AddRef((IUnknown*) &pBaseObject->pUnknown->lpVtbl);
} }
return InterlockedIncrement(&pBaseObject->lRefCnt); return InterlockedIncrement(&pBaseObject->lRefCnt);
@ -52,9 +52,9 @@ ULONG D3D9BaseObject_Release(D3D9BaseObject* pBaseObject)
if (Ref == 0) if (Ref == 0)
{ {
if (pBaseObject->pBaseDevice) if (pBaseObject->pUnknown)
{ {
pBaseObject->pBaseDevice->lpVtbl->Release((IDirect3DDevice9*)&pBaseObject->pBaseDevice->lpVtbl); pBaseObject->pUnknown->lpVtbl->Release((IUnknown*) &pBaseObject->pUnknown->lpVtbl);
} }
} }
} }

View file

@ -27,14 +27,14 @@ typedef struct _D3D9BaseObject
/* 0x0000 */ ID3D9BaseObjectVtbl* lpVtbl; /* 0x0000 */ ID3D9BaseObjectVtbl* lpVtbl;
/* 0x0004 */ LONG lRefCnt; /* 0x0004 */ LONG lRefCnt;
/* 0x0008 */ DWORD dwNumUsed; /* 0x0008 */ DWORD dwNumUsed;
/* 0x000c */ struct _Direct3DDevice9_INT* pBaseDevice; /* 0x000c */ IUnknown* pUnknown;
/* 0x0010 */ DWORD dwUnknown0010; // Index? Unique id? /* 0x0010 */ DWORD dwUnknown0010; // Index? Unique id?
/* 0x0014 */ HANDLE hKernelHandle; /* 0x0014 */ HANDLE hKernelHandle;
/* 0x0018 */ LPDWORD dwUnknown0018; /* 0x0018 */ LPDWORD dwUnknown0018;
/* 0x001c */ enum REF_TYPE RefType; /* 0x001c */ enum REF_TYPE RefType;
} D3D9BaseObject; } D3D9BaseObject;
VOID InitD3D9BaseObject(D3D9BaseObject* pBaseObject, enum REF_TYPE RefType, struct _Direct3DDevice9_INT* pBaseDevice); VOID InitD3D9BaseObject(D3D9BaseObject* pBaseObject, enum REF_TYPE RefType, IUnknown* pUnknown);
ULONG D3D9BaseObject_AddRef(D3D9BaseObject* pBaseObject); ULONG D3D9BaseObject_AddRef(D3D9BaseObject* pBaseObject);
ULONG D3D9BaseObject_Release(D3D9BaseObject* pBaseObject); ULONG D3D9BaseObject_Release(D3D9BaseObject* pBaseObject);

View file

@ -119,7 +119,7 @@ Direct3DSwapChain9_INT* CreateDirect3DSwapChain9(enum REF_TYPE RefType, struct _
return NULL; return NULL;
} }
InitD3D9BaseObject((D3D9BaseObject*) &pThisSwapChain->BaseObject.lpVtbl, RefType, pBaseDevice); InitD3D9BaseObject((D3D9BaseObject*) &pThisSwapChain->BaseObject.lpVtbl, RefType, (IUnknown*) &pBaseDevice->lpVtbl);
pThisSwapChain->lpVtbl = &Direct3DSwapChain9_Vtbl; pThisSwapChain->lpVtbl = &Direct3DSwapChain9_Vtbl;
@ -149,6 +149,7 @@ HRESULT Direct3DSwapChain9_Init(Direct3DSwapChain9_INT* pThisSwapChain, D3DPRESE
} }
pThisSwapChain->PresentParameters = pPresentationParameters[pThisSwapChain->ChainIndex]; pThisSwapChain->PresentParameters = pPresentationParameters[pThisSwapChain->ChainIndex];
pThisSwapChain->SwapEffect = pPresentationParameters->SwapEffect;
return Direct3DSwapChain9_Reset(pThisSwapChain, pPresentationParameters); return Direct3DSwapChain9_Reset(pThisSwapChain, pPresentationParameters);
} }

View file

@ -51,6 +51,10 @@ HRESULT InitD3D9BaseDevice(LPDIRECT3DDEVICE9_INT pThisBaseDevice, LPDIRECT3D9_IN
pThisBaseDevice->lpVtbl = &Direct3DDevice9_Vtbl; pThisBaseDevice->lpVtbl = &Direct3DDevice9_Vtbl;
pThisBaseDevice->lRefCnt = 1; pThisBaseDevice->lRefCnt = 1;
pThisBaseDevice->dwProcessId = GetCurrentThreadId();
pThisBaseDevice->pUnknown = (IUnknown*) &pThisBaseDevice->lpVtbl;
InitializeCriticalSection(&pThisBaseDevice->CriticalSection);
pThisBaseDevice->pDirect3D9 = pDirect3D9; pThisBaseDevice->pDirect3D9 = pDirect3D9;
pThisBaseDevice->DeviceType = DeviceType; pThisBaseDevice->DeviceType = DeviceType;
pThisBaseDevice->hWnd = hFocusWindow; pThisBaseDevice->hWnd = hFocusWindow;