* 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
};
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->RefType = RefType;
pBaseObject->pBaseDevice = pBaseDevice;
pBaseObject->pUnknown = pUnknown;
}
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);
@ -52,9 +52,9 @@ ULONG D3D9BaseObject_Release(D3D9BaseObject* pBaseObject)
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;
/* 0x0004 */ LONG lRefCnt;
/* 0x0008 */ DWORD dwNumUsed;
/* 0x000c */ struct _Direct3DDevice9_INT* pBaseDevice;
/* 0x000c */ IUnknown* pUnknown;
/* 0x0010 */ DWORD dwUnknown0010; // Index? Unique id?
/* 0x0014 */ HANDLE hKernelHandle;
/* 0x0018 */ LPDWORD dwUnknown0018;
/* 0x001c */ enum REF_TYPE RefType;
} 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_Release(D3D9BaseObject* pBaseObject);

View file

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

View file

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