afed7c4234116967da68e64b96b12d68575d5e5f
[reactos.git] / reactos / dll / directx / d3d9 / d3d9_impl.c
1 /*
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>
7 */
8 #include "d3d9_helpers.h"
9
10 #include <debug.h>
11
12 /* IDirect3D9: IUnknown implementation */
13 static HRESULT WINAPI IDirect3D9Impl_QueryInterface(LPDIRECT3D9 iface, REFIID riid, LPVOID* ppvObject)
14 {
15 LPDIRECT3D9_INT This = impl_from_IDirect3D9(iface);
16
17 if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirect3D9))
18 {
19 IUnknown_AddRef(iface);
20 *ppvObject = &This->lpVtbl;
21 return S_OK;
22 }
23
24 *ppvObject = NULL;
25 return E_NOINTERFACE;
26 }
27
28 static ULONG WINAPI IDirect3D9Impl_AddRef(LPDIRECT3D9 iface)
29 {
30 LPDIRECT3D9_INT This = impl_from_IDirect3D9(iface);
31 ULONG ref = InterlockedIncrement(&This->dwRefCnt);
32
33 return ref;
34 }
35
36 static ULONG WINAPI IDirect3D9Impl_Release(LPDIRECT3D9 iface)
37 {
38 LPDIRECT3D9_INT This = impl_from_IDirect3D9(iface);
39 ULONG ref = InterlockedDecrement(&This->dwRefCnt);
40
41 if (ref == 0)
42 {
43 EnterCriticalSection(&This->d3d9_cs);
44 /* TODO: Free resources here */
45 LeaveCriticalSection(&This->d3d9_cs);
46 AlignedFree(This);
47 }
48
49 return ref;
50 }
51
52 /* IDirect3D9 interface */
53 static HRESULT WINAPI IDirect3D9Impl_RegisterSoftwareDevice(LPDIRECT3D9 iface, void* pInitializeFunction)
54 {
55 UNIMPLEMENTED
56
57 return D3D_OK;
58 }
59
60 static UINT WINAPI IDirect3D9Impl_GetAdapterCount(LPDIRECT3D9 iface)
61 {
62 UNIMPLEMENTED
63
64 return D3D_OK;
65 }
66
67 static HRESULT WINAPI IDirect3D9Impl_GetAdapterIdentifier(LPDIRECT3D9 iface, UINT Adapter, DWORD Flags,
68 D3DADAPTER_IDENTIFIER9* pIdentifier)
69 {
70 UNIMPLEMENTED
71
72 return D3D_OK;
73 }
74
75 static UINT WINAPI IDirect3D9Impl_GetAdapterModeCount(LPDIRECT3D9 iface, UINT Adapter, D3DFORMAT Format)
76 {
77 UNIMPLEMENTED
78
79 return D3D_OK;
80 }
81
82 static HRESULT WINAPI IDirect3D9Impl_EnumAdapterModes(LPDIRECT3D9 iface, UINT Adapter, D3DFORMAT Format,
83 UINT Mode, D3DDISPLAYMODE* pMode)
84 {
85 UNIMPLEMENTED
86
87 return D3D_OK;
88 }
89
90 static HRESULT WINAPI IDirect3D9Impl_GetAdapterDisplayMode(LPDIRECT3D9 iface, UINT Adapter, D3DDISPLAYMODE* pMode)
91 {
92 UNIMPLEMENTED
93
94 return D3D_OK;
95 }
96
97 static HRESULT WINAPI IDirect3D9Impl_CheckDeviceType(LPDIRECT3D9 iface, UINT Adapter, D3DDEVTYPE CheckType,
98 D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL Windowed)
99 {
100 UNIMPLEMENTED
101
102 return D3D_OK;
103 }
104
105 static HRESULT WINAPI IDirect3D9Impl_CheckDeviceFormat(LPDIRECT3D9 iface, UINT Adapter, D3DDEVTYPE DeviceType,
106 D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType,
107 D3DFORMAT CheckFormat)
108 {
109 UNIMPLEMENTED
110
111 return D3D_OK;
112 }
113
114 static HRESULT WINAPI IDirect3D9Impl_CheckDeviceMultiSampleType(LPDIRECT3D9 iface, UINT Adapter, D3DDEVTYPE DeviceType,
115 D3DFORMAT SurfaceFormat, BOOL Windowed,
116 D3DMULTISAMPLE_TYPE MultiSampleType, DWORD* pQualityLevels)
117 {
118 UNIMPLEMENTED
119
120 return D3D_OK;
121 }
122
123 static HRESULT WINAPI IDirect3D9Impl_CheckDepthStencilMatch(LPDIRECT3D9 iface, UINT Adapter, D3DDEVTYPE DeviceType,
124 D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat,
125 D3DFORMAT DepthStencilFormat)
126 {
127 UNIMPLEMENTED
128
129 return D3D_OK;
130 }
131
132 static HRESULT WINAPI IDirect3D9Impl_CheckDeviceFormatConversion(LPDIRECT3D9 iface, UINT Adapter, D3DDEVTYPE DeviceType,
133 D3DFORMAT SourceFormat, D3DFORMAT TargetFormat)
134 {
135 UNIMPLEMENTED
136
137 return D3D_OK;
138 }
139
140 static HRESULT WINAPI IDirect3D9Impl_GetDeviceCaps(LPDIRECT3D9 iface, UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps)
141 {
142 UNIMPLEMENTED
143
144 return D3D_OK;
145 }
146
147 static HMONITOR WINAPI IDirect3D9Impl_GetAdapterMonitor(LPDIRECT3D9 iface, UINT Adapter)
148 {
149 UNIMPLEMENTED
150
151 return D3D_OK;
152 }
153
154 static HRESULT WINAPI IDirect3D9Impl_CreateDevice(LPDIRECT3D9 iface, UINT Adapter, D3DDEVTYPE DeviceType,
155 HWND hFocusWindow, DWORD BehaviourFlags,
156 D3DPRESENT_PARAMETERS* pPresentationParameters,
157 struct IDirect3DDevice9** ppReturnedDeviceInterface)
158 {
159 UNIMPLEMENTED
160
161 return D3D_OK;
162 }
163
164 const IDirect3D9Vtbl Direct3D9_Vtbl =
165 {
166 /* IUnknown */
167 IDirect3D9Impl_QueryInterface,
168 IDirect3D9Impl_AddRef,
169 IDirect3D9Impl_Release,
170
171 /* IDirect3D9 */
172 IDirect3D9Impl_RegisterSoftwareDevice,
173 IDirect3D9Impl_GetAdapterCount,
174 IDirect3D9Impl_GetAdapterIdentifier,
175 IDirect3D9Impl_GetAdapterModeCount,
176 IDirect3D9Impl_EnumAdapterModes,
177 IDirect3D9Impl_GetAdapterDisplayMode,
178 IDirect3D9Impl_CheckDeviceType,
179 IDirect3D9Impl_CheckDeviceFormat,
180 IDirect3D9Impl_CheckDeviceMultiSampleType,
181 IDirect3D9Impl_CheckDepthStencilMatch,
182 IDirect3D9Impl_CheckDeviceFormatConversion,
183 IDirect3D9Impl_GetDeviceCaps,
184 IDirect3D9Impl_GetAdapterMonitor,
185 IDirect3D9Impl_CreateDevice
186 };