Removed some unnecessary #includes and dll dependencies.
[wine/multimedia.git] / dlls / ddraw / direct3d / main.c
blob1fe95db6bdcac691d82417076fbac229ffd45e08
1 #include "config.h"
3 #include <assert.h>
4 #include <unistd.h>
5 #include <fcntl.h>
6 #include <string.h>
7 #include <stdio.h>
9 #include "winerror.h"
10 #include "ddraw.h"
11 #include "d3d.h"
12 #include "options.h"
13 #include "debugtools.h"
15 #include "d3d_private.h"
17 DEFAULT_DEBUG_CHANNEL(ddraw);
19 static ICOM_VTABLE(IDirect3D) d3dvt;
20 static ICOM_VTABLE(IDirect3D2) d3d2vt;
22 /*******************************************************************************
23 * IDirect3D
25 HRESULT WINAPI IDirect3DImpl_QueryInterface(
26 LPDIRECT3D iface,REFIID refiid,LPVOID *obj
27 ) {
28 ICOM_THIS(IDirect3DImpl,iface);
29 /* FIXME: Not sure if this is correct */
31 TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(refiid),obj);
32 if (( IsEqualGUID( &IID_IDirectDraw, refiid ) ) ||
33 ( IsEqualGUID (&IID_IDirectDraw2, refiid ) ) ||
34 ( IsEqualGUID( &IID_IDirectDraw4, refiid ) )
35 ) {
36 *obj = This->ddraw;
37 IDirect3D_AddRef(iface);
38 TRACE(" Creating IDirectDrawX interface (%p)\n", *obj);
39 return S_OK;
41 if (( IsEqualGUID( &IID_IDirect3D, refiid ) ) ||
42 ( IsEqualGUID( &IID_IUnknown, refiid ) ) ) {
43 *obj = This;
44 IDirect3D_AddRef(iface);
45 TRACE(" Creating IDirect3D interface (%p)\n", *obj);
46 return S_OK;
48 if ( IsEqualGUID( &IID_IDirect3D2, refiid ) ) {
49 IDirect3D2Impl* d3d;
51 d3d = HeapAlloc(GetProcessHeap(),0,sizeof(*d3d));
52 d3d->ref = 1;
53 d3d->ddraw = This->ddraw;
54 IDirect3D_AddRef(iface);
55 ICOM_VTBL(d3d) = &d3d2vt;
56 *obj = d3d;
57 TRACE(" Creating IDirect3D2 interface (%p)\n", *obj);
58 return S_OK;
60 FIXME("(%p):interface for IID %s NOT found!\n",This,debugstr_guid(refiid));
61 return OLE_E_ENUM_NOMORE;
64 ULONG WINAPI IDirect3DImpl_AddRef(LPDIRECT3D iface) {
65 ICOM_THIS(IDirect3DImpl,iface);
66 TRACE("(%p)->() incrementing from %lu.\n", This, This->ref );
68 return ++(This->ref);
71 ULONG WINAPI IDirect3DImpl_Release(LPDIRECT3D iface)
73 ICOM_THIS(IDirect3DImpl,iface);
74 TRACE("(%p)->() decrementing from %lu.\n", This, This->ref );
76 if (!--(This->ref)) {
77 IDirectDraw2_Release((IDirectDraw2*)This->ddraw);
78 HeapFree(GetProcessHeap(),0,This);
79 return S_OK;
81 return This->ref;
84 HRESULT WINAPI IDirect3DImpl_Initialize(LPDIRECT3D iface,REFIID refiid) {
85 ICOM_THIS(IDirect3DImpl,iface);
86 /* FIXME: Not sure if this is correct */
87 FIXME("(%p)->(%s):stub.\n",This,debugstr_guid(refiid));
88 return DDERR_ALREADYINITIALIZED;
91 HRESULT WINAPI IDirect3DImpl_EnumDevices(
92 LPDIRECT3D iface, LPD3DENUMDEVICESCALLBACK cb, LPVOID context
93 ) {
94 ICOM_THIS(IDirect3DImpl,iface);
95 FIXME("(%p)->(%p,%p),stub!\n",This,cb,context);
96 return DD_OK;
99 HRESULT WINAPI IDirect3DImpl_CreateLight(
100 LPDIRECT3D iface, LPDIRECT3DLIGHT *lplight, IUnknown *lpunk
102 ICOM_THIS(IDirect3DImpl,iface);
103 FIXME("(%p)->(%p,%p): stub\n", This, lplight, lpunk);
104 return E_FAIL;
107 HRESULT WINAPI IDirect3DImpl_CreateMaterial(
108 LPDIRECT3D iface, LPDIRECT3DMATERIAL *lpmaterial, IUnknown *lpunk
110 ICOM_THIS(IDirect3DImpl,iface);
111 FIXME("(%p)->(%p,%p): stub\n", This, lpmaterial, lpunk);
112 return E_FAIL;
115 HRESULT WINAPI IDirect3DImpl_CreateViewport(
116 LPDIRECT3D iface, LPDIRECT3DVIEWPORT *lpviewport, IUnknown *lpunk
118 ICOM_THIS(IDirect3DImpl,iface);
119 FIXME("(%p)->(%p,%p): stub\n", This, lpviewport, lpunk);
121 return E_FAIL;
124 HRESULT WINAPI IDirect3DImpl_FindDevice(
125 LPDIRECT3D iface, LPD3DFINDDEVICESEARCH lpfinddevsrc,
126 LPD3DFINDDEVICERESULT lpfinddevrst)
128 ICOM_THIS(IDirect3DImpl,iface);
129 FIXME("(%p)->(%p,%p): stub\n", This, lpfinddevsrc, lpfinddevrst);
130 return DD_OK;
133 /* This is for checking the correctness of the prototypes/functions.
134 * Do not remove.
136 static ICOM_VTABLE(IDirect3D) WINE_UNUSED d3dvt = {
137 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
138 IDirect3DImpl_QueryInterface,
139 IDirect3DImpl_AddRef,
140 IDirect3DImpl_Release,
141 IDirect3DImpl_Initialize,
142 IDirect3DImpl_EnumDevices,
143 IDirect3DImpl_CreateLight,
144 IDirect3DImpl_CreateMaterial,
145 IDirect3DImpl_CreateViewport,
146 IDirect3DImpl_FindDevice
149 /*******************************************************************************
150 * IDirect3D2
152 HRESULT WINAPI IDirect3D2Impl_QueryInterface(
153 LPDIRECT3D2 iface,REFIID refiid,LPVOID *obj) {
154 ICOM_THIS(IDirect3D2Impl,iface);
156 /* FIXME: Not sure if this is correct */
158 TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(refiid),obj);
159 if ( ( IsEqualGUID( &IID_IDirectDraw, refiid ) ) ||
160 ( IsEqualGUID( &IID_IDirectDraw2, refiid ) ) ||
161 ( IsEqualGUID( &IID_IDirectDraw4, refiid ) ) ) {
162 *obj = This->ddraw;
163 IDirect3D2_AddRef(iface);
165 TRACE(" Creating IDirectDrawX interface (%p)\n", *obj);
167 return S_OK;
169 if ( ( IsEqualGUID( &IID_IDirect3D2, refiid ) ) ||
170 ( IsEqualGUID( &IID_IUnknown, refiid ) ) ) {
171 *obj = This;
172 IDirect3D2_AddRef(iface);
174 TRACE(" Creating IDirect3D2 interface (%p)\n", *obj);
176 return S_OK;
178 if ( IsEqualGUID( &IID_IDirect3D, refiid ) ) {
179 IDirect3DImpl* d3d;
181 d3d = HeapAlloc(GetProcessHeap(),0,sizeof(*d3d));
182 d3d->ref = 1;
183 d3d->ddraw = This->ddraw;
184 IDirect3D2_AddRef(iface);
185 ICOM_VTBL(d3d) = &d3dvt;
186 *obj = d3d;
187 TRACE(" Creating IDirect3D interface (%p)\n", *obj);
188 return S_OK;
190 FIXME("(%p):interface for IID %s NOT found!\n",This,debugstr_guid(refiid));
191 return OLE_E_ENUM_NOMORE;
194 ULONG WINAPI IDirect3D2Impl_AddRef(LPDIRECT3D2 iface) {
195 ICOM_THIS(IDirect3D2Impl,iface);
196 TRACE("(%p)->() incrementing from %lu.\n", This, This->ref );
198 return ++(This->ref);
201 ULONG WINAPI IDirect3D2Impl_Release(LPDIRECT3D2 iface) {
202 ICOM_THIS(IDirect3D2Impl,iface);
203 TRACE("(%p)->() decrementing from %lu.\n", This, This->ref );
205 if (!--(This->ref)) {
206 IDirectDraw2_Release((IDirectDraw2*)This->ddraw);
207 HeapFree(GetProcessHeap(),0,This);
208 return S_OK;
210 return This->ref;
213 HRESULT WINAPI IDirect3D2Impl_EnumDevices(
214 LPDIRECT3D2 iface,LPD3DENUMDEVICESCALLBACK cb, LPVOID context
216 ICOM_THIS(IDirect3D2Impl,iface);
217 FIXME("(%p)->(%p,%p),stub!\n",This,cb,context);
218 return DD_OK;
221 HRESULT WINAPI IDirect3D2Impl_CreateLight(
222 LPDIRECT3D2 iface, LPDIRECT3DLIGHT *lplight, IUnknown *lpunk
224 ICOM_THIS(IDirect3D2Impl,iface);
225 FIXME("(%p)->(%p,%p): stub\n", This, lplight, lpunk);
226 return E_FAIL;
229 HRESULT WINAPI IDirect3D2Impl_CreateMaterial(
230 LPDIRECT3D2 iface, LPDIRECT3DMATERIAL2 *lpmaterial, IUnknown *lpunk
232 ICOM_THIS(IDirect3D2Impl,iface);
233 FIXME("(%p)->(%p,%p): stub\n", This, lpmaterial, lpunk);
234 return E_FAIL;
237 HRESULT WINAPI IDirect3D2Impl_CreateViewport(
238 LPDIRECT3D2 iface, LPDIRECT3DVIEWPORT2 *lpviewport, IUnknown *lpunk
240 ICOM_THIS(IDirect3D2Impl,iface);
241 FIXME("(%p)->(%p,%p): stub\n", This, lpviewport, lpunk);
242 return E_FAIL;
245 HRESULT WINAPI IDirect3D2Impl_FindDevice(
246 LPDIRECT3D2 iface, LPD3DFINDDEVICESEARCH lpfinddevsrc,
247 LPD3DFINDDEVICERESULT lpfinddevrst)
249 ICOM_THIS(IDirect3D2Impl,iface);
250 FIXME("(%p)->(%p,%p): stub\n", This, lpfinddevsrc, lpfinddevrst);
251 return DD_OK;
254 HRESULT WINAPI IDirect3D2Impl_CreateDevice(
255 LPDIRECT3D2 iface, REFCLSID rguid, LPDIRECTDRAWSURFACE surface,
256 LPDIRECT3DDEVICE2 *device)
258 ICOM_THIS(IDirect3D2Impl,iface);
259 FIXME("(%p)->(%s,%p,%p): stub\n",This,debugstr_guid(rguid),surface,device);
260 return DDERR_INVALIDPARAMS;
263 /* This is for checking the correctness of the prototypes/functions.
264 * Do not remove.
266 static ICOM_VTABLE(IDirect3D2) WINE_UNUSED d3d2vt =
268 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
269 IDirect3D2Impl_QueryInterface,
270 IDirect3D2Impl_AddRef,
271 IDirect3D2Impl_Release,
272 IDirect3D2Impl_EnumDevices,
273 IDirect3D2Impl_CreateLight,
274 IDirect3D2Impl_CreateMaterial,
275 IDirect3D2Impl_CreateViewport,
276 IDirect3D2Impl_FindDevice,
277 IDirect3D2Impl_CreateDevice