Author: gbrunmar Date: Sun Jan 13 14:45:31 2008 New Revision: 31754
URL: http://svn.reactos.org/svn/reactos?rev=31754&view=rev Log: Refactored d3d9 a bit
Added: trunk/reactos/dll/directx/d3d9/d3d9_common.h (with props) trunk/reactos/dll/directx/d3d9/d3d9_create.c (with props) trunk/reactos/dll/directx/d3d9/d3d9_create.h (with props) Modified: trunk/reactos/dll/directx/d3d9/d3d9.c trunk/reactos/dll/directx/d3d9/d3d9.rbuild trunk/reactos/dll/directx/d3d9/d3d9_helpers.c trunk/reactos/dll/directx/d3d9/d3d9_helpers.h trunk/reactos/dll/directx/d3d9/d3d9_impl.c trunk/reactos/dll/directx/d3d9/d3d9_private.h
Modified: trunk/reactos/dll/directx/d3d9/d3d9.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/d3d9/d3d9.c?rev... ============================================================================== --- trunk/reactos/dll/directx/d3d9/d3d9.c (original) +++ trunk/reactos/dll/directx/d3d9/d3d9.c Sun Jan 13 14:45:31 2008 @@ -7,13 +7,15 @@ * Gregor Brunmar <gregor (dot) brunmar (at) home (dot) se> */
-#include <windows.h> -#include "d3d9_private.h" +#include <d3d9.h> #include "d3d9_helpers.h" +#include "d3d9_create.h"
#include <debug.h>
#define DEBUG_MESSAGE_BUFFER_SIZE 512 + +typedef IDirect3D9* (WINAPI *LPDIRECT3DCREATE9)(UINT);
static LPCSTR D3dError_WrongSdkVersion = "D3D ERROR: D3D header version mismatch.\n"
Modified: trunk/reactos/dll/directx/d3d9/d3d9.rbuild URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/d3d9/d3d9.rbuil... ============================================================================== --- trunk/reactos/dll/directx/d3d9/d3d9.rbuild (original) +++ trunk/reactos/dll/directx/d3d9/d3d9.rbuild Sun Jan 13 14:45:31 2008 @@ -13,5 +13,6 @@ <file>d3d9.c</file> <file>d3d9_helpers.c</file> <file>d3d9_impl.c</file> + <file>d3d9_create.c</file> <file>d3d9.rc</file> </module>
Added: trunk/reactos/dll/directx/d3d9/d3d9_common.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/d3d9/d3d9_commo... ============================================================================== --- trunk/reactos/dll/directx/d3d9/d3d9_common.h (added) +++ trunk/reactos/dll/directx/d3d9/d3d9_common.h Sun Jan 13 14:45:31 2008 @@ -1,0 +1,19 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS ReactX + * FILE: dll/directx/d3d9/d3d9_common.h + * PURPOSE: d3d9.dll common functions, defines and macros + * PROGRAMERS: Gregor Brunmar <gregor (dot) brunmar (at) home (dot) se> + */ +#ifndef _D3D9_COMMON_H_ +#define _D3D9_COMMON_H_ + +#define COBJMACROS +#include <windows.h> + +#define DLLAPI __declspec(dllexport) +#define DX_D3D9_DEBUG 0x80000000 + +extern const struct IDirect3D9Vtbl Direct3D9_Vtbl; + +#endif // _D3D9_COMMON_H_
Propchange: trunk/reactos/dll/directx/d3d9/d3d9_common.h ------------------------------------------------------------------------------ svn:eol-style = native
Added: trunk/reactos/dll/directx/d3d9/d3d9_create.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/d3d9/d3d9_creat... ============================================================================== --- trunk/reactos/dll/directx/d3d9/d3d9_create.c (added) +++ trunk/reactos/dll/directx/d3d9/d3d9_create.c Sun Jan 13 14:45:31 2008 @@ -1,0 +1,128 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS ReactX + * FILE: dll/directx/d3d9/d3d9_create.c + * PURPOSE: d3d9.dll internal create functions and data + * PROGRAMERS: Gregor Brunmar <gregor (dot) brunmar (at) home (dot) se> + */ + +typedef struct IDirect3D9 *LPDIRECT3D9; + +#include "d3d9_create.h" +#include "d3d9_helpers.h" +#include <debug.h> +#include <ddrawi.h> + +static const GUID DISPLAY_GUID = { 0x67685559, 0x3106, 0x11D0, { 0xB9, 0x71, 0x00, 0xAA, 0x00, 0x34, 0x2F, 0x9F } }; + +static CHAR D3D9_PrimaryDeviceName[CCHDEVICENAME]; + +static BOOL GetDisplayDeviceInfo(IN OUT LPDIRECT3D9_INT pDirect3D9) +{ + DISPLAY_DEVICEA DisplayDevice; + DWORD AdapterIndex; + DWORD Planes; + DWORD Bpp; + HDC hDC; + + memset(&DisplayDevice, 0, sizeof(DISPLAY_DEVICEA)); + DisplayDevice.cb = sizeof(DISPLAY_DEVICEA); + + pDirect3D9->dwNumDisplayAdapters = 0; + D3D9_PrimaryDeviceName[0] = '\0'; + + AdapterIndex = 0; + while (EnumDisplayDevicesA(NULL, AdapterIndex, &DisplayDevice, 0) == TRUE) + { + if ((DisplayDevice.StateFlags & (DISPLAY_DEVICE_DISCONNECT | DISPLAY_DEVICE_MIRRORING_DRIVER)) == 0 && + (DisplayDevice.StateFlags & (DISPLAY_DEVICE_PRIMARY_DEVICE | DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)) != 0) + { + memcpy(&pDirect3D9->DisplayAdapters[0].DisplayGuid, &DISPLAY_GUID, sizeof(GUID)); + + lstrcpynA(pDirect3D9->DisplayAdapters[0].szDeviceName, DisplayDevice.DeviceName, MAX_PATH); + + if (pDirect3D9->dwNumDisplayAdapters == 0) + lstrcpynA(D3D9_PrimaryDeviceName, DisplayDevice.DeviceName, sizeof(D3D9_PrimaryDeviceName)); + + pDirect3D9->DisplayAdapters[0].dwStateFlags = DisplayDevice.StateFlags; + pDirect3D9->DisplayAdapters[0].bInUseFlag = TRUE; + + ++pDirect3D9->dwNumDisplayAdapters; + break; + } + } + + AdapterIndex = 0; + while (EnumDisplayDevicesA(NULL, AdapterIndex, &DisplayDevice, 0) == TRUE) + { + if ((DisplayDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) != 0 && + (DisplayDevice.StateFlags & (DISPLAY_DEVICE_MIRRORING_DRIVER | DISPLAY_DEVICE_PRIMARY_DEVICE)) == 0) + { + memcpy(&pDirect3D9->DisplayAdapters[pDirect3D9->dwNumDisplayAdapters].DisplayGuid, &DISPLAY_GUID, sizeof(GUID)); + + lstrcpynA(pDirect3D9->DisplayAdapters[pDirect3D9->dwNumDisplayAdapters].szDeviceName, DisplayDevice.DeviceName, MAX_PATH); + + pDirect3D9->DisplayAdapters[pDirect3D9->dwNumDisplayAdapters].dwStateFlags = DisplayDevice.StateFlags; + pDirect3D9->DisplayAdapters[pDirect3D9->dwNumDisplayAdapters].bInUseFlag = TRUE; + + ++pDirect3D9->dwNumDisplayAdapters; + } + } + + hDC = GetDC(NULL); + Planes = GetDeviceCaps(hDC, PLANES); + Bpp = GetDeviceCaps(hDC, BITSPIXEL); + ReleaseDC(NULL, hDC); + + if (Planes * Bpp < 8) + return FALSE; + + hDC = CreateDCA(NULL, D3D9_PrimaryDeviceName, NULL, NULL); + + if (hDC == NULL) + return FALSE; + + return TRUE; +} + +HRESULT CreateD3D9(OUT LPDIRECT3D9 *ppDirect3D9) +{ + LPDIRECT3D9_INT pDirect3D9; + + if (ppDirect3D9 == 0) + return DDERR_INVALIDPARAMS; + + if (AlignedAlloc((LPVOID *)&pDirect3D9, sizeof(DIRECT3D9_INT)) != S_OK) + return DDERR_OUTOFMEMORY; + + if (pDirect3D9 == 0) + return DDERR_OUTOFMEMORY; + + pDirect3D9->unknown000007 = 0; + pDirect3D9->lpInt = 0; + + pDirect3D9->lpVtbl = &Direct3D9_Vtbl; + //pDirect3D9->dwProcessId = GetCurrentThreadId(); + pDirect3D9->dwRefCnt = 1; + + pDirect3D9->unknown004576 = 0; + pDirect3D9->unknown004578 = 0; + pDirect3D9->unknown004579 = 0; + pDirect3D9->unknown004580 = 0; + pDirect3D9->unknown004581 = 0; + pDirect3D9->unknown004582 = 0; + pDirect3D9->unknown004583 = 0; + pDirect3D9->unknown004589 = 0x20; + + pDirect3D9->lpInt = pDirect3D9; + pDirect3D9->unknown000007 = 1; + + //InitializeCriticalSection(&pDirect3D9->d3d9_cs); + + //memset(pDirect3D9->DisplayAdapters, 0, sizeof(pDirect3D9->DisplayAdapters)); + GetDisplayDeviceInfo(pDirect3D9); + + *ppDirect3D9 = (LPDIRECT3D9)&pDirect3D9->lpVtbl; + + return ERROR_SUCCESS; +}
Propchange: trunk/reactos/dll/directx/d3d9/d3d9_create.c ------------------------------------------------------------------------------ svn:eol-style = native
Added: trunk/reactos/dll/directx/d3d9/d3d9_create.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/d3d9/d3d9_creat... ============================================================================== --- trunk/reactos/dll/directx/d3d9/d3d9_create.h (added) +++ trunk/reactos/dll/directx/d3d9/d3d9_create.h Sun Jan 13 14:45:31 2008 @@ -1,0 +1,16 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS ReactX + * FILE: dll/directx/d3d9/d3d9_create.h + * PURPOSE: d3d9.dll internal create functions and data + * PROGRAMERS: Gregor Brunmar <gregor (dot) brunmar (at) home (dot) se> + */ +#ifndef _D3D9_CREATE_H_ +#define _D3D9_CREATE_H_ + +#include "d3d9_private.h" + +/* Creates a Direct3D9 object */ +HRESULT CreateD3D9(OUT LPDIRECT3D9 *ppDirect3D9); + +#endif // _D3D9_CREATE_H_
Propchange: trunk/reactos/dll/directx/d3d9/d3d9_create.h ------------------------------------------------------------------------------ svn:eol-style = native
Modified: trunk/reactos/dll/directx/d3d9/d3d9_helpers.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/d3d9/d3d9_helpe... ============================================================================== --- trunk/reactos/dll/directx/d3d9/d3d9_helpers.c (original) +++ trunk/reactos/dll/directx/d3d9/d3d9_helpers.c Sun Jan 13 14:45:31 2008 @@ -6,6 +6,7 @@ * PROGRAMERS: Gregor Brunmar <gregor (dot) brunmar (at) home (dot) se> */
+#include <d3d9.h> #include "d3d9_helpers.h" #include <stdio.h> #include <ddraw.h> @@ -14,10 +15,6 @@ #define MEM_ALIGNMENT 0x20
static LPCSTR D3D9_DebugRegPath = "Software\Microsoft\Direct3D"; - -static const GUID DISPLAY_GUID = { 0x67685559, 0x3106, 0x11D0, { 0xB9, 0x71, 0x00, 0xAA, 0x00, 0x34, 0x2F, 0x9F } }; - -static CHAR D3D9_PrimaryDeviceName[32];
LPDIRECT3D9_INT impl_from_IDirect3D9(LPDIRECT3D9 iface) { @@ -63,110 +60,6 @@ Buffer[BufferSize-1] = '\0';
return 0; -} - -static BOOL GetDisplayDeviceInfo(IN OUT LPDIRECT3D9_INT pDirect3D9) -{ - DISPLAY_DEVICEA DisplayDevice; - DWORD AdapterIndex; - DWORD Planes; - DWORD Bpp; - HDC hDC; - - memset(&DisplayDevice, 0, sizeof(DISPLAY_DEVICEA)); - DisplayDevice.cb = sizeof(DISPLAY_DEVICEA); - - pDirect3D9->dwNumDisplayAdapters = 0; - D3D9_PrimaryDeviceName[0] = '\0'; - - AdapterIndex = 0; - while (EnumDisplayDevicesA(NULL, AdapterIndex, &DisplayDevice, 0) == TRUE) - { - if ((DisplayDevice.StateFlags & (DISPLAY_DEVICE_DISCONNECT | DISPLAY_DEVICE_MIRRORING_DRIVER)) == 0 && - (DisplayDevice.StateFlags & (DISPLAY_DEVICE_PRIMARY_DEVICE | DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)) != 0) - { - memcpy(&pDirect3D9->DisplayAdapters[0].DisplayGuid, &DISPLAY_GUID, sizeof(GUID)); - - lstrcpynA(pDirect3D9->DisplayAdapters[0].szDeviceName, DisplayDevice.DeviceName, MAX_PATH); - - if (pDirect3D9->dwNumDisplayAdapters == 0) - lstrcpynA(D3D9_PrimaryDeviceName, DisplayDevice.DeviceName, sizeof(D3D9_PrimaryDeviceName)); - - pDirect3D9->DisplayAdapters[0].dwStateFlags = DisplayDevice.StateFlags; - pDirect3D9->DisplayAdapters[0].bInUseFlag = TRUE; - - ++pDirect3D9->dwNumDisplayAdapters; - } - } - - AdapterIndex = 0; - while (EnumDisplayDevicesA(NULL, AdapterIndex, &DisplayDevice, 0) == TRUE) - { - if ((DisplayDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) != 0 && - (DisplayDevice.StateFlags & (DISPLAY_DEVICE_MIRRORING_DRIVER | DISPLAY_DEVICE_PRIMARY_DEVICE)) == 0) - { - memcpy(&pDirect3D9->DisplayAdapters[pDirect3D9->dwNumDisplayAdapters].DisplayGuid, &DISPLAY_GUID, sizeof(GUID)); - - lstrcpynA(pDirect3D9->DisplayAdapters[pDirect3D9->dwNumDisplayAdapters].szDeviceName, DisplayDevice.DeviceName, MAX_PATH); - - pDirect3D9->DisplayAdapters[pDirect3D9->dwNumDisplayAdapters].dwStateFlags = DisplayDevice.StateFlags; - pDirect3D9->DisplayAdapters[pDirect3D9->dwNumDisplayAdapters].bInUseFlag = TRUE; - - ++pDirect3D9->dwNumDisplayAdapters; - } - } - - hDC = GetDC(NULL); - Planes = GetDeviceCaps(hDC, PLANES); - Bpp = GetDeviceCaps(hDC, BITSPIXEL); - ReleaseDC(NULL, hDC); - - if (Planes * Bpp < 8) - return FALSE; - - return TRUE; -} - -HRESULT CreateD3D9(OUT LPDIRECT3D9 *ppDirect3D9) -{ - LPDIRECT3D9_INT pDirect3D9; - - if (ppDirect3D9 == 0) - return DDERR_INVALIDPARAMS; - - if (AlignedAlloc((LPVOID *)&pDirect3D9, sizeof(DIRECT3D9_INT)) != S_OK) - return DDERR_OUTOFMEMORY; - - if (pDirect3D9 == 0) - return DDERR_OUTOFMEMORY; - - pDirect3D9->unknown000007 = 0; - pDirect3D9->lpInt = 0; - - pDirect3D9->lpVtbl = &Direct3D9_Vtbl; - //pDirect3D9->dwProcessId = GetCurrentThreadId(); - pDirect3D9->dwRefCnt = 1; - - pDirect3D9->unknown004576 = 0; - pDirect3D9->unknown004578 = 0; - pDirect3D9->unknown004579 = 0; - pDirect3D9->unknown004580 = 0; - pDirect3D9->unknown004581 = 0; - pDirect3D9->unknown004582 = 0; - pDirect3D9->unknown004583 = 0; - pDirect3D9->unknown004589 = 0x20; - - pDirect3D9->lpInt = pDirect3D9; - pDirect3D9->unknown000007 = 1; - - //InitializeCriticalSection(&pDirect3D9->d3d9_cs); - - //memset(pDirect3D9->DisplayAdapters, 0, sizeof(pDirect3D9->DisplayAdapters)); - GetDisplayDeviceInfo(pDirect3D9); - - *ppDirect3D9 = (LPDIRECT3D9)&pDirect3D9->lpVtbl; - - return ERROR_SUCCESS; }
HRESULT AlignedAlloc(IN OUT LPVOID *ppObject, IN SIZE_T dwSize)
Modified: trunk/reactos/dll/directx/d3d9/d3d9_helpers.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/d3d9/d3d9_helpe... ============================================================================== --- trunk/reactos/dll/directx/d3d9/d3d9_helpers.h (original) +++ trunk/reactos/dll/directx/d3d9/d3d9_helpers.h Sun Jan 13 14:45:31 2008 @@ -8,6 +8,7 @@ #ifndef _D3D9_HELPERS_H_ #define _D3D9_HELPERS_H_
+#include "d3d9_common.h" #include "d3d9_private.h"
/* Convert a IDirect3D9 pointer safely to the internal implementation struct */ @@ -19,9 +20,6 @@ /* Formats debug strings */ HRESULT FormatDebugString(IN OUT LPSTR Buffer, IN LONG BufferSize, IN LPCSTR FormatString, ... );
-/* Creates a Direct3D9 object */ -HRESULT CreateD3D9(OUT LPDIRECT3D9 *ppDirect3D9); - /* Allocates memory and returns an aligned pointer */ HRESULT AlignedAlloc(IN OUT LPVOID *ppObject, IN SIZE_T dwSize);
Modified: trunk/reactos/dll/directx/d3d9/d3d9_impl.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/d3d9/d3d9_impl.... ============================================================================== --- trunk/reactos/dll/directx/d3d9/d3d9_impl.c (original) +++ trunk/reactos/dll/directx/d3d9/d3d9_impl.c Sun Jan 13 14:45:31 2008 @@ -5,8 +5,10 @@ * PURPOSE: IDirect3D9 implementation * PROGRAMERS: Gregor Brunmar <gregor (dot) brunmar (at) home (dot) se> */ + +#include "d3d9_common.h" +#include <d3d9.h> #include "d3d9_helpers.h" - #include <debug.h>
/* IDirect3D9: IUnknown implementation */
Modified: trunk/reactos/dll/directx/d3d9/d3d9_private.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/d3d9/d3d9_priva... ============================================================================== --- trunk/reactos/dll/directx/d3d9/d3d9_private.h (original) +++ trunk/reactos/dll/directx/d3d9/d3d9_private.h Sun Jan 13 14:45:31 2008 @@ -1,23 +1,14 @@ /* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS ReactX - * FILE: dll/directx/d3d9/d3d9_helpers.c - * PURPOSE: d3d9.dll helper functions + * FILE: dll/directx/d3d9/d3d9_private.h + * PURPOSE: d3d9.dll internal structures * PROGRAMERS: Gregor Brunmar <gregor (dot) brunmar (at) home (dot) se> */ #ifndef _D3D9_PRIVATE_H_ #define _D3D9_PRIVATE_H_
-#define COBJMACROS #include <windows.h> -#include <d3d9.h> - -#define DLLAPI __declspec(dllexport) -#define DX_D3D9_DEBUG 0x80000000 - -typedef IDirect3D9* (WINAPI *LPDIRECT3DCREATE9)(UINT); - -extern const IDirect3D9Vtbl Direct3D9_Vtbl;
typedef struct _tagDIRECT3D9DisplayAdapterInfo_ { @@ -133,7 +124,7 @@
typedef struct _tagDIRECT3D9_INT_ { -/* 0x0000 */ const IDirect3D9Vtbl *lpVtbl; /* LPDIRECTD3D9 functoions table */ +/* 0x0000 */ const struct IDirect3D9Vtbl *lpVtbl; /* LPDIRECTD3D9 functoions table */ /* 0x0004 */ CRITICAL_SECTION d3d9_cs; /* 0x001c */ DWORD unknown000007; /* 0x00000001 */ /* 0x0020 */ DWORD dwProcessId;