mirror of
https://github.com/reactos/reactos.git
synced 2025-06-06 01:40:36 +00:00
D3D9:
* Replace D3D9BaseObject's dependency on Direct3DDevice9 * More HAL device init stuff svn path=/trunk/; revision=35593
This commit is contained in:
parent
57fad8bdc4
commit
f3890a8a5c
4 changed files with 14 additions and 9 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue