Create Stubs for IDirectDrawVideoPortNotify and fix return values of IUnknown Stubs.
[reactos.git] / reactos / lib / ddraw / main / surface.c
1 /* $Id$
2 *
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS
5 * FILE: lib/ddraw/main/surface.c
6 * PURPOSE: IDirectDrawSurface7 Implementation
7 * PROGRAMMER: Magnus Olsen, Maarten Bosma
8 *
9 */
10
11 #include "rosdraw.h"
12
13
14 HRESULT WINAPI Main_DDrawSurface_Initialize (LPDIRECTDRAWSURFACE7 iface, LPDIRECTDRAW pDD, LPDDSURFACEDESC2 pDDSD)
15 {
16 DX_STUB;
17 IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
18
19 if (This->owner)
20 return DDERR_ALREADYINITIALIZED;
21
22 if(sizeof(DDSURFACEDESC2) != pDDSD->dwSize)
23 return DDERR_UNSUPPORTED;
24
25 if(!(pDDSD->dwFlags & DDSD_CAPS))
26 return DDERR_INVALIDPARAMS;
27
28 This->owner = (IDirectDrawImpl*)pDD;
29
30 /* can the driver create the surface */
31 DDHAL_CANCREATESURFACEDATA CanCreateData;
32 memset(&CanCreateData, 0, sizeof(DDHAL_CANCREATESURFACEDATA));
33 CanCreateData.lpDD = &This->owner->DirectDrawGlobal;
34 CanCreateData.lpDDSurfaceDesc = (DDSURFACEDESC*)pDDSD;
35 CanCreateData.CanCreateSurface = This->owner->HalInfo.lpDDCallbacks->CanCreateSurface;
36
37 if (CanCreateData.CanCreateSurface(&CanCreateData) == DDHAL_DRIVER_NOTHANDLED)
38 return DDERR_INVALIDPARAMS;
39
40 if(CanCreateData.ddRVal != DD_OK)
41 return CanCreateData.ddRVal;
42
43 /* surface global struct */
44 DDRAWI_DDRAWSURFACE_GBL Global;
45 memset(&Global, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL));
46 Global.lpDD = &This->owner->DirectDrawGlobal;
47 Global.wHeight = This->owner->Height;
48 Global.wWidth = This->owner->Width;
49 Global.dwLinearSize = Global.wWidth * This->owner->Bpp/8;
50
51 /* surface more struct */
52 DDRAWI_DDRAWSURFACE_MORE More;
53 memset(&More, 0, sizeof(DDRAWI_DDRAWSURFACE_MORE));
54 More.dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE);
55
56 /* surface local struct */
57 DDRAWI_DDRAWSURFACE_LCL Local;
58 memset(&Local, 0, sizeof(DDRAWI_DDRAWSURFACE_LCL));
59 Local.lpGbl = &Global;
60 Local.lpSurfMore = &More;
61 Local.ddsCaps = *(DDSCAPS*)&pDDSD->ddsCaps;
62
63 /* we need to set some flags if we create the primary surface */
64 if(pDDSD->ddsCaps.dwCaps == DDSCAPS_PRIMARYSURFACE)
65 {
66 Local.dwFlags |= DDRAWISURF_FRONTBUFFER;
67 Global.dwGlobalFlags |= DDRAWISURFGBL_ISGDISURFACE;
68 }
69
70 /* for the double pointer below */
71 DDRAWI_DDRAWSURFACE_LCL *pLocal[2];
72 pLocal[0] = &Local;
73 pLocal[1] = NULL; // we need this one for bad written drivers
74
75 /* the parameter struct */
76 DDHAL_CREATESURFACEDATA CreateData;
77 memset(&CreateData, 0, sizeof(DDHAL_CREATESURFACEDATA));
78 CreateData.lpDD = &This->owner->DirectDrawGlobal;
79 CreateData.lpDDSurfaceDesc = (DDSURFACEDESC*)pDDSD;
80 CreateData.dwSCnt = 1;
81 CreateData.lplpSList = pLocal;
82 CreateData.CreateSurface = This->owner->HalInfo.lpDDCallbacks->CreateSurface;
83
84 /* this is the call we were waiting for */
85 if(CreateData.CreateSurface(&CreateData) == DDHAL_DRIVER_NOTHANDLED)
86 return DDERR_INVALIDPARAMS;
87
88 if(CreateData.ddRVal != DD_OK)
89 return CreateData.ddRVal;
90
91 OutputDebugString(L"This does not get hit :( ");
92 OutputDebugString(L"Yet ;)");
93
94 return DD_OK;
95 }
96
97 ULONG WINAPI Main_DDrawSurface_AddRef(LPDIRECTDRAWSURFACE7 iface)
98 {
99 IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
100 return InterlockedIncrement(&This->ref);
101 }
102
103 ULONG WINAPI Main_DDrawSurface_Release(LPDIRECTDRAWSURFACE7 iface)
104 {
105 IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
106 ULONG ref = InterlockedDecrement(&This->ref);
107
108 if (ref == 0)
109 HeapFree(GetProcessHeap(), 0, This);
110
111 return ref;
112 }
113
114 /**** Stubs ****/
115
116 HRESULT WINAPI
117 Main_DDrawSurface_QueryInterface(LPDIRECTDRAWSURFACE7 iface, REFIID riid,
118 LPVOID* ppObj)
119 {
120 return E_NOINTERFACE;
121 }
122
123 HRESULT WINAPI Main_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rdst,
124 LPDIRECTDRAWSURFACE7 src, LPRECT rsrc, DWORD dwFlags, LPDDBLTFX lpbltfx)
125 {
126 DX_STUB;
127 }
128
129 HRESULT WINAPI Main_DDrawSurface_Lock (LPDIRECTDRAWSURFACE7 iface, LPRECT prect,
130 LPDDSURFACEDESC2 pDDSD, DWORD flags, HANDLE event)
131 {
132 DX_STUB;
133 }
134
135 HRESULT WINAPI Main_DDrawSurface_Unlock (LPDIRECTDRAWSURFACE7 iface, LPRECT pRect)
136 {
137 DX_STUB;
138 }
139
140 HRESULT WINAPI
141 Main_DDrawSurface_AddAttachedSurface(LPDIRECTDRAWSURFACE7 iface,
142 LPDIRECTDRAWSURFACE7 pAttach)
143 {
144 DX_STUB;
145 }
146
147 /* MSDN: "not currently implemented." */
148 HRESULT WINAPI
149 Main_DDrawSurface_AddOverlayDirtyRect(LPDIRECTDRAWSURFACE7 iface,
150 LPRECT pRect)
151 {
152 DX_STUB;
153 }
154
155 HRESULT WINAPI
156 Main_DDrawSurface_BltFast(LPDIRECTDRAWSURFACE7 iface, DWORD dstx,
157 DWORD dsty, LPDIRECTDRAWSURFACE7 src,
158 LPRECT rsrc, DWORD trans)
159 {
160 DX_STUB;
161 }
162
163 HRESULT WINAPI
164 Main_DDrawSurface_Restore(LPDIRECTDRAWSURFACE7 iface)
165 {
166 DX_STUB;
167 }
168
169 /* MSDN: "not currently implemented." */
170 HRESULT WINAPI
171 Main_DDrawSurface_BltBatch(LPDIRECTDRAWSURFACE7 iface,
172 LPDDBLTBATCH pBatch, DWORD dwCount,
173 DWORD dwFlags)
174 {
175 DX_STUB;
176 }
177
178 HRESULT WINAPI
179 Main_DDrawSurface_ChangeUniquenessValue(LPDIRECTDRAWSURFACE7 iface)
180 {
181 DX_STUB;
182 }
183
184 HRESULT WINAPI
185 Main_DDrawSurface_DeleteAttachedSurface(LPDIRECTDRAWSURFACE7 iface,
186 DWORD dwFlags,
187 LPDIRECTDRAWSURFACE7 pAttach)
188 {
189 DX_STUB;
190 }
191
192 HRESULT WINAPI
193 Main_DDrawSurface_EnumAttachedSurfaces(LPDIRECTDRAWSURFACE7 iface,
194 LPVOID context,
195 LPDDENUMSURFACESCALLBACK7 cb)
196 {
197 DX_STUB;
198 }
199
200 HRESULT WINAPI
201 Main_DDrawSurface_EnumOverlayZOrders(LPDIRECTDRAWSURFACE7 iface,
202 DWORD dwFlags, LPVOID context,
203 LPDDENUMSURFACESCALLBACK7 cb)
204 {
205 DX_STUB;
206 }
207
208 HRESULT WINAPI
209 Main_DDrawSurface_Flip(LPDIRECTDRAWSURFACE7 iface,
210 LPDIRECTDRAWSURFACE7 override, DWORD dwFlags)
211 {
212 DX_STUB;
213 }
214
215 HRESULT WINAPI
216 Main_DDrawSurface_FreePrivateData(LPDIRECTDRAWSURFACE7 iface, REFGUID tag)
217 {
218 DX_STUB;
219 }
220
221 HRESULT WINAPI
222 Main_DDrawSurface_GetAttachedSurface(LPDIRECTDRAWSURFACE7 iface,
223 LPDDSCAPS2 pCaps,
224 LPDIRECTDRAWSURFACE7* ppSurface)
225 {
226 DX_STUB;
227 }
228
229 HRESULT WINAPI
230 Main_DDrawSurface_GetBltStatus(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags)
231 {
232 DX_STUB;
233 }
234
235 HRESULT WINAPI
236 Main_DDrawSurface_GetCaps(LPDIRECTDRAWSURFACE7 iface, LPDDSCAPS2 pCaps)
237 {
238 DX_STUB;
239 }
240
241 HRESULT WINAPI
242 Main_DDrawSurface_GetClipper(LPDIRECTDRAWSURFACE7 iface,
243 LPDIRECTDRAWCLIPPER* ppClipper)
244 {
245 DX_STUB;
246 }
247
248 HRESULT WINAPI
249 Main_DDrawSurface_GetColorKey(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags,
250 LPDDCOLORKEY pCKey)
251 {
252 DX_STUB;
253 }
254
255 HRESULT WINAPI
256 Main_DDrawSurface_GetDC(LPDIRECTDRAWSURFACE7 iface, HDC *phDC)
257 {
258 DX_STUB;
259 }
260
261 HRESULT WINAPI
262 Main_DDrawSurface_GetDDInterface(LPDIRECTDRAWSURFACE7 iface, LPVOID* pDD)
263 {
264 DX_STUB;
265 }
266 HRESULT WINAPI
267 Main_DDrawSurface_GetFlipStatus(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags)
268 {
269 DX_STUB;
270 }
271
272 HRESULT WINAPI
273 Main_DDrawSurface_GetLOD(LPDIRECTDRAWSURFACE7 iface, LPDWORD pdwMaxLOD)
274 {
275 DX_STUB;
276 }
277
278 HRESULT WINAPI
279 Main_DDrawSurface_GetOverlayPosition(LPDIRECTDRAWSURFACE7 iface,
280 LPLONG pX, LPLONG pY)
281 {
282 DX_STUB;
283 }
284 HRESULT WINAPI
285 Main_DDrawSurface_GetPalette(LPDIRECTDRAWSURFACE7 iface,
286 LPDIRECTDRAWPALETTE* ppPalette)
287 {
288 DX_STUB;
289 }
290
291 HRESULT WINAPI
292 Main_DDrawSurface_GetPixelFormat(LPDIRECTDRAWSURFACE7 iface,
293 LPDDPIXELFORMAT pDDPixelFormat)
294 {
295 DX_STUB;
296 }
297
298 HRESULT WINAPI
299 Main_DDrawSurface_GetPriority(LPDIRECTDRAWSURFACE7 iface,
300 LPDWORD pdwPriority)
301 {
302 DX_STUB;
303 }
304
305 HRESULT WINAPI
306 Main_DDrawSurface_GetPrivateData(LPDIRECTDRAWSURFACE7 iface,
307 REFGUID tag, LPVOID pBuffer,
308 LPDWORD pcbBufferSize)
309 {
310 DX_STUB;
311 }
312
313 HRESULT WINAPI
314 Main_DDrawSurface_GetSurfaceDesc(LPDIRECTDRAWSURFACE7 iface,
315 LPDDSURFACEDESC2 pDDSD)
316 {
317 DX_STUB;
318 }
319
320 HRESULT WINAPI
321 Main_DDrawSurface_GetUniquenessValue(LPDIRECTDRAWSURFACE7 iface,
322 LPDWORD pValue)
323 {
324 DX_STUB;
325 }
326
327 HRESULT WINAPI
328 Main_DDrawSurface_IsLost(LPDIRECTDRAWSURFACE7 iface)
329 {
330 DX_STUB;
331 }
332
333 HRESULT WINAPI
334 Main_DDrawSurface_PageLock(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags)
335 {
336 DX_STUB;
337 }
338
339 HRESULT WINAPI
340 Main_DDrawSurface_PageUnlock(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags)
341 {
342 DX_STUB;
343 }
344
345 HRESULT WINAPI
346 Main_DDrawSurface_ReleaseDC(LPDIRECTDRAWSURFACE7 iface, HDC hDC)
347 {
348 DX_STUB;
349 }
350
351 HRESULT WINAPI
352 Main_DDrawSurface_SetClipper (LPDIRECTDRAWSURFACE7 iface,
353 LPDIRECTDRAWCLIPPER pDDClipper)
354 {
355 DX_STUB;
356 }
357
358 HRESULT WINAPI
359 Main_DDrawSurface_SetColorKey (LPDIRECTDRAWSURFACE7 iface,
360 DWORD dwFlags, LPDDCOLORKEY pCKey)
361 {
362 DX_STUB;
363 }
364
365 HRESULT WINAPI
366 Main_DDrawSurface_SetLOD (LPDIRECTDRAWSURFACE7 iface, DWORD dwMaxLOD)
367 {
368 DX_STUB;
369 }
370
371 HRESULT WINAPI
372 Main_DDrawSurface_SetOverlayPosition (LPDIRECTDRAWSURFACE7 iface,
373 LONG X, LONG Y)
374 {
375 DX_STUB;
376 }
377
378 HRESULT WINAPI
379 Main_DDrawSurface_SetPalette (LPDIRECTDRAWSURFACE7 iface,
380 LPDIRECTDRAWPALETTE pPalette)
381 {
382 DX_STUB;
383 }
384
385 HRESULT WINAPI
386 Main_DDrawSurface_SetPriority (LPDIRECTDRAWSURFACE7 iface,
387 DWORD dwPriority)
388 {
389 DX_STUB;
390 }
391
392 HRESULT WINAPI
393 Main_DDrawSurface_SetPrivateData (LPDIRECTDRAWSURFACE7 iface,
394 REFGUID tag, LPVOID pData,
395 DWORD cbSize, DWORD dwFlags)
396 {
397 DX_STUB;
398 }
399
400 HRESULT WINAPI
401 Main_DDrawSurface_UpdateOverlay (LPDIRECTDRAWSURFACE7 iface,
402 LPRECT pSrcRect,
403 LPDIRECTDRAWSURFACE7 pDstSurface,
404 LPRECT pDstRect, DWORD dwFlags,
405 LPDDOVERLAYFX pFX)
406 {
407 DX_STUB;
408 }
409
410 /* MSDN: "not currently implemented." */
411 HRESULT WINAPI
412 Main_DDrawSurface_UpdateOverlayDisplay (LPDIRECTDRAWSURFACE7 iface,
413 DWORD dwFlags)
414 {
415 DX_STUB;
416 }
417
418 HRESULT WINAPI Main_DDrawSurface_UpdateOverlayZOrder (LPDIRECTDRAWSURFACE7 iface,
419 DWORD dwFlags, LPDIRECTDRAWSURFACE7 pDDSRef)
420 {
421 DX_STUB;
422 }
423
424 IDirectDrawSurface7Vtbl DirectDrawSurface7_Vtable =
425 {
426 Main_DDrawSurface_QueryInterface,
427 Main_DDrawSurface_AddRef,
428 Main_DDrawSurface_Release,
429 Main_DDrawSurface_AddAttachedSurface,
430 Main_DDrawSurface_AddOverlayDirtyRect,
431 Main_DDrawSurface_Blt,
432 Main_DDrawSurface_BltBatch,
433 Main_DDrawSurface_BltFast,
434 Main_DDrawSurface_DeleteAttachedSurface,
435 Main_DDrawSurface_EnumAttachedSurfaces,
436 Main_DDrawSurface_EnumOverlayZOrders,
437 Main_DDrawSurface_Flip,
438 Main_DDrawSurface_GetAttachedSurface,
439 Main_DDrawSurface_GetBltStatus,
440 Main_DDrawSurface_GetCaps,
441 Main_DDrawSurface_GetClipper,
442 Main_DDrawSurface_GetColorKey,
443 Main_DDrawSurface_GetDC,
444 Main_DDrawSurface_GetFlipStatus,
445 Main_DDrawSurface_GetOverlayPosition,
446 Main_DDrawSurface_GetPalette,
447 Main_DDrawSurface_GetPixelFormat,
448 Main_DDrawSurface_GetSurfaceDesc,
449 Main_DDrawSurface_Initialize,
450 Main_DDrawSurface_IsLost,
451 Main_DDrawSurface_Lock,
452 Main_DDrawSurface_ReleaseDC,
453 Main_DDrawSurface_Restore,
454 Main_DDrawSurface_SetClipper,
455 Main_DDrawSurface_SetColorKey,
456 Main_DDrawSurface_SetOverlayPosition,
457 Main_DDrawSurface_SetPalette,
458 Main_DDrawSurface_Unlock,
459 Main_DDrawSurface_UpdateOverlay,
460 Main_DDrawSurface_UpdateOverlayDisplay,
461 Main_DDrawSurface_UpdateOverlayZOrder
462 };