12 #include "debugtools.h"
14 #include "d3d_private.h"
16 DEFAULT_DEBUG_CHANNEL(ddraw);
18 static ICOM_VTABLE(IDirect3D) d3dvt;
19 static ICOM_VTABLE(IDirect3D2) d3d2vt;
21 /*******************************************************************************
24 HRESULT WINAPI IDirect3DImpl_QueryInterface(
25 LPDIRECT3D iface,REFIID refiid,LPVOID *obj
27 ICOM_THIS(IDirect3DImpl,iface);
28 /* FIXME: Not sure if this is correct */
30 TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(refiid),obj);
31 if (( IsEqualGUID( &IID_IDirectDraw, refiid ) ) ||
32 ( IsEqualGUID (&IID_IDirectDraw2, refiid ) ) ||
33 ( IsEqualGUID( &IID_IDirectDraw4, refiid ) )
36 IDirect3D_AddRef(iface);
37 TRACE(" Creating IDirectDrawX interface (%p)\n", *obj);
40 if (( IsEqualGUID( &IID_IDirect3D, refiid ) ) ||
41 ( IsEqualGUID( &IID_IUnknown, refiid ) ) ) {
43 IDirect3D_AddRef(iface);
44 TRACE(" Creating IDirect3D interface (%p)\n", *obj);
47 if ( IsEqualGUID( &IID_IDirect3D2, refiid ) ) {
50 d3d = HeapAlloc(GetProcessHeap(),0,sizeof(*d3d));
52 d3d->ddraw = This->ddraw;
53 IDirect3D_AddRef(iface);
54 ICOM_VTBL(d3d) = &d3d2vt;
56 TRACE(" Creating IDirect3D2 interface (%p)\n", *obj);
59 FIXME("(%p):interface for IID %s NOT found!\n",This,debugstr_guid(refiid));
60 return OLE_E_ENUM_NOMORE;
63 ULONG WINAPI IDirect3DImpl_AddRef(LPDIRECT3D iface) {
64 ICOM_THIS(IDirect3DImpl,iface);
65 TRACE("(%p)->() incrementing from %lu.\n", This, This->ref );
70 ULONG WINAPI IDirect3DImpl_Release(LPDIRECT3D iface)
72 ICOM_THIS(IDirect3DImpl,iface);
73 TRACE("(%p)->() decrementing from %lu.\n", This, This->ref );
76 IDirectDraw2_Release((IDirectDraw2*)This->ddraw);
77 HeapFree(GetProcessHeap(),0,This);
83 HRESULT WINAPI IDirect3DImpl_Initialize(LPDIRECT3D iface,REFIID refiid) {
84 ICOM_THIS(IDirect3DImpl,iface);
85 /* FIXME: Not sure if this is correct */
86 FIXME("(%p)->(%s):stub.\n",This,debugstr_guid(refiid));
87 return DDERR_ALREADYINITIALIZED;
90 HRESULT WINAPI IDirect3DImpl_EnumDevices(
91 LPDIRECT3D iface, LPD3DENUMDEVICESCALLBACK cb, LPVOID context
93 ICOM_THIS(IDirect3DImpl,iface);
94 FIXME("(%p)->(%p,%p),stub!\n",This,cb,context);
98 HRESULT WINAPI IDirect3DImpl_CreateLight(
99 LPDIRECT3D iface, LPDIRECT3DLIGHT *lplight, IUnknown *lpunk
101 ICOM_THIS(IDirect3DImpl,iface);
102 FIXME("(%p)->(%p,%p): stub\n", This, lplight, lpunk);
106 HRESULT WINAPI IDirect3DImpl_CreateMaterial(
107 LPDIRECT3D iface, LPDIRECT3DMATERIAL *lpmaterial, IUnknown *lpunk
109 ICOM_THIS(IDirect3DImpl,iface);
110 FIXME("(%p)->(%p,%p): stub\n", This, lpmaterial, lpunk);
114 HRESULT WINAPI IDirect3DImpl_CreateViewport(
115 LPDIRECT3D iface, LPDIRECT3DVIEWPORT *lpviewport, IUnknown *lpunk
117 ICOM_THIS(IDirect3DImpl,iface);
118 FIXME("(%p)->(%p,%p): stub\n", This, lpviewport, lpunk);
123 HRESULT WINAPI IDirect3DImpl_FindDevice(
124 LPDIRECT3D iface, LPD3DFINDDEVICESEARCH lpfinddevsrc,
125 LPD3DFINDDEVICERESULT lpfinddevrst)
127 ICOM_THIS(IDirect3DImpl,iface);
128 FIXME("(%p)->(%p,%p): stub\n", This, lpfinddevsrc, lpfinddevrst);
132 /* This is for checking the correctness of the prototypes/functions.
135 static ICOM_VTABLE(IDirect3D) WINE_UNUSED d3dvt = {
136 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
137 IDirect3DImpl_QueryInterface,
138 IDirect3DImpl_AddRef,
139 IDirect3DImpl_Release,
140 IDirect3DImpl_Initialize,
141 IDirect3DImpl_EnumDevices,
142 IDirect3DImpl_CreateLight,
143 IDirect3DImpl_CreateMaterial,
144 IDirect3DImpl_CreateViewport,
145 IDirect3DImpl_FindDevice
148 /*******************************************************************************
151 HRESULT WINAPI IDirect3D2Impl_QueryInterface(
152 LPDIRECT3D2 iface,REFIID refiid,LPVOID *obj) {
153 ICOM_THIS(IDirect3D2Impl,iface);
155 /* FIXME: Not sure if this is correct */
157 TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(refiid),obj);
158 if ( ( IsEqualGUID( &IID_IDirectDraw, refiid ) ) ||
159 ( IsEqualGUID( &IID_IDirectDraw2, refiid ) ) ||
160 ( IsEqualGUID( &IID_IDirectDraw4, refiid ) ) ) {
162 IDirect3D2_AddRef(iface);
164 TRACE(" Creating IDirectDrawX interface (%p)\n", *obj);
168 if ( ( IsEqualGUID( &IID_IDirect3D2, refiid ) ) ||
169 ( IsEqualGUID( &IID_IUnknown, refiid ) ) ) {
171 IDirect3D2_AddRef(iface);
173 TRACE(" Creating IDirect3D2 interface (%p)\n", *obj);
177 if ( IsEqualGUID( &IID_IDirect3D, refiid ) ) {
180 d3d = HeapAlloc(GetProcessHeap(),0,sizeof(*d3d));
182 d3d->ddraw = This->ddraw;
183 IDirect3D2_AddRef(iface);
184 ICOM_VTBL(d3d) = &d3dvt;
186 TRACE(" Creating IDirect3D interface (%p)\n", *obj);
189 FIXME("(%p):interface for IID %s NOT found!\n",This,debugstr_guid(refiid));
190 return OLE_E_ENUM_NOMORE;
193 ULONG WINAPI IDirect3D2Impl_AddRef(LPDIRECT3D2 iface) {
194 ICOM_THIS(IDirect3D2Impl,iface);
195 TRACE("(%p)->() incrementing from %lu.\n", This, This->ref );
197 return ++(This->ref);
200 ULONG WINAPI IDirect3D2Impl_Release(LPDIRECT3D2 iface) {
201 ICOM_THIS(IDirect3D2Impl,iface);
202 TRACE("(%p)->() decrementing from %lu.\n", This, This->ref );
204 if (!--(This->ref)) {
205 IDirectDraw2_Release((IDirectDraw2*)This->ddraw);
206 HeapFree(GetProcessHeap(),0,This);
212 HRESULT WINAPI IDirect3D2Impl_EnumDevices(
213 LPDIRECT3D2 iface,LPD3DENUMDEVICESCALLBACK cb, LPVOID context
215 ICOM_THIS(IDirect3D2Impl,iface);
216 FIXME("(%p)->(%p,%p),stub!\n",This,cb,context);
220 HRESULT WINAPI IDirect3D2Impl_CreateLight(
221 LPDIRECT3D2 iface, LPDIRECT3DLIGHT *lplight, IUnknown *lpunk
223 ICOM_THIS(IDirect3D2Impl,iface);
224 FIXME("(%p)->(%p,%p): stub\n", This, lplight, lpunk);
228 HRESULT WINAPI IDirect3D2Impl_CreateMaterial(
229 LPDIRECT3D2 iface, LPDIRECT3DMATERIAL2 *lpmaterial, IUnknown *lpunk
231 ICOM_THIS(IDirect3D2Impl,iface);
232 FIXME("(%p)->(%p,%p): stub\n", This, lpmaterial, lpunk);
236 HRESULT WINAPI IDirect3D2Impl_CreateViewport(
237 LPDIRECT3D2 iface, LPDIRECT3DVIEWPORT2 *lpviewport, IUnknown *lpunk
239 ICOM_THIS(IDirect3D2Impl,iface);
240 FIXME("(%p)->(%p,%p): stub\n", This, lpviewport, lpunk);
244 HRESULT WINAPI IDirect3D2Impl_FindDevice(
245 LPDIRECT3D2 iface, LPD3DFINDDEVICESEARCH lpfinddevsrc,
246 LPD3DFINDDEVICERESULT lpfinddevrst)
248 ICOM_THIS(IDirect3D2Impl,iface);
249 FIXME("(%p)->(%p,%p): stub\n", This, lpfinddevsrc, lpfinddevrst);
253 HRESULT WINAPI IDirect3D2Impl_CreateDevice(
254 LPDIRECT3D2 iface, REFCLSID rguid, LPDIRECTDRAWSURFACE surface,
255 LPDIRECT3DDEVICE2 *device)
257 ICOM_THIS(IDirect3D2Impl,iface);
258 FIXME("(%p)->(%s,%p,%p): stub\n",This,debugstr_guid(rguid),surface,device);
259 return DDERR_INVALIDPARAMS;
262 /* This is for checking the correctness of the prototypes/functions.
265 static ICOM_VTABLE(IDirect3D2) WINE_UNUSED d3d2vt =
267 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
268 IDirect3D2Impl_QueryInterface,
269 IDirect3D2Impl_AddRef,
270 IDirect3D2Impl_Release,
271 IDirect3D2Impl_EnumDevices,
272 IDirect3D2Impl_CreateLight,
273 IDirect3D2Impl_CreateMaterial,
274 IDirect3D2Impl_CreateViewport,
275 IDirect3D2Impl_FindDevice,
276 IDirect3D2Impl_CreateDevice