* Implemented IDirect3D9::GetNumberOfSwapChains()

svn path=/trunk/; revision=33271
This commit is contained in:
Gregor Brunmar 2008-05-04 15:02:01 +00:00
parent 8ef0a1282d
commit abb783966b
2 changed files with 37 additions and 12 deletions

View file

@ -9,8 +9,8 @@
#include "d3d9_helpers.h"
#include "debug.h"
#define LOCK_D3DDEVICE9() EnterCriticalSection(&This->CriticalSection);
#define UNLOCK_D3DDEVICE9() LeaveCriticalSection(&This->CriticalSection);
#define LOCK_D3DDEVICE9() if (This->bLockDevice) EnterCriticalSection(&This->CriticalSection);
#define UNLOCK_D3DDEVICE9() if (This->bLockDevice) LeaveCriticalSection(&This->CriticalSection);
/* Convert a IDirect3D9 pointer safely to the internal implementation struct */
LPDIRECT3DDEVICE9_INT impl_from_IDirect3DDevice9(LPDIRECT3DDEVICE9 iface)
@ -144,10 +144,10 @@ static HRESULT WINAPI IDirect3DDevice9Impl_CreateAdditionalSwapChain(LPDIRECT3DD
* The function IDirect3DDevice9Impl_GetSwapChain returns a pointer to a swap chain object.
*
* @param LPDIRECT3D iface
* Pointer to the IDirect3DDevice9 object returned from IDirect3D9->CreateDevice()
* Pointer to the IDirect3DDevice9 object returned from IDirect3D9::CreateDevice()
*
* @param UINT iSwapChain
* Swap chain index to get.
* Swap chain index to get object for.
* The maximum value for this is the value returned by IDirect3DDevice9::GetNumberOfSwapChains() - 1.
*
* @param IDirect3DSwapChain9** ppSwapChain
@ -180,7 +180,7 @@ static HRESULT WINAPI IDirect3DDevice9Impl_GetSwapChain(LPDIRECT3DDEVICE9 iface,
if (This->pSwapChains[iSwapChain] != NULL)
{
IDirect3DSwapChain9* pSwapChain = (IDirect3DSwapChain9*)This->pSwapChains[iSwapChain]->lpVtbl;
IDirect3DSwapChain9* pSwapChain = (IDirect3DSwapChain9*)&This->pSwapChains[iSwapChain]->lpVtbl;
IDirect3DSwapChain9_AddRef(pSwapChain);
*ppSwapChain = pSwapChain;
}
@ -193,11 +193,34 @@ static HRESULT WINAPI IDirect3DDevice9Impl_GetSwapChain(LPDIRECT3DDEVICE9 iface,
return D3D_OK;
}
/*++
* @name IDirect3DDevice9::GetNumberOfSwapChains
* @implemented
*
* The function IDirect3DDevice9Impl_GetNumberOfSwapChains returns the number of swap chains
* created by IDirect3D9::CreateDevice().
*
* @param LPDIRECT3D iface
* Pointer to the IDirect3DDevice9 object returned from IDirect3D9::CreateDevice().
*
* @return UINT
* Returns the number of swap chains created by IDirect3D9::CreateDevice().
*
* NOTE: An application can create additional swap chains using the
* IDirect3DDevice9::CreateAdditionalSwapChain() method.
*
*/
static UINT WINAPI IDirect3DDevice9Impl_GetNumberOfSwapChains(LPDIRECT3DDEVICE9 iface)
{
UNIMPLEMENTED
UINT NumSwapChains;
return D3D_OK;
LPDIRECT3DDEVICE9_INT This = impl_from_IDirect3DDevice9(iface);
LOCK_D3DDEVICE9();
NumSwapChains = This->NumAdaptersInDevice;
UNLOCK_D3DDEVICE9();
return NumSwapChains;
}
static HRESULT WINAPI IDirect3DDevice9Impl_Reset(LPDIRECT3DDEVICE9 iface, D3DPRESENT_PARAMETERS* pPresentationParameters)

View file

@ -12,6 +12,8 @@
#include <d3d9.h>
#include "d3d9_private.h"
extern struct IDirect3DDevice9Vtbl Direct3DDevice9_Vtbl;
enum REF_TYPE
{
RT_EXTERNAL,
@ -24,7 +26,7 @@ typedef struct _tagD3D9BaseObject_
/* 0x0000 */ LPDWORD lpVtbl;
/* 0x0004 */ DWORD dwUnknown0004;
/* 0x0008 */ DWORD dwUnknown0008;
/* 0x000c */ struct _tagD3D9BaseDevice_* pBaseDevice;
/* 0x000c */ struct _tagDirect3DDevice9_INT_* pBaseDevice;
/* 0x0010 */ DWORD dwUnknown0010; // Index? Unique id?
/* 0x0014 */ HANDLE hKernelHandle;
/* 0x0018 */ LPDWORD dwUnknown0018;
@ -77,7 +79,7 @@ typedef struct _tagD3D9ResourceManager_
#ifdef D3D_DEBUG_INFO
/* N/A - 0x0000 */ DDSURFACEDESC SurfaceDesc[8];
#endif
/* 0x0000 - 0x0160 */ struct _tagD3D9BaseDevice_* pBaseDevice;
/* 0x0000 - 0x0160 */ struct _tagDirect3DDevice9_INT_* pBaseDevice;
/* 0x0004 - 0x0164 */ DWORD dwUnknown0004;
/* 0x0008 - 0x0168 */ DWORD dwUnknown0008;
/* 0x000c - 0x016c */ DWORD MaxSimultaneousTextures;
@ -144,7 +146,7 @@ typedef struct _tagDirect3DSwapChain9_INT_
/* 0x00ec */ DWORD dwUnknown00ec;
/* 0x00f0 */ DWORD dwUnknown00f0[27];
/* 0x015c */ LPDWORD pUnknown0174; // points to 0x0174
/* 0x015c */ LPDWORD pUnknown015c;
/* 0x0160 */ DWORD dwUnknown0160[4];
/* 0x0170 */ HRESULT hResult;
@ -162,7 +164,7 @@ typedef struct _tagDirect3DSwapChain9_INT_
typedef struct _tagDirect3DDevice9_INT_
{
/* 0x0000 */ struct IDirect3D9DeviceVtbl* lpVtbl;
/* 0x0000 */ struct IDirect3DDevice9Vtbl* lpVtbl;
/* 0x0004 */ CRITICAL_SECTION CriticalSection;
#ifdef D3D_DEBUG_INFO
/* N/A - 0x001c */ DWORD dbg0004;
@ -180,7 +182,7 @@ typedef struct _tagDirect3DDevice9_INT_
/* N/A - 0x004c */ DWORD dbg0034;
/* N/A - 0x0050 */ DWORD dbg0038;
#endif
/* 0x001c - 0x0054 */ DWORD unknown000007;
/* 0x001c - 0x0054 */ BOOL bLockDevice;
/* 0x0020 - 0x0058 */ DWORD dwProcessId;
/* 0x0024 - 0x005c */ struct _tagD3D9PUREDEVICE_* lpThis;
/* 0x0028 - 0x0060 */ DWORD dwDXVersion;