2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS ReactX
4 * FILE: dll/directx/d3d9/d3d9_impl.c
5 * PURPOSE: IDirect3D9 implementation
6 * PROGRAMERS: Gregor Brunmar <gregor (dot) brunmar (at) home (dot) se>
8 #include "d3d9_private.h"
12 static ULONG WINAPI
IDirect3D9Impl_AddRef(LPDIRECT3D9 iface
);
14 /* IDirect3D9: IUnknown implementation */
15 static HRESULT WINAPI
IDirect3D9Impl_QueryInterface(LPDIRECT3D9 iface
, REFIID riid
, LPVOID
* ppvObject
)
17 LPDIRECTD3D9_INT This
= (LPDIRECTD3D9_INT
)iface
;
19 if (IsEqualGUID(riid
, &IID_IUnknown
) || IsEqualGUID(riid
, &IID_IDirect3D9
))
21 IDirect3D9Impl_AddRef(iface
);
22 *ppvObject
= &This
->lpVtbl
;
30 static ULONG WINAPI
IDirect3D9Impl_AddRef(LPDIRECT3D9 iface
)
32 LPDIRECTD3D9_INT This
= (LPDIRECTD3D9_INT
)iface
;
33 ULONG ref
= InterlockedIncrement(&This
->dwRefCnt
);
38 static ULONG WINAPI
IDirect3D9Impl_Release(LPDIRECT3D9 iface
)
40 LPDIRECTD3D9_INT This
= (LPDIRECTD3D9_INT
)iface
;
41 ULONG ref
= InterlockedDecrement(&This
->dwRefCnt
);
45 EnterCriticalSection(&This
->d3d9_cs
);
46 /* TODO: Free resources here */
47 LeaveCriticalSection(&This
->d3d9_cs
);
48 HeapFree(GetProcessHeap(), 0, This
);
54 /* IDirect3D9 interface */
55 static HRESULT WINAPI
IDirect3D9Impl_RegisterSoftwareDevice(LPDIRECT3D9 iface
, void* pInitializeFunction
)
62 static UINT WINAPI
IDirect3D9Impl_GetAdapterCount(LPDIRECT3D9 iface
)
69 static HRESULT WINAPI
IDirect3D9Impl_GetAdapterIdentifier(LPDIRECT3D9 iface
, UINT Adapter
, DWORD Flags
,
70 D3DADAPTER_IDENTIFIER9
* pIdentifier
)
77 static UINT WINAPI
IDirect3D9Impl_GetAdapterModeCount(LPDIRECT3D9 iface
, UINT Adapter
, D3DFORMAT Format
)
84 static HRESULT WINAPI
IDirect3D9Impl_EnumAdapterModes(LPDIRECT3D9 iface
, UINT Adapter
, D3DFORMAT Format
,
85 UINT Mode
, D3DDISPLAYMODE
* pMode
)
92 static HRESULT WINAPI
IDirect3D9Impl_GetAdapterDisplayMode(LPDIRECT3D9 iface
, UINT Adapter
, D3DDISPLAYMODE
* pMode
)
99 static HRESULT WINAPI
IDirect3D9Impl_CheckDeviceType(LPDIRECT3D9 iface
, UINT Adapter
, D3DDEVTYPE CheckType
,
100 D3DFORMAT DisplayFormat
, D3DFORMAT BackBufferFormat
, BOOL Windowed
)
107 static HRESULT WINAPI
IDirect3D9Impl_CheckDeviceFormat(LPDIRECT3D9 iface
, UINT Adapter
, D3DDEVTYPE DeviceType
,
108 D3DFORMAT AdapterFormat
, DWORD Usage
, D3DRESOURCETYPE RType
,
109 D3DFORMAT CheckFormat
)
116 static HRESULT WINAPI
IDirect3D9Impl_CheckDeviceMultiSampleType(LPDIRECT3D9 iface
, UINT Adapter
, D3DDEVTYPE DeviceType
,
117 D3DFORMAT SurfaceFormat
, BOOL Windowed
,
118 D3DMULTISAMPLE_TYPE MultiSampleType
, DWORD
* pQualityLevels
)
125 static HRESULT WINAPI
IDirect3D9Impl_CheckDepthStencilMatch(LPDIRECT3D9 iface
, UINT Adapter
, D3DDEVTYPE DeviceType
,
126 D3DFORMAT AdapterFormat
, D3DFORMAT RenderTargetFormat
,
127 D3DFORMAT DepthStencilFormat
)
134 static HRESULT WINAPI
IDirect3D9Impl_CheckDeviceFormatConversion(LPDIRECT3D9 iface
, UINT Adapter
, D3DDEVTYPE DeviceType
,
135 D3DFORMAT SourceFormat
, D3DFORMAT TargetFormat
)
142 static HRESULT WINAPI
IDirect3D9Impl_GetDeviceCaps(LPDIRECT3D9 iface
, UINT Adapter
, D3DDEVTYPE DeviceType
, D3DCAPS9
* pCaps
)
149 static HMONITOR WINAPI
IDirect3D9Impl_GetAdapterMonitor(LPDIRECT3D9 iface
, UINT Adapter
)
156 static HRESULT WINAPI
IDirect3D9Impl_CreateDevice(LPDIRECT3D9 iface
, UINT Adapter
, D3DDEVTYPE DeviceType
,
157 HWND hFocusWindow
, DWORD BehaviourFlags
,
158 D3DPRESENT_PARAMETERS
* pPresentationParameters
,
159 struct IDirect3DDevice9
** ppReturnedDeviceInterface
)
166 const IDirect3D9Vtbl Direct3D9_Vtbl
=
169 IDirect3D9Impl_QueryInterface
,
170 IDirect3D9Impl_AddRef
,
171 IDirect3D9Impl_Release
,
174 IDirect3D9Impl_RegisterSoftwareDevice
,
175 IDirect3D9Impl_GetAdapterCount
,
176 IDirect3D9Impl_GetAdapterIdentifier
,
177 IDirect3D9Impl_GetAdapterModeCount
,
178 IDirect3D9Impl_EnumAdapterModes
,
179 IDirect3D9Impl_GetAdapterDisplayMode
,
180 IDirect3D9Impl_CheckDeviceType
,
181 IDirect3D9Impl_CheckDeviceFormat
,
182 IDirect3D9Impl_CheckDeviceMultiSampleType
,
183 IDirect3D9Impl_CheckDepthStencilMatch
,
184 IDirect3D9Impl_CheckDeviceFormatConversion
,
185 IDirect3D9Impl_GetDeviceCaps
,
186 IDirect3D9Impl_GetAdapterMonitor
,
187 IDirect3D9Impl_CreateDevice