2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * PURPOSE: Native DirectDraw implementation
5 * FILE: subsystems/win32/win32k/ntddraw/ddsurf.c
6 * PROGRAMER: Magnus Olsen (greatlord@reactos.org)
8 * 19/7-2006 Magnus Olsen
14 /************************************************************************/
15 /* NtGdiDdDestroySurface */
16 /************************************************************************/
19 NtGdiDdDestroySurface(HANDLE hSurface
, BOOL bRealDestroy
)
21 PGD_DXDDDESTROYSURFACE pfnDdDestroySurface
= (PGD_DXDDDESTROYSURFACE
)gpDxFuncs
[DXG_INDEX_DxDdDestroySurface
].pfn
;
23 if (pfnDdDestroySurface
== NULL
)
25 DPRINT1("Warning: no pfnDdDestroySurface");
26 return DDHAL_DRIVER_NOTHANDLED
;
29 DPRINT1("Calling on dxg.sys pfnDdDestroySurface");
30 return pfnDdDestroySurface(hSurface
, bRealDestroy
);
33 /************************************************************************/
35 /************************************************************************/
38 NtGdiDdFlip(HANDLE hSurfaceCurrent
,
39 HANDLE hSurfaceTarget
,
40 HANDLE hSurfaceCurrentLeft
,
41 HANDLE hSurfaceTargetLeft
,
42 PDD_FLIPDATA puFlipData
)
44 PGD_DXDDFLIP pfnDdDdFlip
= (PGD_DXDDFLIP
)gpDxFuncs
[DXG_INDEX_DxDdFlip
].pfn
;
46 if (pfnDdDdFlip
== NULL
)
48 DPRINT1("Warning: no pfnDdDdFlip");
49 return DDHAL_DRIVER_NOTHANDLED
;
52 DPRINT1("Calling on dxg.sys pfnDdDdFlip");
53 return pfnDdDdFlip(hSurfaceCurrent
, hSurfaceTarget
, hSurfaceCurrentLeft
, hSurfaceTargetLeft
, puFlipData
);
56 /************************************************************************/
58 /************************************************************************/
61 NtGdiDdLock(HANDLE hSurface
,
62 PDD_LOCKDATA puLockData
,
65 PGD_DXDDLOCK pfnDdLock
= (PGD_DXDDLOCK
)gpDxFuncs
[DXG_INDEX_DxDdLock
].pfn
;
67 if (pfnDdLock
== NULL
)
69 DPRINT1("Warning: no pfnDdLock");
70 return DDHAL_DRIVER_NOTHANDLED
;
73 DPRINT1("Calling on dxg.sys pfnDdLock");
74 return pfnDdLock(hSurface
, puLockData
, hdcClip
);
77 /************************************************************************/
79 /************************************************************************/
82 NtGdiDdUnlock(HANDLE hSurface
,
83 PDD_UNLOCKDATA puUnlockData
)
85 PGD_DXDDUNLOCK pfnDdUnlock
= (PGD_DXDDUNLOCK
)gpDxFuncs
[DXG_INDEX_DxDdUnlock
].pfn
;
87 if (pfnDdUnlock
== NULL
)
89 DPRINT1("Warning: no pfnDdUnlock");
90 return DDHAL_DRIVER_NOTHANDLED
;
93 DPRINT1("Calling on dxg.sys pfnDdUnlock");
94 return pfnDdUnlock(hSurface
, puUnlockData
);
97 /************************************************************************/
99 /************************************************************************/
102 NtGdiDdBlt(HANDLE hSurfaceDest
,
104 PDD_BLTDATA puBltData
)
106 PGD_DDBLT pfnDdBlt
= (PGD_DDBLT
)gpDxFuncs
[DXG_INDEX_DxDdBlt
].pfn
;
108 if (pfnDdBlt
== NULL
)
110 DPRINT1("Warning: no pfnDdBlt");
111 return DDHAL_DRIVER_NOTHANDLED
;
114 DPRINT1("Calling on dxg.sys DdBlt");
115 return pfnDdBlt(hSurfaceDest
,hSurfaceSrc
,puBltData
);
118 /************************************************************************/
119 /* NtGdiDdSetColorKey */
120 /************************************************************************/
123 NtGdiDdSetColorKey(HANDLE hSurface
,
124 PDD_SETCOLORKEYDATA puSetColorKeyData
)
126 PGD_DXDDSETCOLORKEY pfnDdSetColorKey
= (PGD_DXDDSETCOLORKEY
)gpDxFuncs
[DXG_INDEX_DxDdSetColorKey
].pfn
;
128 if (pfnDdSetColorKey
== NULL
)
130 DPRINT1("Warning: no pfnDdSetColorKey");
131 return DDHAL_DRIVER_NOTHANDLED
;
134 DPRINT1("Calling on dxg.sys pfnDdSetColorKey");
135 return pfnDdSetColorKey(hSurface
,puSetColorKeyData
);
139 /************************************************************************/
140 /* NtGdiDdAddAttachedSurface */
141 /************************************************************************/
145 NtGdiDdAddAttachedSurface(HANDLE hSurface
,
146 HANDLE hSurfaceAttached
,
147 PDD_ADDATTACHEDSURFACEDATA puAddAttachedSurfaceData
)
149 PGD_DDADDATTACHEDSURFACE pfnDdAddAttachedSurface
= (PGD_DDADDATTACHEDSURFACE
)gpDxFuncs
[DXG_INDEX_DxDdAddAttachedSurface
].pfn
;
151 if (pfnDdAddAttachedSurface
== NULL
)
153 DPRINT1("Warning: no pfnDdAddAttachedSurface");
154 return DDHAL_DRIVER_NOTHANDLED
;
157 DPRINT1("Calling on dxg.sys DdAddAttachedSurface");
158 return pfnDdAddAttachedSurface(hSurface
,hSurfaceAttached
,puAddAttachedSurfaceData
);
161 /************************************************************************/
162 /* NtGdiDdGetBltStatus */
163 /************************************************************************/
166 NtGdiDdGetBltStatus(HANDLE hSurface
,
167 PDD_GETBLTSTATUSDATA puGetBltStatusData
)
169 PGD_DXDDGETBLTSTATUS pfnDdGetBltStatus
= (PGD_DXDDGETBLTSTATUS
)gpDxFuncs
[DXG_INDEX_DxDdGetBltStatus
].pfn
;
171 if (pfnDdGetBltStatus
== NULL
)
173 DPRINT1("Warning: no pfnDdGetBltStatus");
174 return DDHAL_DRIVER_NOTHANDLED
;
177 DPRINT1("Calling on dxg.sys pfnDdGetBltStatus");
178 return pfnDdGetBltStatus(hSurface
,puGetBltStatusData
);
181 /************************************************************************/
182 /* NtGdiDdGetFlipStatus */
183 /************************************************************************/
186 NtGdiDdGetFlipStatus(HANDLE hSurface
,
187 PDD_GETFLIPSTATUSDATA puGetFlipStatusData
)
189 PGD_DXDDGETFLIPSTATUS pfnDdGetFlipStatus
= (PGD_DXDDGETFLIPSTATUS
)gpDxFuncs
[DXG_INDEX_DxDdGetFlipStatus
].pfn
;
191 if (pfnDdGetFlipStatus
== NULL
)
193 DPRINT1("Warning: no pfnDdGetFlipStatus");
194 return DDHAL_DRIVER_NOTHANDLED
;
197 DPRINT1("Calling on dxg.sys pfnDdGetFlipStatus");
198 return pfnDdGetFlipStatus(hSurface
,puGetFlipStatusData
);
201 /************************************************************************/
202 /* NtGdiDdUpdateOverlay */
203 /************************************************************************/
206 NtGdiDdUpdateOverlay(HANDLE hSurfaceDestination
,
207 HANDLE hSurfaceSource
,
208 PDD_UPDATEOVERLAYDATA puUpdateOverlayData
)
210 PGD_DXDDUPDATEOVERLAY pfnDdUpdateOverlay
= (PGD_DXDDUPDATEOVERLAY
)gpDxFuncs
[DXG_INDEX_DxDdUpdateOverlay
].pfn
;
212 if (pfnDdUpdateOverlay
== NULL
)
214 DPRINT1("Warning: no pfnDdUpdateOverlay");
215 return DDHAL_DRIVER_NOTHANDLED
;
218 DPRINT1("Calling on dxg.sys pfnDdUpdateOverlay");
219 return pfnDdUpdateOverlay(hSurfaceDestination
,hSurfaceSource
,puUpdateOverlayData
);
222 /************************************************************************/
223 /* NtGdiDdSetOverlayPosition */
224 /************************************************************************/
228 NtGdiDdSetOverlayPosition(HANDLE hSurfaceSource
,
229 HANDLE hSurfaceDestination
,
230 PDD_SETOVERLAYPOSITIONDATA puSetOverlayPositionData
)
232 PGD_DXDDSETOVERLAYPOSITION pfnDdSetOverlayPosition
= (PGD_DXDDSETOVERLAYPOSITION
)gpDxFuncs
[DXG_INDEX_DxDdSetOverlayPosition
].pfn
;
234 if (pfnDdSetOverlayPosition
== NULL
)
236 DPRINT1("Warning: no pfnDdSetOverlayPosition");
237 return DDHAL_DRIVER_NOTHANDLED
;
240 DPRINT1("Calling on dxg.sys pfnDdSetOverlayPosition");
241 return pfnDdSetOverlayPosition(hSurfaceSource
,hSurfaceDestination
,puSetOverlayPositionData
);
244 /************************************************************************/
245 /* This is not part of the ddsurface interface but it */
246 /* deals with the surface */
247 /************************************************************************/
250 /************************************************************************/
251 /* NtGdiDdAlphaBlt */
252 /************************************************************************/
255 NtGdiDdAlphaBlt(HANDLE hSurfaceDest
,
257 PDD_BLTDATA puBltData
)
259 PGD_DDALPHABLT pfnDdAlphaBlt
= (PGD_DDALPHABLT
)gpDxFuncs
[DXG_INDEX_DxDdAlphaBlt
].pfn
;
261 if (pfnDdAlphaBlt
== NULL
)
263 DPRINT1("Warning: no pfnDdAlphaBlt");
264 return DDHAL_DRIVER_NOTHANDLED
;
267 DPRINT1("Calling on dxg.sys DdAlphaBlt");
268 return pfnDdAlphaBlt(hSurfaceDest
,hSurfaceSrc
,puBltData
);
271 /************************************************************************/
272 /* NtGdiDdAttachSurface */
273 /************************************************************************/
276 NtGdiDdAttachSurface(HANDLE hSurfaceFrom
,
280 PGD_DDATTACHSURFACE pfnDdAttachSurface
= (PGD_DDATTACHSURFACE
)gpDxFuncs
[DXG_INDEX_DxDdAttachSurface
].pfn
;
282 if (pfnDdAttachSurface
== NULL
)
284 DPRINT1("Warning: no pfnDdAttachSurface");
285 return DDHAL_DRIVER_NOTHANDLED
;
288 DPRINT1("Calling on dxg.sys pfnDdAttachSurface");
289 return pfnDdAttachSurface(hSurfaceFrom
,hSurfaceTo
);
292 /************************************************************************/
293 /* NtGdiDdUnattachSurface */
294 /************************************************************************/
295 /* Note: MSDN protypes is VOID APIENTRY NtGdiDdUnattachSurface(HANDLE hSurface, HANDLE hSurfaceAttached)
296 But it say it return either DDHAL_DRIVER_NOTHANDLED or DDHAL_DRIVER_HANDLED
297 so I guess it is a typo in MSDN for this prototype for the info contradicts itself.
301 NtGdiDdUnattachSurface(HANDLE hSurface
,
302 HANDLE hSurfaceAttached
)
304 PGD_DXDDUNATTACHSURFACE pfnDdUnattachSurface
= (PGD_DXDDUNATTACHSURFACE
)gpDxFuncs
[DXG_INDEX_DxDdUnattachSurface
].pfn
;
305 if (pfnDdUnattachSurface
== NULL
)
307 DPRINT1("Warning: no pfnDdUnattachSurface");
308 return DDHAL_DRIVER_NOTHANDLED
;
311 DPRINT1("Calling on dxg.sys pfnDdUnattachSurface");
312 return pfnDdUnattachSurface(hSurface
,hSurfaceAttached
);