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 /*******************************************************************************
25 HRESULT WINAPI
IDirect3DImpl_QueryInterface(
26 LPDIRECT3D iface
,REFIID refiid
,LPVOID
*obj
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
) )
37 IDirect3D_AddRef(iface
);
38 TRACE(" Creating IDirectDrawX interface (%p)\n", *obj
);
41 if (( IsEqualGUID( &IID_IDirect3D
, refiid
) ) ||
42 ( IsEqualGUID( &IID_IUnknown
, refiid
) ) ) {
44 IDirect3D_AddRef(iface
);
45 TRACE(" Creating IDirect3D interface (%p)\n", *obj
);
48 if ( IsEqualGUID( &IID_IDirect3D2
, refiid
) ) {
51 d3d
= HeapAlloc(GetProcessHeap(),0,sizeof(*d3d
));
53 d3d
->ddraw
= This
->ddraw
;
54 IDirect3D_AddRef(iface
);
55 ICOM_VTBL(d3d
) = &d3d2vt
;
57 TRACE(" Creating IDirect3D2 interface (%p)\n", *obj
);
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
);
71 ULONG WINAPI
IDirect3DImpl_Release(LPDIRECT3D iface
)
73 ICOM_THIS(IDirect3DImpl
,iface
);
74 TRACE("(%p)->() decrementing from %lu.\n", This
, This
->ref
);
77 IDirectDraw2_Release((IDirectDraw2
*)This
->ddraw
);
78 HeapFree(GetProcessHeap(),0,This
);
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
94 ICOM_THIS(IDirect3DImpl
,iface
);
95 FIXME("(%p)->(%p,%p),stub!\n",This
,cb
,context
);
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
);
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
);
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
);
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
);
133 /* This is for checking the correctness of the prototypes/functions.
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 /*******************************************************************************
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
) ) ) {
163 IDirect3D2_AddRef(iface
);
165 TRACE(" Creating IDirectDrawX interface (%p)\n", *obj
);
169 if ( ( IsEqualGUID( &IID_IDirect3D2
, refiid
) ) ||
170 ( IsEqualGUID( &IID_IUnknown
, refiid
) ) ) {
172 IDirect3D2_AddRef(iface
);
174 TRACE(" Creating IDirect3D2 interface (%p)\n", *obj
);
178 if ( IsEqualGUID( &IID_IDirect3D
, refiid
) ) {
181 d3d
= HeapAlloc(GetProcessHeap(),0,sizeof(*d3d
));
183 d3d
->ddraw
= This
->ddraw
;
184 IDirect3D2_AddRef(iface
);
185 ICOM_VTBL(d3d
) = &d3dvt
;
187 TRACE(" Creating IDirect3D interface (%p)\n", *obj
);
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
);
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
);
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
);
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
);
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
);
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
);
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.
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