15 #include "debugtools.h"
17 #include "d3d_private.h"
19 DEFAULT_DEBUG_CHANNEL(ddraw);
21 static ICOM_VTABLE(IDirect3D) d3dvt;
22 static ICOM_VTABLE(IDirect3D2) d3d2vt;
24 /*******************************************************************************
27 HRESULT WINAPI IDirect3DImpl_QueryInterface(
28 LPDIRECT3D iface,REFIID refiid,LPVOID *obj
30 ICOM_THIS(IDirect3DImpl,iface);
31 /* FIXME: Not sure if this is correct */
33 TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(refiid),obj);
34 if (( IsEqualGUID( &IID_IDirectDraw, refiid ) ) ||
35 ( IsEqualGUID (&IID_IDirectDraw2, refiid ) ) ||
36 ( IsEqualGUID( &IID_IDirectDraw4, refiid ) )
39 IDirect3D_AddRef(iface);
40 TRACE(" Creating IDirectDrawX interface (%p)\n", *obj);
43 if (( IsEqualGUID( &IID_IDirect3D, refiid ) ) ||
44 ( IsEqualGUID( &IID_IUnknown, refiid ) ) ) {
46 IDirect3D_AddRef(iface);
47 TRACE(" Creating IDirect3D interface (%p)\n", *obj);
50 if ( IsEqualGUID( &IID_IDirect3D2, refiid ) ) {
53 d3d = HeapAlloc(GetProcessHeap(),0,sizeof(*d3d));
55 d3d->ddraw = This->ddraw;
56 IDirect3D_AddRef(iface);
57 ICOM_VTBL(d3d) = &d3d2vt;
59 TRACE(" Creating IDirect3D2 interface (%p)\n", *obj);
62 FIXME("(%p):interface for IID %s NOT found!\n",This,debugstr_guid(refiid));
63 return OLE_E_ENUM_NOMORE;
66 ULONG WINAPI IDirect3DImpl_AddRef(LPDIRECT3D iface) {
67 ICOM_THIS(IDirect3DImpl,iface);
68 TRACE("(%p)->() incrementing from %lu.\n", This, This->ref );
73 ULONG WINAPI IDirect3DImpl_Release(LPDIRECT3D iface)
75 ICOM_THIS(IDirect3DImpl,iface);
76 TRACE("(%p)->() decrementing from %lu.\n", This, This->ref );
79 IDirectDraw2_Release((IDirectDraw2*)This->ddraw);
80 HeapFree(GetProcessHeap(),0,This);
86 HRESULT WINAPI IDirect3DImpl_Initialize(LPDIRECT3D iface,REFIID refiid) {
87 ICOM_THIS(IDirect3DImpl,iface);
88 /* FIXME: Not sure if this is correct */
89 FIXME("(%p)->(%s):stub.\n",This,debugstr_guid(refiid));
90 return DDERR_ALREADYINITIALIZED;
93 HRESULT WINAPI IDirect3DImpl_EnumDevices(
94 LPDIRECT3D iface, LPD3DENUMDEVICESCALLBACK cb, LPVOID context
96 ICOM_THIS(IDirect3DImpl,iface);
97 FIXME("(%p)->(%p,%p),stub!\n",This,cb,context);
101 HRESULT WINAPI IDirect3DImpl_CreateLight(
102 LPDIRECT3D iface, LPDIRECT3DLIGHT *lplight, IUnknown *lpunk
104 ICOM_THIS(IDirect3DImpl,iface);
105 FIXME("(%p)->(%p,%p): stub\n", This, lplight, lpunk);
109 HRESULT WINAPI IDirect3DImpl_CreateMaterial(
110 LPDIRECT3D iface, LPDIRECT3DMATERIAL *lpmaterial, IUnknown *lpunk
112 ICOM_THIS(IDirect3DImpl,iface);
113 FIXME("(%p)->(%p,%p): stub\n", This, lpmaterial, lpunk);
117 HRESULT WINAPI IDirect3DImpl_CreateViewport(
118 LPDIRECT3D iface, LPDIRECT3DVIEWPORT *lpviewport, IUnknown *lpunk
120 ICOM_THIS(IDirect3DImpl,iface);
121 FIXME("(%p)->(%p,%p): stub\n", This, lpviewport, lpunk);
126 HRESULT WINAPI IDirect3DImpl_FindDevice(
127 LPDIRECT3D iface, LPD3DFINDDEVICESEARCH lpfinddevsrc,
128 LPD3DFINDDEVICERESULT lpfinddevrst)
130 ICOM_THIS(IDirect3DImpl,iface);
131 FIXME("(%p)->(%p,%p): stub\n", This, lpfinddevsrc, lpfinddevrst);
135 /* This is for checking the correctness of the prototypes/functions.
138 static ICOM_VTABLE(IDirect3D) WINE_UNUSED d3dvt = {
139 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
140 IDirect3DImpl_QueryInterface,
141 IDirect3DImpl_AddRef,
142 IDirect3DImpl_Release,
143 IDirect3DImpl_Initialize,
144 IDirect3DImpl_EnumDevices,
145 IDirect3DImpl_CreateLight,
146 IDirect3DImpl_CreateMaterial,
147 IDirect3DImpl_CreateViewport,
148 IDirect3DImpl_FindDevice
151 /*******************************************************************************
154 HRESULT WINAPI IDirect3D2Impl_QueryInterface(
155 LPDIRECT3D2 iface,REFIID refiid,LPVOID *obj) {
156 ICOM_THIS(IDirect3D2Impl,iface);
158 /* FIXME: Not sure if this is correct */
160 TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(refiid),obj);
161 if ( ( IsEqualGUID( &IID_IDirectDraw, refiid ) ) ||
162 ( IsEqualGUID( &IID_IDirectDraw2, refiid ) ) ||
163 ( IsEqualGUID( &IID_IDirectDraw4, refiid ) ) ) {
165 IDirect3D2_AddRef(iface);
167 TRACE(" Creating IDirectDrawX interface (%p)\n", *obj);
171 if ( ( IsEqualGUID( &IID_IDirect3D2, refiid ) ) ||
172 ( IsEqualGUID( &IID_IUnknown, refiid ) ) ) {
174 IDirect3D2_AddRef(iface);
176 TRACE(" Creating IDirect3D2 interface (%p)\n", *obj);
180 if ( IsEqualGUID( &IID_IDirect3D, refiid ) ) {
183 d3d = HeapAlloc(GetProcessHeap(),0,sizeof(*d3d));
185 d3d->ddraw = This->ddraw;
186 IDirect3D2_AddRef(iface);
187 ICOM_VTBL(d3d) = &d3dvt;
189 TRACE(" Creating IDirect3D interface (%p)\n", *obj);
192 FIXME("(%p):interface for IID %s NOT found!\n",This,debugstr_guid(refiid));
193 return OLE_E_ENUM_NOMORE;
196 ULONG WINAPI IDirect3D2Impl_AddRef(LPDIRECT3D2 iface) {
197 ICOM_THIS(IDirect3D2Impl,iface);
198 TRACE("(%p)->() incrementing from %lu.\n", This, This->ref );
200 return ++(This->ref);
203 ULONG WINAPI IDirect3D2Impl_Release(LPDIRECT3D2 iface) {
204 ICOM_THIS(IDirect3D2Impl,iface);
205 TRACE("(%p)->() decrementing from %lu.\n", This, This->ref );
207 if (!--(This->ref)) {
208 IDirectDraw2_Release((IDirectDraw2*)This->ddraw);
209 HeapFree(GetProcessHeap(),0,This);
215 HRESULT WINAPI IDirect3D2Impl_EnumDevices(
216 LPDIRECT3D2 iface,LPD3DENUMDEVICESCALLBACK cb, LPVOID context
218 ICOM_THIS(IDirect3D2Impl,iface);
219 FIXME("(%p)->(%p,%p),stub!\n",This,cb,context);
223 HRESULT WINAPI IDirect3D2Impl_CreateLight(
224 LPDIRECT3D2 iface, LPDIRECT3DLIGHT *lplight, IUnknown *lpunk
226 ICOM_THIS(IDirect3D2Impl,iface);
227 FIXME("(%p)->(%p,%p): stub\n", This, lplight, lpunk);
231 HRESULT WINAPI IDirect3D2Impl_CreateMaterial(
232 LPDIRECT3D2 iface, LPDIRECT3DMATERIAL2 *lpmaterial, IUnknown *lpunk
234 ICOM_THIS(IDirect3D2Impl,iface);
235 FIXME("(%p)->(%p,%p): stub\n", This, lpmaterial, lpunk);
239 HRESULT WINAPI IDirect3D2Impl_CreateViewport(
240 LPDIRECT3D2 iface, LPDIRECT3DVIEWPORT2 *lpviewport, IUnknown *lpunk
242 ICOM_THIS(IDirect3D2Impl,iface);
243 FIXME("(%p)->(%p,%p): stub\n", This, lpviewport, lpunk);
247 HRESULT WINAPI IDirect3D2Impl_FindDevice(
248 LPDIRECT3D2 iface, LPD3DFINDDEVICESEARCH lpfinddevsrc,
249 LPD3DFINDDEVICERESULT lpfinddevrst)
251 ICOM_THIS(IDirect3D2Impl,iface);
252 FIXME("(%p)->(%p,%p): stub\n", This, lpfinddevsrc, lpfinddevrst);
256 HRESULT WINAPI IDirect3D2Impl_CreateDevice(
257 LPDIRECT3D2 iface, REFCLSID rguid, LPDIRECTDRAWSURFACE surface,
258 LPDIRECT3DDEVICE2 *device)
260 ICOM_THIS(IDirect3D2Impl,iface);
261 FIXME("(%p)->(%s,%p,%p): stub\n",This,debugstr_guid(rguid),surface,device);
262 return DDERR_INVALIDPARAMS;
265 /* This is for checking the correctness of the prototypes/functions.
268 static ICOM_VTABLE(IDirect3D2) WINE_UNUSED d3d2vt =
270 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
271 IDirect3D2Impl_QueryInterface,
272 IDirect3D2Impl_AddRef,
273 IDirect3D2Impl_Release,
274 IDirect3D2Impl_EnumDevices,
275 IDirect3D2Impl_CreateLight,
276 IDirect3D2Impl_CreateMaterial,
277 IDirect3D2Impl_CreateViewport,
278 IDirect3D2Impl_FindDevice,
279 IDirect3D2Impl_CreateDevice