[ros-diffs] [gbrunmar] 33271: * Implemented IDirect3D9::GetNumberOfSwapChains()

gbrunmar at svn.reactos.org gbrunmar at svn.reactos.org
Sun May 4 17:02:02 CEST 2008


Author: gbrunmar
Date: Sun May  4 10:02:01 2008
New Revision: 33271

URL: http://svn.reactos.org/svn/reactos?rev=33271&view=rev
Log:
* Implemented IDirect3D9::GetNumberOfSwapChains()

Modified:
    trunk/reactos/dll/directx/d3d9/d3d9_device.c
    trunk/reactos/dll/directx/d3d9/d3d9_device.h

Modified: trunk/reactos/dll/directx/d3d9/d3d9_device.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/d3d9/d3d9_device.c?rev=33271&r1=33270&r2=33271&view=diff
==============================================================================
--- trunk/reactos/dll/directx/d3d9/d3d9_device.c [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/d3d9/d3d9_device.c [iso-8859-1] Sun May  4 10:02:01 2008
@@ -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 @@
 * 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 @@
 
     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 @@
     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
-
-    return D3D_OK;
+    UINT NumSwapChains;
+
+    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)

Modified: trunk/reactos/dll/directx/d3d9/d3d9_device.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/d3d9/d3d9_device.h?rev=33271&r1=33270&r2=33271&view=diff
==============================================================================
--- trunk/reactos/dll/directx/d3d9/d3d9_device.h [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/d3d9/d3d9_device.h [iso-8859-1] Sun May  4 10:02:01 2008
@@ -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 @@
 /* 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 @@
 #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 @@
 /* 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 _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 @@
 /* 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;



More information about the Ros-diffs mailing list